欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中的支持向量機(jī)SVM的使用(附實(shí)例代碼)

 更新時(shí)間:2019年06月26日 10:14:12   作者:陸瑤  
這篇文章主要介紹了Python中的支持向量機(jī)SVM的使用(附實(shí)例代碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

除了在Matlab中使用PRTools工具箱中的svm算法,Python中一樣可以使用支持向量機(jī)做分類(lèi)。因?yàn)镻ython中的sklearn庫(kù)也集成了SVM算法,本文的運(yùn)行環(huán)境是Pycharm。

一、導(dǎo)入sklearn算法包

Scikit-Learn庫(kù)已經(jīng)實(shí)現(xiàn)了所有基本機(jī)器學(xué)習(xí)的算法,具體使用詳見(jiàn)官方文檔說(shuō)明:http://scikit-learn.org/stable/auto_examples/index.html。

skleran中集成了許多算法,其導(dǎo)入包的方式如下所示,

邏輯回歸:from sklearn.linear_model import LogisticRegression

樸素貝葉斯:from sklearn.naive_bayes import GaussianNB

K-近鄰:from sklearn.neighbors import KNeighborsClassifier

決策樹(shù):from sklearn.tree import DecisionTreeClassifier

支持向量機(jī):from sklearn import svm

二、sklearn中svc的使用

(1)使用numpy中的loadtxt讀入數(shù)據(jù)文件

loadtxt()的使用方法:

fname:文件路徑。eg:C:/Dataset/iris.txt。

dtype:數(shù)據(jù)類(lèi)型。eg:float、str等。

delimiter:分隔符。eg:‘,'。

converters:將數(shù)據(jù)列與轉(zhuǎn)換函數(shù)進(jìn)行映射的字典。eg:{1:fun},含義是將第2列對(duì)應(yīng)轉(zhuǎn)換函數(shù)進(jìn)行轉(zhuǎn)換。

usecols:選取數(shù)據(jù)的列。

以Iris蘭花數(shù)據(jù)集為例子:

由于從UCI數(shù)據(jù)庫(kù)中下載的Iris原始數(shù)據(jù)集的樣子是這樣的,前四列為特征列,第五列為類(lèi)別列,分別有三種類(lèi)別Iris-setosa, Iris-versicolor, Iris-virginica。   

當(dāng)使用numpy中的loadtxt函數(shù)導(dǎo)入該數(shù)據(jù)集時(shí),假設(shè)數(shù)據(jù)類(lèi)型dtype為浮點(diǎn)型,但是很明顯第五列的數(shù)據(jù)類(lèi)型并不是浮點(diǎn)型。

因此我們要額外做一個(gè)工作,即通過(guò)loadtxt()函數(shù)中的converters參數(shù)將第五列通過(guò)轉(zhuǎn)換函數(shù)映射成浮點(diǎn)類(lèi)型的數(shù)據(jù)。

首先,我們要寫(xiě)出一個(gè)轉(zhuǎn)換函數(shù):

def iris_type(s):
  it = {'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2}
  return it[s]

接下來(lái)讀入數(shù)據(jù),converters={4: iris_type}中“4”指的是第5列:

path = u'D:/f盤(pán)/python/學(xué)習(xí)/iris.data' # 數(shù)據(jù)文件路徑
data = np.loadtxt(path, dtype=float, delimiter=',', converters={4: iris_type})

讀入結(jié)果:

(2)將Iris分為訓(xùn)練集與測(cè)試集

x, y = np.split(data, (4,), axis=1)
x = x[:, :2]
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.6)

1.split(數(shù)據(jù),分割位置,軸=1(水平分割) or 0(垂直分割))。

2.x = x[:, :2]是為方便后期畫(huà)圖更直觀,故只取了前兩列特征值向量訓(xùn)練。

3. sklearn.model_selection.train_test_split隨機(jī)劃分訓(xùn)練集與測(cè)試集。train_test_split(train_data,train_target,test_size=數(shù)字, random_state=0)

參數(shù)解釋?zhuān)?/p>

  • train_data:所要?jiǎng)澐值臉颖咎卣骷?/li>
  • train_target:所要?jiǎng)澐值臉颖窘Y(jié)果
  • test_size:樣本占比,如果是整數(shù)的話就是樣本的數(shù)量
  • random_state:是隨機(jī)數(shù)的種子。

