svm支援向量機(英文全稱:support vector machine)是乙個分類演算法, 通過找到乙個分類平面, 將資料分隔在平面兩側, 從而達到分類的目的。
如下圖所示, 直線表示的是訓練出的乙個分類平面, 將資料有效的分隔開。
svm的分類基本思路是找到乙個分類平面, 下面重點**下如何找到這個平面。 先梳理下svm求解的基本思路;
如圖svm的推導分為5個步驟:
1、用數學來定義要求解的問題
svm是求解乙個平面s:y = wx + b, 其實就是求解引數w, b。如何來求解w, b呢? 怎麼判斷訓練的w, b構成的平面已經足夠好呢? 這就需要把問題建模成乙個數學問題(稱為原始問題),從而明確求解的目標以及約束條件。
2、求解原始問題轉換為二次凸函式+約束條件的優化問題
原始問題很難求解出引數, 轉換為二次凸函式+約束條件的優化問題, 這種轉換保證兩個函式取最優解時,引數是相同的。做這種轉換的主要原因是二次凸函式和約束條件有成熟的計算方法和理論支撐(拉格朗日優化理論)。
3、拉格朗日優化+對偶特性構建方程
將w, b引數優化轉換為對引數alpha的優化(alpah為拉格朗日約束函式的引數)
4、smo求解alpha最優值
通過上步構建的方程, w, b可以通過alpha來表示。 smo可以求解出alpha, 再通過alpha求出w,b。 到此平面的方程就可推導出來。
svm是要找到最合適的分類平面, 那麼怎麼才算最合適的? 最直接的評估標準:被分隔的兩邊資料距離平面間隔最大, 換句話,svm就是獲取最大間隔的超平面。下面介紹兩個衡量樣本到超平面間隔的定義。
1、函式間隔
在超平面w * x + b = 0確定的情況下,|wx+b|表示點距離超平面的距離,而超平面作為二分類器,如果wx+b>0, 判斷類別y為1, 否則判定為-1。從而引出函式間隔的定義:
其中y是訓練資料的類標記值, 如果y(w^t * x + b) >0說明,**的值和標記的值相同, 分類正確,而且值越大,說明點離平面越遠,分類的可靠程度更高。這是對單個樣本的函式定義, 對整個樣本集來說,要找到所有樣本中間隔值最小的作為整個集合的函式間隔:
即w和b同時縮小或放大m倍後,超平面並沒有變化,但是函式間隔跟著w和b變化。所以,需要加入約束條件使得函式間隔固定, 也就是下面介紹的幾何間隔。
2、幾何間隔
根據點到平面的距離公式和w*x+b=0平面公式, 推導得到幾何間隔定義:
和函式間隔類似, 為得到r的絕對值, 我們定義幾何間隔:在上述公式中乘以y值, 同時也得到與函式間隔的關係:幾何間隔就是函式間隔除以w的正規化。
為方便推導和優化, 令函式間隔等於1得到最大間隔分類器的原始定義:
最大間隔分類器就是我們求取的分類超平面, 等於max(幾何間隔), 而函式間隔假設為1,就可得到最大間隔超平面: max(1/||w||), 而約束條件是因為函式間隔是所有樣本點的間隔函式中最小值。
最大間隔分類器的求解, 可以轉換為上面的乙個最優化問題, 即在滿足約束條件:
求出就最大的1/||w||。
為更好的利用現有的理論和計算方法, 可以將求解1/||w||最大值, 轉換為乙個二次凸函式優化問題:求解 min(1/2 * (||w||)^2 ), 兩者問題是等價的。原來的問題轉換為二次凸函式優化問題:
在對二次凸函式進行優化前,先討論下對偶性問題。 如下圖所示, 假設乙個函式f(x,y) = f(x, y) + a * (g(x, y) - c), 橢圓線是f(x, y)在平面上的等高線, 綠色是g(x, y)=c的軌跡。
從圖上可以看出, f(x, y)的極值點肯定是f(x,y)和g(x,y)-c相切的點, 這點上兩個曲線的法向量平行。從而可以得到如下結論:
類似的,可以將1/2 * ||w|| ^2優化函式和約束條件結合起來, 構建乙個函式:
其中ai是拉格朗日乘子。
利用對偶性的結論, 對l(w,b,a)關於w和b求偏導數:
將上面兩個等式,代入l(w, b, a)函式,最終最大間隔分類器優化檔案, 就轉換成如下定義(過程太過複雜,直接看下結論就可以), 注意這個公式中只涉及求解ai的極大值, 不涉及w, b引數的求解, 因為w, b都可以用ai來表示, 求出ai後, 自然就求出了w,b的值。
上面推導的公式, 是通過smo演算法來求解的。最常見的是platt smo演算法 , 這個演算法是在2023年john platt 發布的。smo演算法(sequential minimal optimization)全稱是最小序列優化。smo的基本思路類似動態規劃, 也是一種啟發式演算法,它將原優化問題分解為多個小優化問題來求解,並且對這些小優化問題進行順序求解得到的結果作為作為整體的結果。
因為svm的原理太複雜,只好呼叫sk-learn進行實現。下面是利用svm二分類。
import numpy as np
from sklearn.svm import svc
x = np.array([[
-1,-
1],[
-2,-
1],[
1,1]
,[2,
1]])
y = np.array([1
,1,2
,2])
clf = svc(
)clf.fit(x, y)
svc(c=
1.0, cache_size=
200, class_weight=
none
, coef0=
0.0,
decision_function_shape=
'ovr'
, degree=
3, gamma=
'auto'
, kernel=
'rbf'
, max_iter=-1
, probability=
false
, random_state=
none
, shrinking=
true
, tol=
0.001
, verbose=
false
)print
(clf.predict([[
-0.8,-
1]])
)
支援向量機(SVM)
簡介 術語 支援向量機 svm 是乙個類分類器,正式的定義是乙個能夠將不同類樣本在樣本空間分隔的超平面。換句話說,給定一些標記 label 好的訓練樣本 監督式學習 svm演算法輸出乙個最優化的分隔超平面。首先我們假定有乙個未知的欲分類的集合,可以進行分割,但是我們不知道分割的函式 超平面,也叫真實...
支援向量機SVM
支援向量機svm support vector machine 是機器學習領域的乙個有監督的學習模型。一 簡介 支援向量機建立在統計學習理論的基礎之上。統計學習理論 statistical learning theory簡稱slt 是一種處理小樣本的統計理論 為研究有限樣本情況下的統計模式識別和更廣...
SVM支援向量機
在機器學習領域,很多時候會用到分類的一些演算法,例如knn,貝葉斯。我們可以把分類的樣本簡單除暴的分為兩種型別。線性可分和非線性可分。可以使用乙個非常簡單的例子來解釋什麼是線性可分,什麼是線性不可分。a 線性可分的2類樣本 b 非線性可分的2類樣 已知乙個線性可分的資料集,其中x表示乙個n維向量,當...