機器學習---支持向量機(SVM)
非常久之前就學了SVM,總認為不就是找到中間那條線嘛,但有些地方模棱兩可,真正編程的時候又是一團漿糊。參數任意試驗,毫無章法。既然又又一次學到了這一章節,那就要把之前沒有搞懂的地方都整明確,嗯~
下面使用到的圖片來自上海交大楊旸老師的課件。網址例如以下:http://bcmi.sjtu.edu.cn/~yangyang/ml/
支持向量機就是一種分類方法。僅僅是起的這個名字,看起來非常復雜而已。
中間一條線:分類用的,須要求出系數W , b
支持向量:線性超平面上的點,能夠理解為兩邊的線上的點
要求:中間那條線到兩邊的線的距離相等。
支持向量(能夠想象成那兩條線上每條線上的點)的個數<= m +1,m為特征 x 的維數。
目的:找的中間那條線的參數 w 和 b 。
線性SVM
這個圖我看了非常久。一直沒有搞懂 y 在哪裏,依據公式明明就直接求出全部的 x 了啊。難道 y = a ?y = a - b ?
事實上 y 在這裏不是坐標軸啦。是分類0,1,2,...,1,-1之類的,坐標軸上全都是 x1,x2,x3,....這種啦
搞清楚這個概念,接下來就非常好理解了:
兩條線之間的距離就直接拿 wx1 + b = a 和 wx2 + b = -a 相減就好啦(x1是上邊直線上的點。x2是下邊直線上的點),至於為神馬這樣 2r 就剛好是垂直距離,非常easy,兩個點坐標相減就是兩點之間的向量,膜就是距離。找兩個連線與分類直線垂直的點就OK拉。真正用公式推導是這種:
w(x1-x2)=2a
||w|| ||x1-x2|| cos<w, x1-x2> = 2a
||x1-x2|| cos<w, x1-x2> = 2a/||w||
公式左邊就是距離啦。
證明的第一問也好理解了,這裏的在線上指的是 x1 和 x2 都在 wx + b =0 這條線上,相減剛好就是<w, x1- x2> = 0
解釋一下:
理想情況下,全部正樣本(y=1)都在 wx + b = a 這條線的上邊。全部負樣本(y=-1)都在 wx + b = -a 這條線的下邊,可是兩個公式太麻煩啦。那就把 y 當作正負號乘到前邊好啦。剛好把上下兩條直線公式改編合成這樣: (wx + b)y = a ,這種點是在線上的,可是我們要求正負樣本在兩側就好啦,所以改 = 為 >=
max 那句就是說只滿足下邊的公式還不夠,我們須要的是兩條線中間的距離最大
總之:就是對於隨意的點 j 求使得兩條線的距離最大的 w 和 b
總是帶著 a 不太方便。所以我們把等式兩邊都除以 a ,就有了新的 w 和 b,無所謂啦,反正都是符號。所以就沒改啦。
因為a都變成1了。所以最大化 2a / || w || 倒過來就成了 || w || / 2,也就能夠簡化為求 w . w = || w || 的最小值了~
非線性SVM
一切看起來進展非常順利,然而!真實的數據非常有可能出現一些不太友好的點哦。
於是,我們就須要容忍這些錯誤~
c:tradeoff parameter 事實上就是一個系數
#mistake:錯誤數。對於每個錯誤的點都為1,正確點都取0,最後加到一起(公式為了讓總錯誤最小)
c和#mistake都是變量,能夠合在一起成為一個的。但不便於理解
#mistake是算出來的,系數C是依據交叉驗證得到的——(交叉驗證。。不大懂,之後再說咯)
上邊這個公式有個缺點:對於不在分類線外側的全都定義為錯的(也就是非黑即白,0/1 loss)。沒有考慮偏離大小的問題
公式把#mistake改成這樣,就相當於對於每個錯誤的樣本都算出其相應的偏離量。這樣放在公式裏就是全部偏離量加起來最小。
偏離量是算出來的,系數C是依據交叉驗證得到的——(交叉驗證。。不大懂,之後再說咯)
規範化損失變量
直接套公式吧。
。
hinge loss 我想多解釋一下。由於這個樣本在它應在的範圍(如 >=1 )。那麽它事實上是沒有損失的,也就是全為0就好,所以也許這個損失函數蠻符合SVM的特點~
多分類問題
方法一:
如上圖所看到的——每次把一個類別拿出來,其它類別合成一個大類。當作二分類問題來做。
反復n次就OK
缺點:分類的那條線會偏向訓練數據量比較小的那一類
方法二:同一時候求
解釋一下公式:
左邊是分類在 j 的一個點 xj 乘以它自己的系數,須要滿足 w(yj) . xj + b(yj) > = 1
參考方法一,假設這個點用在其它的分類公式中的時候,須要滿足 w(y‘) . xj + b(y’) < = 1
所以兩個公式放在一起就是: w(yj) . xj + b(yj) > = 1 > = w(y‘) . xj + b(y‘)
至於非要加上的那個1~~我也不知道為神馬,莫非是為了和之前的公式看起來差點兒相同?0.0
加上松弛變量和損失變量就變成了這樣:
約束優化(Constrained Optimized)
劇透下:下面主要介紹了一種用於解上邊那個有關SVM的優化問題方法~(沒學過最優化傷不起。得補啊)
首先舉個有關求最小值的樣例
上圖樣例說明,b 取不同的值的時候我們得到的最小值是不一樣的
第一個圖沒有約束,第二個圖約束沒有起到作用,第三個圖約束起作用啦
上圖說的是拉格朗日對偶:
首先給定初始問題,求滿足<= 和 = 那兩個條件(這是概括講的,全部的約束條件都能夠轉換為這兩種形式)。而且 f(w) 取最小值的時候 w 的值
當中 Alpha 和 Beta 是拉格朗日乘數(就是起了個名)
Lemma(引理):
這時候把這些式子加起來。最大也就是 f(w) 了。由於 g h要麽小於等於0,要麽等於0,而且要求 Alpha(i) > 0。 所以他們總的和 L 不會比 f(w) 再大了~
o/w是otherwise的意思,此時 max L 取值為無窮的解釋例如以下:
假設有一個樣本不符合限制條件g-i(w) = 0,即存在一個g-i(w) > 0,那麽max L(w, alpha, beta) —>無窮。
由於Alpha-i為隨意參數。Alpha-i > 0, g-i(w) > 0,當Alpha-i 趨向於無窮的時候。max Alpha-i g-i(w)也趨向於無窮,所以此時的 max L 趨向於無窮~
事實上大括號後邊第一行,我們另一個條件也能夠合進來。這個條件就是滿足 min(w) f(w)。也就是讓 L 的最大值 f(w) 最小然後求 w 嘛,就在前邊加個min,就是最後一個式子啦
這就是又寫了一遍引理,第二個是它的對偶問題,弱對偶和強對偶能夠看下圖理解下:
就是先求最大再求最小。和先求最小再求最大能不能對上,有沒有交點的問題。沒有就是弱對偶,有就是強對偶
依據上圖我們就能夠看出來,事實上找到最優值就是找鞍點(最大or最小,看起來像馬鞍的形狀,所以那個點就叫鞍點)的過程。
求鞍點。就是求各種一階導為0,第三個式子是由於之前說了 g 代表 <= 0 那一堆公式,那麽取得鞍點的時候,它必須取極值點 = 0,最後兩個公式是之前就規定好的~
這五個式子就是KKT條件,假設 w , Alpha , Beta 滿足KKT條件,那麽它們就是那個引理和它對偶問題的一個解
講了這麽一堆。最終把解法講好了。然後就要用到我們的SVM上了
經過上邊一堆推導,我們最終把 w 和 b 去掉(用x y Alpha 表示)了。僅僅剩下 Alpha 是未知的了~。
於是這就轉變為了二次規劃問題(這樣就非常好解麽?木有學過最優化啊。不知道這是神馬啊)
到眼下,你僅僅須要知道 w 被那個求和 替代了,SVM有個核是 x‘x 就好
依據KKT條件,有一部分 Alpha 不為0,看圖,支持向量就是 Alpha 不為 0 的點
依據我們已知的能夠算出來的 w 。依據分類的那條線 wx + b = 0,就能夠求出 b, 然後我們就能夠測試新數據 z 啦
最優的 w 能夠看作是一部分點的一個線性組合,這個稀疏表達能夠看作是KNN分類器結構中的數據壓縮(沒懂,重要麽?)
為了計算 Alpha ,我們僅僅須要知道核(kernel,即x‘x)就好啦
測試的時候使用下邊的式子(sign表示取符號,可能這個式子在模擬二分類問題,所以僅僅要符號即可了):
下邊解釋一下核(kernel)的作用
就是把 x 多加一個維度(or 沒有添加維度 or 降維),使得原本非線性的問題成為線性的。
在之前的問題中。我們提到過。我們僅僅須要提供x‘x就能夠了,所以這裏把 x‘x 替換一下。就是帶進公式之前先行處理一下,也就是加了那個核運算,那麽我們可能會得到更好的結果哦
下邊這是幾個核的樣例:
關於選神馬核比較好,編程的時候大膽試吧。。。
我本以為公式已經全了呢額。直到我看到了下邊的修改,又對Alpha 加了個最大值C的約束,其它沒變~
SMO算法
首先我們來了解一下神馬是坐標上升(Coordinate Ascent)
一個無約束優化問題例如以下:
能夠使用坐標上升算法來解
這個和梯度下降非常像, 梯度下降是選下降最快的方向。可是坐標上升每次僅僅改變一個維度(變量),而其它維度(變量)不變,例如以下圖:
可是當我們遇到了SVM這樣的有約束的問題,它的不同之處在於有一個等式(即第三個等式:求和 Alpha . y =0)。因此我們須要定義兩個變量。Alpha(i)和Alpha(j)同一時候變,可是Alpha(i)能夠用Alpha(j)表示出來,事實上還是能夠理解為一個變量哦~~
這時候坐標上升就轉換為了SMO算法啦!
下邊是解SVM那個式子的SMO算法的核心思想:
後邊的課件是證明SMO收斂,數學問題就就不講了哈。主要就是滿足KKT條件吧~~
編程的話,libsvm不錯,好像前邊的博文有講到使用方法哦~
假設博文中有不論什麽問題,歡迎隨時與我聯系修正~在此感謝李凡師兄。邵誌文同學,朱能軍同學對本文存疑的解答^.^
機器學習---支持向量機(SVM)