最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

注意:本文不準(zhǔn)備提到數(shù)學(xué)證明的過程,一是因為有一篇非常好的文章解釋的非常好:支持向量機通俗導(dǎo)論(理解SVM的三層境界) ,另一方面是因為我只是個程序員,不是搞數(shù)學(xué)的(主要是因為數(shù)學(xué)不好。),主要目的是將SVM以最通俗易懂,簡單粗暴的方式解釋清楚。

線性分類:

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

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

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

最大間隔分類器Maximum Margin Classifier:

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

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

非線性分類:

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

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

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

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

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

核函數(shù)Kernel:

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

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

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

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

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

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

松弛變量:

數(shù)據(jù)本身可能有噪點,會使得原本線性可分的數(shù)據(jù)需要映射到高維度去。對于這種偏離正常位置很遠的數(shù)據(jù)點,我們稱之為 outlier ,在我們原來的 SVM 模型里,outlier 的存在有可能造成很大的影響,因為超平面本身就是只有少數(shù)幾個 support vector 組成的,如果這些 support vector 里又存在 outlier 的話,其影響就很大了。

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

解決多分類問題:

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

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

Python實現(xiàn)方式:

線性,基礎(chǔ):

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

線性,展示圖:

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)分布來產(chǎn)生數(shù)字,20行2列*2 
y = [0]*20+[1]*20 #20個class0,20個class1 
 
clf = svm.SVC(kernel='linear') 
clf.fit(x,y) 
 
w = clf.coef_[0] #獲取w 
a = -w[0]/w[1] #斜率 
#畫圖劃線 
xx = np.linspace(-5,5) #(-5,5)之間x的值 
yy = a*xx-(clf.intercept_[0])/w[1] #xx帶入y,截距 
 
#畫出與點相切的線 
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() 

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

相關(guān)文章

  • Python在不同場景合并多個Excel的方法

    Python在不同場景合并多個Excel的方法

    這篇文章主要介紹了Python在不同場景合并多個Excel的方法,文章圍繞主題總共分享了三種方法,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Python之os模塊案例詳解

    Python之os模塊案例詳解

    這篇文章主要介紹了Python之os模塊案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 詳解django中使用定時任務(wù)的方法

    詳解django中使用定時任務(wù)的方法

    在本篇文章中我們給大家介紹了關(guān)于django中使用定時任務(wù)的方法的相關(guān)知識點,有需要的朋友們參考下。
    2018-09-09
  • Python如何用filter函數(shù)篩選數(shù)據(jù)

    Python如何用filter函數(shù)篩選數(shù)據(jù)

    這篇文章主要介紹了Python如何用filter函數(shù)篩選數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Python post請求實現(xiàn)代碼實例

    Python post請求實現(xiàn)代碼實例

    這篇文章主要介紹了Python post請求實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • python如何利用paramiko執(zhí)行服務(wù)器命令

    python如何利用paramiko執(zhí)行服務(wù)器命令

    這篇文章主要介紹了python如何利用paramiko執(zhí)行服務(wù)器命令,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Flask搭建虛擬環(huán)境并運行第一個flask程序

    Flask搭建虛擬環(huán)境并運行第一個flask程序

    這篇文章主要介紹了Flask搭建虛擬環(huán)境并運行第一個flask程序,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python編程簡單幾行代碼實現(xiàn)視頻轉(zhuǎn)換Gif示例

    python編程簡單幾行代碼實現(xiàn)視頻轉(zhuǎn)換Gif示例

    這篇文章主要為大家介紹了簡單使用幾行python代碼就可以實現(xiàn)將視頻轉(zhuǎn)換Gif的示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • PyQt5中向單元格添加控件的方法示例

    PyQt5中向單元格添加控件的方法示例

    這篇文章主要介紹了PyQt5中向單元格添加控件的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python實現(xiàn)插入排序和選擇排序的方法

    Python實現(xiàn)插入排序和選擇排序的方法

    這篇文章主要介紹了Python實現(xiàn)插入排序和選擇排序的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05

最新評論

香河县| 泰顺县| 中牟县| 和政县| 鄂温| 崇礼县| 莆田市| 南京市| 神池县| 昭苏县| 湾仔区| 彝良县| 禹州市| 常州市| 佛冈县| 喀喇沁旗| 儋州市| 信丰县| 城市| 资中县| 三门峡市| 星座| 宜阳县| 淅川县| 兖州市| 曲麻莱县| 沭阳县| 山阳县| 壶关县| 宁远县| 彩票| 莱州市| 凤凰县| 民县| 五华县| 莱芜市| 湄潭县| 大化| 桦川县| 太湖县| 蓬莱市|