Python機(jī)器學(xué)習(xí)應(yīng)用之支持向量機(jī)的分類預(yù)測(cè)篇_第1頁(yè)
Python機(jī)器學(xué)習(xí)應(yīng)用之支持向量機(jī)的分類預(yù)測(cè)篇_第2頁(yè)
Python機(jī)器學(xué)習(xí)應(yīng)用之支持向量機(jī)的分類預(yù)測(cè)篇_第3頁(yè)
Python機(jī)器學(xué)習(xí)應(yīng)用之支持向量機(jī)的分類預(yù)測(cè)篇_第4頁(yè)
Python機(jī)器學(xué)習(xí)應(yīng)用之支持向量機(jī)的分類預(yù)測(cè)篇_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第Python機(jī)器學(xué)習(xí)應(yīng)用之支持向量機(jī)的分類預(yù)測(cè)篇目錄1、Question2、Answer!SVM3、軟間隔4、超平面支持向量機(jī)常用于數(shù)據(jù)分類,也可以用于數(shù)據(jù)的回歸預(yù)測(cè)

1、Question

我們經(jīng)常會(huì)遇到這樣的問(wèn)題,給你一些屬于兩個(gè)類別的數(shù)據(jù)(如子圖1),需要一個(gè)線性分類器將這些數(shù)據(jù)分開,有很多分法(如子圖2),現(xiàn)在有一個(gè)問(wèn)題,兩個(gè)分類器,哪一個(gè)更好?為了判斷好壞,我們需要引入一個(gè)準(zhǔn)則:好的分類器不僅僅能夠很好的分開已有的數(shù)據(jù)集,還能對(duì)為知的數(shù)據(jù)進(jìn)行兩個(gè)劃分,假設(shè)現(xiàn)在有一個(gè)屬于紅色數(shù)據(jù)點(diǎn)的新數(shù)據(jù)(如子圖3中的綠三角),可以看到此時(shí)黑色的線會(huì)把這個(gè)新的數(shù)據(jù)集分錯(cuò),而藍(lán)色的線不會(huì)。**那么如何評(píng)判兩條線的健壯性?**此時(shí),引入一個(gè)重要的概念最大間隔(刻畫著當(dāng)前分類器與數(shù)據(jù)集的邊界)(如子圖4中的陰影部分)可以看到藍(lán)色的線最大的間隔大于黑色的線,所以選擇藍(lán)色的線作為我們的分類器。(如子圖5)此時(shí)的分類器是最優(yōu)分類器嗎?或者說(shuō),有沒有更好的分類器具有更大的間隔?有的(如子圖6)為了找到最優(yōu)分類器,引入SVM

2、Answer!SVM

importnumpyasnp

importmatplotlib.pyplotasplt

fromsklearn.datasetsimportmake_blobs

X,y=make_blobs(n_samples=60,centers=2,random_state=0,cluster_std=0.4)

x_fit=np.linspace(0,3)

#使用SVM

fromsklearn.svmimportSVC

#SVM函數(shù)

clf=SVC(kernel='linear')

clf.fit(X,y)

#最佳函數(shù)

w=clf.coef_[0]

a=-w[0]/w[1]

y_p=a*x_fit-(ercept_[0])/w[1]

#最大邊距下邊界

b_down=clf.support_vectors_[0]

y_down=a*x_fit+b_down[1]-a*b_down[0]

#最大邊距上屆

b_up=clf.support_vectors_[-1]

y_up=a*x_fit+b_up[1]-a*b_up[0]

#畫散點(diǎn)圖

X,y=make_blobs(n_samples=60,centers=2,random_state=0,cluster_std=0.4)

plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)

#畫函數(shù)

plt.plot(x_fit,y_p,'-c')

#畫邊距

plt.fill_between(x_fit,y_down,y_up,edgecolor='none',color='#AAAAAA',alpha=0.4)

#畫支持向量

plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],edgecolor='b',

s=80,facecolors='none')

運(yùn)行結(jié)果

其中帶邊線的是距離當(dāng)前分類器最近的點(diǎn),將這些點(diǎn)稱之為支持向量,支持向量機(jī)為我們?cè)诒姸嗫赡艿姆诸惼髦g進(jìn)行選擇的原則,從而確保對(duì)為知數(shù)據(jù)集具有更高的泛化性