隨機(jī)數(shù)種子:其實(shí)就是該組隨機(jī)數(shù)的編號(hào),在需要重復(fù)試驗(yàn)的時(shí)候,保證得到一組一樣的隨機(jī)數(shù)。比如你每次都填1,其他參數(shù)一樣的情況下你得到的隨機(jī)數(shù)組是一樣的。但填0或不填,每次都會(huì)不一樣。隨機(jī)數(shù)的產(chǎn)生取決于種子,隨機(jī)數(shù)和種子之間的關(guān)系遵從以下兩個(gè)規(guī)則:種子不同,產(chǎn)生不同的隨機(jī)數(shù);種子相同,即使實(shí)例不同也產(chǎn)生相同的隨機(jī)數(shù)。

(3)訓(xùn)練svm分類(lèi)器

# clf = svm.SVC(C=0.1, kernel='linear', decision_function_shape='ovr')
  clf = svm.SVC(C=0.8, kernel='rbf', gamma=20, decision_function_shape='ovr')
  clf.fit(x_train, y_train.ravel())

kernel='linear'時(shí),為線性核,C越大分類(lèi)效果越好,但有可能會(huì)過(guò)擬合(defaul C=1)。

kernel='rbf'時(shí)(default),為高斯核,gamma值越小,分類(lèi)界面越連續(xù);gamma值越大,分類(lèi)界面越“散”,分類(lèi)效果越好,但有可能會(huì)過(guò)擬合。

decision_function_shape='ovr'時(shí),為one v rest,即一個(gè)類(lèi)別與其他類(lèi)別進(jìn)行劃分,

decision_function_shape='ovo'時(shí),為one v one,即將類(lèi)別兩兩之間進(jìn)行劃分,用二分類(lèi)的方法模擬多分類(lèi)的結(jié)果。

(4)計(jì)算svc分類(lèi)器的準(zhǔn)確率

print clf.score(x_train, y_train) # 精度
y_hat = clf.predict(x_train)
show_accuracy(y_hat, y_train, '訓(xùn)練集')
print clf.score(x_test, y_test)
y_hat = clf.predict(x_test)
show_accuracy(y_hat, y_test, '測(cè)試集')

結(jié)果為:

如果想查看決策函數(shù),可以通過(guò)decision_function()實(shí)現(xiàn)

print 'decision_function:\n', clf.decision_function(x_train)
print '\npredict:\n', clf.predict(x_train)

結(jié)果為:

decision_function中每一列的值代表距離各類(lèi)別的距離。

(5)繪制圖像

1.確定坐標(biāo)軸范圍,x,y軸分別表示兩個(gè)特征

x1_min, x1_max = x[:, 0].min(), x[:, 0].max() # 第0列的范圍
x2_min, x2_max = x[:, 1].min(), x[:, 1].max() # 第1列的范圍
x1, x2 = np.mgrid[x1_min:x1_max:200j, x2_min:x2_max:200j] # 生成網(wǎng)格采樣點(diǎn)
grid_test = np.stack((x1.flat, x2.flat), axis=1) # 測(cè)試點(diǎn)
# print 'grid_test = \n', grid_testgrid_hat = clf.predict(grid_test)    # 預(yù)測(cè)分類(lèi)值grid_hat = grid_hat.reshape(x1.shape) # 使之與輸入的形狀相同

這里用到了mgrid()函數(shù),該函數(shù)的作用這里簡(jiǎn)單介紹一下:

 假設(shè)假設(shè)目標(biāo)函數(shù)F(x,y)=x+y。x軸范圍1~3,y軸范圍4~6,當(dāng)繪制圖像時(shí)主要分四步進(jìn)行:

【step1:x擴(kuò)展】(朝右擴(kuò)展):

        [1 1 1]

   [2 2 2]

   [3 3 3]

【step2:y擴(kuò)展】(朝下擴(kuò)展):

   [4 5 6]

   [4 5 6]

   [4 5 6]

【step3:定位(xi,yi)】:

   [(1,4) (1,5) (1,6)]

   [(2,4) (2,5) (2,6)]

   [(3,4) (3,5) (3,6)]

【step4:將(xi,yi)代入F(x,y)=x+y】

因此這里x1, x2 = np.mgrid[x1_min:x1_max:200j, x2_min:x2_max:200j]后的結(jié)果為:

再通過(guò)stack()函數(shù),axis=1,生成測(cè)試點(diǎn)

2.指定默認(rèn)字體

mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False

3.繪制

cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])

cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])

plt.pcolormesh(x1, x2, grid_hat, cmap=cm_light)

