亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SVM基本概念及Python實(shí)現(xiàn)代碼

 更新時(shí)間:2017年12月27日 08:41:54   作者:傲慢灬  
這篇文章主要為大家詳細(xì)介紹了SVM基本概念及Python實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

SVM(support vector machine)支持向量機(jī):

注意:本文不準(zhǔn)備提到數(shù)學(xué)證明的過(guò)程,一是因?yàn)橛幸黄浅:玫奈恼陆忉尩姆浅:茫?a target="_blank" >支持向量機(jī)通俗導(dǎo)論(理解SVM的三層境界) ,另一方面是因?yàn)槲抑皇莻€(gè)程序員,不是搞數(shù)學(xué)的(主要是因?yàn)閿?shù)學(xué)不好。),主要目的是將SVM以最通俗易懂,簡(jiǎn)單粗暴的方式解釋清楚。

線(xiàn)性分類(lèi):

先從線(xiàn)性可分的數(shù)據(jù)講起,如果需要分類(lèi)的數(shù)據(jù)都是線(xiàn)性可分的,那么只需要一根直線(xiàn)f(x)=wx+b就可以分開(kāi)了,類(lèi)似這樣:

這種方法被稱(chēng)為:線(xiàn)性分類(lèi)器,一個(gè)線(xiàn)性分類(lèi)器的學(xué)習(xí)目標(biāo)便是要在n維的數(shù)據(jù)空間中找到一個(gè)超平面(hyper plane)。也就是說(shuō),數(shù)據(jù)不總是二維的,比如,三維的超平面是面。但是有個(gè)問(wèn)題:

上述兩種超平面,都可以將數(shù)據(jù)進(jìn)行分類(lèi),由此可推出,其實(shí)能有無(wú)數(shù)個(gè)超平面能將數(shù)據(jù)劃分,但是哪條最優(yōu)呢?

最大間隔分類(lèi)器Maximum Margin Classifier:

簡(jiǎn)稱(chēng)MMH, 對(duì)一個(gè)數(shù)據(jù)點(diǎn)進(jìn)行分類(lèi),當(dāng)超平面離數(shù)據(jù)點(diǎn)的“間隔”越大,分類(lèi)的確信度(confidence)也越大。所以,為了使得分類(lèi)的確信度盡量高,需要讓所選擇的超平面能夠最大化這個(gè)“間隔”值。這個(gè)間隔就是下圖中的Gap的一半。

用以生成支持向量的點(diǎn),如上圖XO,被稱(chēng)為支持向量點(diǎn),因此SVM有一個(gè)優(yōu)點(diǎn),就是即使有大量的數(shù)據(jù),但是支持向量點(diǎn)是固定的,因此即使再次訓(xùn)練大量數(shù)據(jù),這個(gè)超平面也可能不會(huì)變化。

非線(xiàn)性分類(lèi):

數(shù)據(jù)大多數(shù)情況都不可能是線(xiàn)性的,那如何分割非線(xiàn)性數(shù)據(jù)呢?

解決方法是將數(shù)據(jù)放到高維度上再進(jìn)行分割,如下圖:

當(dāng)f(x)=x時(shí),這組數(shù)據(jù)是個(gè)直線(xiàn),如上半部分,但是當(dāng)我把這組數(shù)據(jù)變?yōu)閒(x)=x^2時(shí),這組數(shù)據(jù)就變成了下半部分的樣子,也就可以被紅線(xiàn)所分割。

比如說(shuō),我這里有一組三維的數(shù)據(jù)X=(x1,x2,x3),線(xiàn)性不可分割,因此我需要將他轉(zhuǎn)換到六維空間去。因此我們可以假設(shè)六個(gè)維度分別是:x1,x2,x3,x1^2,x1*x2,x1*x3,當(dāng)然還能繼續(xù)展開(kāi),但是六維的話(huà)這樣就足夠了。

新的決策超平面:d(Z)=WZ+b,解出W和b后帶入方程,因此這組數(shù)據(jù)的超平面應(yīng)該是:d(Z)=w1x1+w2x2+w3x3+w4*x1^2+w5x1x2+w6x1x3+b但是又有個(gè)新問(wèn)題,轉(zhuǎn)換高緯度一般是以?xún)?nèi)積(dot product)的方式進(jìn)行的,但是內(nèi)積的算法復(fù)雜度非常大。

核函數(shù)Kernel:

