日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

支持向量机(SVM)理解以及在sklearn库中的简单应用

發布時間:2023/12/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 支持向量机(SVM)理解以及在sklearn库中的简单应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 什么是支持向量機

  • 英文Support Vector Machines,簡寫SVM . 主要是基于支持向量來命名的,什么是支持向量后面會講到…….最簡單的SVM是用來二分類的,在深度學習崛起之前被譽為最好的現成分類器,”現成”指的是數據處理好,SVM可以直接拿來使用 …

2. 名詞解釋

2.1線性(不)可分 , 超平面


上圖 線性可分(綠色熒光筆直線),即一條直線完美分類,雖然有不同的分割法,這條分割線就叫做”分割超平面”,二維中直線就是一個超平面,擴展到n維中n-1維也就是超平面

左面這張圖很明顯,所謂線性不可分,則是一條直線不能完美分類

左面這張圖也是線性不可分 但是 有一個圓形區域很好的進行了分類
這時候就可以映射到高維,見下例

面 到 體 :

線 到 面 :
這個例子就比較好理解了,主要是怎么映射? 見下內容….

2.2 支持向量

支持向量在SVM中很重要,名字就看得出來, 在上例中紅線為分割超平面,紅色的*點就是支持向量點,即離分割超平面最近的點。

3. SVM理解

在二分類問題中,SVM需要的就是尋得一個分割超平面,使margin最大化,見下圖,margin就是切割超平面離最近點的距離
最近的點就是支持向量點,這里的超平面可以定義為 w^X+b=0
假設2維特征向量X=(x1,x2) , 把b想象虛擬的w0 ,
那么超平面方程就變成了 : w0+w1x1+w2x2=0
右上方點滿足 : w0+w1x1+w2x2>0
同理,左下點滿足 : w0+w1x1+w2x2<0
經過對weight參數的調整,使得
H1:w0+w1x1+w2x2>=1 for y = +1
H2:w0+w1x1+w2x2<=1 for y = - 1 (用y的+1代表一類,-1代表另一類)
綜上兩式
yi(w0+w1x1+w2x2)>=1,?i

那么如果線行不可分呢,那就需要映射到高維,例如X=(x1,x2,x3) 那么映射到6維Z函數就可以是 θ1(x)=x1,θ2(x)=x2,θ3(x)=x3θ4(x)=x21,θ5(x)=x1x2,θ6(x)=x1x3,取而代之的方程變為Y=w1z1+w2z2+...+w6z6 那么怎么映射呢,(回答:用到的是內積)內積很耗時,所以使用核函數來計算這個內積,使得高維化時間變短,主要的核函數有

  • linear : 線性核函數(linear kernel)
  • poly : 多項式核函數(ploynomial kernel)
  • rbf : 徑向機核函數(radical basis function)
  • sigmoid : 神經元的非線性作用函數核函數(Sigmoid tanh)

具體介紹還是看看文檔吧…..

然后根據核函數就可以進行分類或者回歸了…..

4. SVM優缺點

優點
- 支持向量決定時間復雜,而不是取決于數據集的大小
- 結果易于理解
缺點
- 對于參數以及核函數有依賴,原始算法不加修改只用于二分類
- 算法實現比較困難 (依賴sklearn庫的話就算了,打臉)

5. sklearn庫簡單應用實例

# coding:utf-8from sklearn import svm from numpy import * import pylab as pl# 加載數據集 def loadData(fileName):dataMat = []labelMat = []with open(fileName) as txtFile:for line in txtFile.readlines():dataMat.append(map(float, line.split())[0:-1])labelMat.append(map(float, line.split())[-1])return dataMat, labelMat# if __name__ == '__main__':x, y = loadData("train.txt")X, Y = loadData("test.txt")#'使用線性方法分類'clf = svm.SVR(kernel='linear') clf.fit(x, y)res = clf.predict(X)print "kernel is linear", corrcoef(Y, res, rowvar=0)[0, 1]#'使用徑向機方法分類'clf = svm.SVR(kernel='rbf') clf.fit(x, y)res = clf.predict(X)print "kernel is rbf", corrcoef(Y, res, rowvar=0)[0, 1]#'使用線性最小二乘法進行分類'x = mat(x)X = mat(X)y = mat(y).TY = mat(Y).Ttemp = x.T * xws = temp.I * (x.T * y)yPre = X * wsprint "linear", corrcoef(yPre, Y, rowvar=0)[0, 1]''' SVR 支持向量回歸 '''# w^T * x + bias# weight is .coef_# bias is .intercept_random.seed(0)x = r_[random.randn(20, 2) - [2, 2], random.randn(20, 2) + [2, 2]]y = [0] * 20 + [1] * 20clf = svm.SVC(kernel='linear')clf.fit(x, y)w = clf.coef_[0]# print "coef",clf.coef_a = -w[0] / w[1]xx = arange(-4, 4)yy = a * xx - (clf.intercept_[0]) / w[1] # intercept_ bias# print "bias",clf.intercept_b = clf.support_vectors_[0]yy1 = a * xx + (b[1] - a * b[0])b = clf.support_vectors_[-1]yy2 = a * xx + (b[1] - a * b[0])pl.plot(xx, yy, 'k-', color='red')pl.plot(xx, yy1, 'k--', color='green')pl.plot(xx, yy2, 'k--', color='green')pl.plot(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], '*', color='red')# print clf.support_vectors_pl.scatter(x[:, 0], x[:, 1], marker='.', s=60)pl.show()

6. 圖像結果 以及 分析

# kernel is linear 0.989824485227 # kernel is rbf 0.990336373871 # linear 0.989824485227 '對比發現,簡單調用中rbf函數分類效果最好,內核函數linear就是利用了最小二乘法'


紅色為支持向量,紅線為切割超平面,綠色虛線為邊際超平面,用來’阻擋’兩類的超平面

附 數據集

點擊這里

    • 什么是支持向量機
    • 名詞解釋
      • 1線性不可分 超平面
      • 2 支持向量
    • SVM理解
    • SVM優缺點
    • sklearn庫簡單應用實例
    • 圖像結果 以及 分析
    • 附 數據集

總結

以上是生活随笔為你收集整理的支持向量机(SVM)理解以及在sklearn库中的简单应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。