plt.scatter(x[:, 0], x[:, 1], c=y, edgecolors='k', s=50, cmap=cm_dark) # 樣本

plt.scatter(x_test[:, 0], x_test[:, 1], s=120, facecolors='none', zorder=10) # 圈中測(cè)試集樣本

plt.xlabel(u'花萼長(zhǎng)度', fontsize=13)

plt.ylabel(u'花萼寬度', fontsize=13)

plt.xlim(x1_min, x1_max)

plt.ylim(x2_min, x2_max)

plt.title(u'鳶尾花SVM二特征分類(lèi)', fontsize=15)

# plt.grid()

plt.show()

pcolormesh(x,y,z,cmap)這里參數(shù)代入x1,x2,grid_hat,cmap=cm_light繪制的是背景。

 scatter中edgecolors是指描繪點(diǎn)的邊緣色彩,s指描繪點(diǎn)的大小,cmap指點(diǎn)的顏色。

xlim指圖的邊界。

最終結(jié)果為:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)入門(mén)篇

    Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)入門(mén)篇

    相信大多數(shù)8090后都玩過(guò)太空射擊游戲,在過(guò)去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來(lái)自己動(dòng)手實(shí)現(xiàn)它,在編寫(xiě)學(xué)習(xí)中回顧過(guò)往展望未來(lái),下面開(kāi)始入門(mén)篇
    2022-08-08
  • 關(guān)于Pycharm亂碼解決大全

    關(guān)于Pycharm亂碼解決大全

    這篇文章主要介紹了關(guān)于Pycharm亂碼解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解Python中映射類(lèi)型(字典)操作符的概念和使用

    詳解Python中映射類(lèi)型(字典)操作符的概念和使用

    這篇文章主要介紹了詳解Python中映射類(lèi)型(字典)操作符的概念和使用,字典是目前Python中唯一的映射類(lèi)型,需要的朋友可以參考下
    2015-08-08
  • python爬蟲(chóng)進(jìn)階之協(xié)程詳解

    python爬蟲(chóng)進(jìn)階之協(xié)程詳解

    這篇文章主要介紹了python爬蟲(chóng)進(jìn)階之協(xié)程詳解,coroutine中文翻譯叫協(xié)程,在 Python 中昌指代為協(xié)程對(duì)象類(lèi)型,可以將協(xié)程對(duì)象注冊(cè)到時(shí)間循環(huán)中被調(diào)用,需要的朋友可以參考下
    2023-08-08
  • selenium + python 獲取table數(shù)據(jù)的示例講解

    selenium + python 獲取table數(shù)據(jù)的示例講解

    今天小編就為大家分享一篇selenium + python 獲取table數(shù)據(jù)的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Pytorch GPU內(nèi)存占用很高,但是利用率很低如何解決

    Pytorch GPU內(nèi)存占用很高,但是利用率很低如何解決

    這篇文章主要介紹了Pytorch GPU內(nèi)存占用很高,但是利用率很低的原因及解決方法,具有很好的參考價(jià)值,希望對(duì)大家 有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 詳解python中flask_caching庫(kù)的用法

    詳解python中flask_caching庫(kù)的用法

    這篇文章主要介紹了詳解python中flask_caching庫(kù)的用法,可以在一定的時(shí)間內(nèi)直接返回結(jié)果而不是每次都需要計(jì)算或者從數(shù)據(jù)庫(kù)中查找。flask_caching插件就是提供這種功能的神器,需要的朋友可以參考下
    2023-05-05
  • python進(jìn)行OpenCV實(shí)戰(zhàn)之畫(huà)圖(直線、矩形、圓形)

    python進(jìn)行OpenCV實(shí)戰(zhàn)之畫(huà)圖(直線、矩形、圓形)

    這篇文章主要為大家詳細(xì)介紹了python進(jìn)行OpenCV實(shí)戰(zhàn)之畫(huà)圖功能,畫(huà)出直線、矩形、圓形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • python機(jī)器學(xué)習(xí)庫(kù)scikit-learn:SVR的基本應(yīng)用

    python機(jī)器學(xué)習(xí)庫(kù)scikit-learn:SVR的基本應(yīng)用

    這篇文章主要介紹了python機(jī)器學(xué)習(xí)庫(kù)scikit-learn:SVR的基本應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 解析django的csrf跨站請(qǐng)求偽造

    解析django的csrf跨站請(qǐng)求偽造

    本文主要介紹了解析django的csrf跨站請(qǐng)求偽造,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論