我們會(huì)經(jīng)常遇到線(xiàn)性不可分的樣例,此時(shí),我們的常用做法是把樣例特征映射到高維空間中去。但進(jìn)一步,如果凡是遇到線(xiàn)性不可分的樣例,一律映射到高維空間,那么這個(gè)維度大小是會(huì)高到可怕的,而且內(nèi)積方式復(fù)雜度太大。此時(shí),核函數(shù)就隆重登場(chǎng)了,核函數(shù)的價(jià)值在于它雖然也是講特征進(jìn)行從低維到高維的轉(zhuǎn)換,但核函數(shù)絕就絕在它事先在低維上進(jìn)行計(jì)算,而將實(shí)質(zhì)上的分類(lèi)效果表現(xiàn)在了高維上,也就如上文所說(shuō)的避免了直接在高維空間中的復(fù)雜計(jì)算。

幾種常用核函數(shù):

h度多項(xiàng)式核函數(shù)(Polynomial Kernel of Degree h)

高斯徑向基和函數(shù)(Gaussian radial basis function Kernel)

S型核函數(shù)(Sigmoid function Kernel)

圖像分類(lèi),通常使用高斯徑向基和函數(shù),因?yàn)榉诸?lèi)較為平滑,文字不適用高斯徑向基和函數(shù)。沒(méi)有標(biāo)準(zhǔn)的答案,可以嘗試各種核函數(shù),根據(jù)精確度判定。

松弛變量:

數(shù)據(jù)本身可能有噪點(diǎn),會(huì)使得原本線(xiàn)性可分的數(shù)據(jù)需要映射到高維度去。對(duì)于這種偏離正常位置很遠(yuǎn)的數(shù)據(jù)點(diǎn),我們稱(chēng)之為 outlier ,在我們?cè)瓉?lái)的 SVM 模型里,outlier 的存在有可能造成很大的影響,因?yàn)槌矫姹旧砭褪侵挥猩贁?shù)幾個(gè) support vector 組成的,如果這些 support vector 里又存在 outlier 的話(huà),其影響就很大了。

因此排除outlier點(diǎn),可以相應(yīng)的提高模型準(zhǔn)確率和避免Overfitting的方式。

解決多分類(lèi)問(wèn)題:

經(jīng)典的SVM只給出了二類(lèi)分類(lèi)的算法,現(xiàn)實(shí)中數(shù)據(jù)可能需要解決多類(lèi)的分類(lèi)問(wèn)題。因此可以多次運(yùn)行SVM,產(chǎn)生多個(gè)超平面,如需要分類(lèi)1-10種產(chǎn)品,首先找到1和2-10的超平面,再尋找2和1,3-10的超平面,以此類(lèi)推,最后需要測(cè)試數(shù)據(jù)時(shí),按照相應(yīng)的距離或者分布判定。

SVM與其他機(jī)器學(xué)習(xí)算法對(duì)比(圖):

Python實(shí)現(xiàn)方式:

線(xiàn)性,基礎(chǔ):

from sklearn import svm 
 
x = [[2,0,1],[1,1,2],[2,3,3]] 
y = [0,0,1] #分類(lèi)標(biāo)記 
clf = svm.SVC(kernel = 'linear') #SVM模塊,svc,線(xiàn)性核函數(shù) 
clf.fit(x,y) 
 
print(clf) 
 
print(clf.support_vectors_) #支持向量點(diǎn) 
 
print(clf.support_) #支持向量點(diǎn)的索引 
 
print(clf.n_support_) #每個(gè)class有幾個(gè)支持向量點(diǎn) 
 
print(clf.predict([2,0,3])) #預(yù)測(cè) 

線(xiàn)性,展示圖:

from sklearn import svm 
import numpy as np 
import matplotlib.pyplot as plt 
 
np.random.seed(0) 
x = np.r_[np.random.randn(20,2)-[2,2],np.random.randn(20,2)+[2,2]] #正態(tài)分布來(lái)產(chǎn)生數(shù)字,20行2列*2 
y = [0]*20+[1]*20 #20個(gè)class0,20個(gè)class1 
 
clf = svm.SVC(kernel='linear') 
clf.fit(x,y) 
 
w = clf.coef_[0] #獲取w 
a = -w[0]/w[1] #斜率 
#畫(huà)圖劃線(xiàn) 
xx = np.linspace(-5,5) #(-5,5)之間x的值 
yy = a*xx-(clf.intercept_[0])/w[1] #xx帶入y,截距 
 
