sklearn 支援向量機

2021-08-19 03:33:47 字數 1967 閱讀 7923

支援向量機svm(support vector machine)市一中用來進行模式識別、分類、回歸的機器學習模型。

以乙個客戶好壞分類為案例,客戶資訊如下所示:

客戶資訊數軸表示如下所示:

以數學表示式對上述資訊進行描述,可以用下式進行表示:

然而該方法對於大型資料集容易發生擬合,且過於複雜。

因此可以忽略一些點,進行一刀切,如下所示:

但是該方法容易導致錯分率高。

因此svm就是找一種方式正確的描述分類方程。

因此該超平面的公式可以用下式進行表示:

$$g(v)=wv+b$$

其中v是樣本向量,在二維空間v=(x,y),在三維空間v=(x,y,z)。w是引數向量,在二維空間w=(a,b),在三維空間w=(a,b,c)。

因此上述距離公式可以表示為:

$$d(v)=|g(v)|/\left \| w \right \|$$

svm目標是找到乙個超平面,使得其在兩個類中間分開。並使得該超平面到兩邊的距離最大,如下圖所示:

但是如果對於線性不可分的情況,如下圖所示:

此時上述方式無法確定超平面。在svm在則是通過公升維的方式解決。例如:

因此svm在一維空間上解決線性不可分割的問題是把函式對映到二維空間。同樣在n維空間的線性不可分割問題對映到n+1維空間。而這種對映分類函式,在svm用核函式(kernel)進行構造。

因此支援向量機具體演算法步驟為:

把所有的樣本和其標記交給演算法進行訓練

如果線性可分則直接找出超平面

如果線性不可分,進行對映找出超平面

得到超平面表示式,進行分類回歸

在sklearn支援向量機主要用svc類支援。svc所支援的和函式有linear(線性和函式)、rbf(徑向基核函式)、sigmoid(神經元啟用函式)等,通常推薦使用rbf函式。以客戶評價為例**如下:

from sklearn import svm

import numpy as np

#年齡x = np.array([[34, 33, 32, 31, 30, 30, 25, 23, 22, 18]])

x = x.t

#質量y = [1, 0, 1, 0, 1, 1, 0, 1, 0, 1]

clf = svm.svc(kernel='rbf').fit(x, y)

p = [[30]]

print(clf.predict(p)) #1

函式

其他引數改動可參考官網文件:

sklearn中的支援向量機SVM(上)

1 svm是最接近深度學習的機器學習演算法。線性svm可以看成是神經網路的單個神經元,非線性的svm可以看成兩層的神經網路,非線性svm中如果新增多個核函式,則可以模仿多層的神經網路。2 邊際很小時,模型容易在訓練集上表現很好,卻在測試集上表現糟糕,即容易 過擬合 擁有更大邊際的決策邊界在分類中的泛...

sklearn的機器學習之路 支援向量機(SVM)

什麼是svm 支援向量機就是使用一條直線 二維 或超平面 多維 將資料分成兩類,同時保證離超平面最近的點與超平面的間隔盡可能小。支援向量 離超平面最近的幾個訓練樣本,且滿足 間隔 margin 分類不同的支援向量之間的距離 對偶問題 在求解分類器時過於複雜,為了簡化問題,我們將目標函式和約束函式融入...

支援向量機中SVM演算法 sklearn庫的實現

直接上 了 import numpy as np from sklearn.svm import svc from sklearn.preprocessing import standardscaler from sklearn.model selection import train test s...