3、軟間隔

在很多時(shí)候,我們拿到是數(shù)據(jù)不想上述那樣分明(如下圖)這種情況并不容易找到上述那樣的最大間隔。于是就有了軟間隔,相對(duì)于硬間隔,我們?cè)试S個(gè)別數(shù)據(jù)出現(xiàn)在間隔帶中。我們知道,如果沒有一個(gè)原則進(jìn)行約束,滿足軟間隔的分類器也會(huì)出現(xiàn)很多條。所以需要對(duì)分錯(cuò)的數(shù)據(jù)進(jìn)行懲罰,SVM函數(shù),有一個(gè)參數(shù)C就是懲罰參數(shù)。懲罰參數(shù)越小,容忍性就越大

此處C設(shè)置為1

#%%軟間隔

X,y=make_blobs(n_samples=60,centers=2,random_state=0,cluster_std=0.9)

x_fit=np.linspace(-2,4)

#懲罰參數(shù):C=1,

clf=SVC(C=1,kernel='linear')

clf.fit(X,y)

#最佳函數(shù)

w=clf.coef_[0]

a=-w[0]/w[1]

y_great=a*x_fit-(ercept_[0])/w[1]

#最大邊距下邊界

b_down=clf.support_vectors_[0]

y_down=a*x_fit+b_down[1]-a*b_down[0]

#最大邊距上邊界

b_up=clf.support_vectors_[-1]

y_up=a*x_fit+b_up[1]-a*b_up[0]

#畫散點(diǎn)圖

plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)

#畫函數(shù)

plt.plot(x_fit,y_great,'-c')

#畫邊距

plt.fill_between(x_fit,y_down,y_up,edgecolor='none',color='#AAAAAA',alpha=0.4)

#畫支持向量

plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],edgecolor='b',

s=80,facecolors='none')

運(yùn)行結(jié)果

當(dāng)將C設(shè)置為0.2時(shí),SVM會(huì)更有包容性,從而兼容更多的錯(cuò)分樣本,結(jié)果如下:

4、超平面

有時(shí),我們得到的數(shù)據(jù)是這樣的(如下圖),這時(shí),可以將二維空間(低維)的數(shù)據(jù)映射到三維空間(高維)中,此時(shí),可以通過(guò)一個(gè)超平面對(duì)數(shù)據(jù)進(jìn)行劃分,所以,映射的目的在于使用SVM在高維空間找到超平面的能力

#%%超平面

fromsklearn.datasetsimportmake_circles

#畫散點(diǎn)圖

X,y=make_circles(100,factor=.1,noise=.1,random_state=2025)

plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)

#數(shù)據(jù)映射

r=np.exp(-(X[:,0]**2+X[:,1]**2))

ax=plt.subplot(projection='3d')

ax.scatter3D(X[:,0],X[:,1],r,c=y,s=50,cmap=plt.cm.Paired)

ax.set_xlabel('x')

ax.set_ylabel('y')

ax.set_zlabel('z')

x_1,y_1=np.meshgrid(np.linspace(-1,1),np.linspace(-1,1))

z=0.01*x_1+0.01*y_1+0.5

ax.plot_surface(x_1,y_1,z,alpha=0.3)

運(yùn)行結(jié)果

使用高斯核函數(shù)實(shí)現(xiàn)這種情形的分類

#%%使用高斯核函數(shù)實(shí)現(xiàn)這種分類:kernel=‘rbf'

X,y=make_circles(100,factor=.1,noise=.1,random_state=2025)

plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap=plt.cm.Paired)

clf=SVC(kernel='rbf')

clf.fit(X,y)

ax=plt.gca()

x=np.linspace(-1,1)

y=np.linspace(-1,1)

x_1,y_1=np.meshgrid(x,y)

P=np.zeros_like(x_1)

fori,xiinenumerate(x):

forj,yjinenumerate(y):

P[i,j]=clf.decision_function(np.array([[xi,yj]]))

ax.contour(x_1,y_1,P,colors='k',le

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論