#畫(huà)出與點(diǎn)相切的線(xiàn) 
b = clf.support_vectors_[0] 
yy_down = a*xx+(b[1]-a*b[0]) 
b = clf.support_vectors_[-1] 
yy_up = a*xx+(b[1]-a*b[0]) 
 
print("W:",w) 
print("a:",a) 
 
print("support_vectors_:",clf.support_vectors_) 
print("clf.coef_:",clf.coef_) 
 
plt.figure(figsize=(8,4)) 
plt.plot(xx,yy) 
plt.plot(xx,yy_down) 
plt.plot(xx,yy_up) 
plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=80) 
plt.scatter(x[:,0],x[:,1],c=y,cmap=plt.cm.Paired) #[:,0]列切片,第0列 
 
plt.axis('tight') 
 
plt.show() 

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

相關(guān)文章

  • Python基于matplotlib畫(huà)箱體圖檢驗(yàn)異常值操作示例【附xls數(shù)據(jù)文件下載】

    Python基于matplotlib畫(huà)箱體圖檢驗(yàn)異常值操作示例【附xls數(shù)據(jù)文件下載】

    這篇文章主要介紹了Python基于matplotlib畫(huà)箱體圖檢驗(yàn)異常值操作,涉及Python針對(duì)xls格式數(shù)據(jù)文件的讀取、matplotlib圖形繪制等相關(guān)操作技巧,并附帶xls數(shù)據(jù)文件供讀者下載參考,需要的朋友可以參考下
    2019-01-01
  • django跳轉(zhuǎn)頁(yè)面?zhèn)鲄⒌膶?shí)現(xiàn)

    django跳轉(zhuǎn)頁(yè)面?zhèn)鲄⒌膶?shí)現(xiàn)

    這篇文章主要介紹了django跳轉(zhuǎn)頁(yè)面?zhèn)鲄⒌膶?shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python3 Tkinkter + SQLite實(shí)現(xiàn)登錄和注冊(cè)界面

    Python3 Tkinkter + SQLite實(shí)現(xiàn)登錄和注冊(cè)界面

    這篇文章主要為大家詳細(xì)介紹了Python3 Tkinkter + SQLite實(shí)現(xiàn)登錄和注冊(cè)界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 使用Pycharm為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境完整圖文教程

    使用Pycharm為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境完整圖文教程

    這篇文章主要給大家介紹了關(guān)于使用Pycharm為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境的相關(guān)資料,我們?cè)谑褂胮ycharm做項(xiàng)目時(shí),最好給每一個(gè)工程都創(chuàng)建一個(gè)虛擬環(huán)境,將對(duì)應(yīng)的安裝包放在該虛擬環(huán)境中,避免項(xiàng)目與項(xiàng)目之間產(chǎn)生關(guān)系或沖突,便于管理,需要的朋友可以參考下
    2023-09-09
  • pycharm運(yùn)行scrapy過(guò)程圖解

    pycharm運(yùn)行scrapy過(guò)程圖解

    這篇文章主要介紹了pycharm運(yùn)行scrapy過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 解決安裝pyqt5之后無(wú)法打開(kāi)spyder的問(wèn)題

    解決安裝pyqt5之后無(wú)法打開(kāi)spyder的問(wèn)題

    今天小編就為大家分享一篇解決安裝pyqt5之后無(wú)法打開(kāi)spyder的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python常用的json標(biāo)準(zhǔn)庫(kù)

    Python常用的json標(biāo)準(zhǔn)庫(kù)

    今天小編就為大家分享一篇關(guān)于Python常用的json標(biāo)準(zhǔn)庫(kù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • Python中的enumerate函數(shù)使用方法詳解

    Python中的enumerate函數(shù)使用方法詳解

    enumerate()是python的內(nèi)置函數(shù),適用于python2.x和python3.x,這篇文章主要給大家介紹了關(guān)于Python中的enumerate函數(shù)使用方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Python3.4 splinter(模擬填寫(xiě)表單)使用方法

    Python3.4 splinter(模擬填寫(xiě)表單)使用方法

    今天小編就為大家分享一篇Python3.4 splinter(模擬填寫(xiě)表單)使用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • TensorFlow加載模型時(shí)出錯(cuò)的解決方式

    TensorFlow加載模型時(shí)出錯(cuò)的解決方式

    今天小編就為大家分享一篇TensorFlow加載模型時(shí)出錯(cuò)的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02

最新評(píng)論