機器學習程式碼實現 SVM (5)
一.什麼是支援向量機
1、支援向量機(Support Vector Machine,常簡稱為SVM)是一種 監督式學習
的方法,可廣泛地應用於統計分類以及迴歸分析。支援向量機屬於一般化線性分類器
,這族分類器的特點是他們能夠同時最小化經驗誤差與最大化幾何邊緣區,因此支援向量機也被稱為最大邊緣區分類器
。
2、支援向量機將向量對映到一個更高維的空間裡,在這個空間裡建立有一個最大間隔超平面
。在分開資料的超平面的兩邊建有兩個互相平行的超平面,分隔超平面使兩個平行超平面的距離最大化。假定平行超平面間的距離或差距越大,分類器的總誤差越小。
3、假設給定一些分屬於兩類的2維點,這些點可以通過直線分割, 我們要找到一條最優的分割線,如何來界定一個超平面是不是最優的呢?
二、求解過程
最優超平面可以有無數種表達方式,即通過任意的縮放 w 和 b 。 習慣上我們使用以下方式來表達最優超平面。
我們令兩類的點分別為+1, -1,所以當有一個新的點x需要預測屬於哪個分類的時候,我們用
sgn(f(x))
,就可以預測了,sgn表示符號函式,當f(x) > 0的時候,sgn(f(x)) = +1
, 當f(x) < 0的時候sgn(f(x)) = –1
。
通過幾何學的知識,我們知道點 x
到超平面 的距離為:
對於超平面, 表示式中的分子為1,
然後得到目標函式
這是一個拉格朗日優化問題,可以通過拉格朗日乘數法得到最優超平面的權重向量W
和偏置b
三、拉格朗日對偶
如何確定w和b呢?
答案是尋找兩條邊界端或極端劃分直線中間的最大間隔(之所以要尋最大間隔是為了能更好的劃分不同類的點,下文你將看到:為尋最大間隔,匯出1/2||w||^2,繼而引入拉格朗日函式和對偶變數a,化為對單一因數對偶變數a的求解),從而確定最終的最大間隔分類超平面hyper plane和分類函式;
拉格朗日對偶的原理
上述式子有兩個條件(等式條件和不等式條件)由此我們定義一般化的拉格朗日公式
由此我們定義一般化的拉格朗日公式
這裡的P代表primal。我們設如下約束條件(primal constraints):
如果條件不全部滿足的話,我們總可以調整
α
和β
使最大值出現正無窮,即會出現下面情況(這裡比較重要,說明了為什麼要求最大)
因此我們可以得出如下式子:
這樣我們原來要求的min f(w)可以轉換成求了
這個問題就是原問題的對偶問題,相對於原問題只是更換了min和max的順序,而一般更換順序的結果是
Max Min(X) <= Min Max(X)
。然而在這裡兩者相等。由此我們可以設如下
四、最優間隔分類器求解(求解過程,上兩步是鋪墊)**
在之前為了尋找最有分類器,我們提出瞭如下優化問題
在這裡我們可以把約束條件改寫成如下:
很顯然我們可以看出實線是最大間隔超平面,假設×號的是正例,圓圈的是負例。在虛線上的點和在實線上面的兩個一共這三個點稱作支援向量。現在我們結合KKT條件分析下這個圖。
這個也就說明[圖片上傳中個
gi(w)
時,w處於可行域的邊界上,這時才是起作用的約束。
1、那我們現在可以構造拉格朗日函式如下:
2、接下來我們對w和b分別求偏導數
3、將上式帶回到拉格朗日函式中得到:
4.優化等式
6.最終問題
五、核函式 ——高維空間對映,在低維時空裡解決
如下所示,無法線性標示進行分割,但是可以用二次函式簡單分割
對映到高維空間,可以很容易進行分割
在計算的時候,它可以讓x和z不用通過H()對映到高維空間再計算內積,而是直接在低維空間裡計算了。
我們用K()表示核函式,那麼核函式作用就是:K(x,z)=
避開了X對映到H(X),Y對映到H(Y)這麼一個過程
線性核:
高斯核:
通過調控引數σ,高斯核具有相當的靈活性
六、SMO演算法求解α
要解決的是在引數{α1, α2,...α3}
上求最大值W(α)
的問題,至於xi,yi
都是已知數。C
由我們預先設定,也是已知數。
按照座標上升的思路,我們首先固定除α1
以外的所有引數,然後在α2
上求極值。等一下,這個思路有問題,因為如果固定α1
以外的所有引數,那麼α2
將不再是變數(可以由其他值推出)
SMO的主要步驟如下:
- 1.選擇連個
α
, 如α1
、α2
,選取方法使用啟發式方法,固定其他引數 - 2.確定極值
W
,αi
由αj
表示
假設確定了α1
、α2
,則:
{α1, α2,...α3}
都是已知固定值,因此為了方便,可將等式右邊標記成實數值
當y(i),y(j)
異號時,也就是一個為1,一個為-1時,他們可以表示成一條直線,斜率為1。如下圖:
當y(i),y(j)
同號時
然後我們打算將α1
用α2
表示:
α2
滿足以下條件:
w
、b
求解公式
啟發式搜尋的方法和求b值的公式
[1] http://www.tuicool.com/articles/2aYryeV
[2] https://wizardforcel.gitbooks.io/dm-algo-top10/content/svm-1.html
相關文章
- 機器學習(四):通俗理解支援向量機SVM及程式碼實踐機器學習
- 機器學習實戰-SVM模型實現人臉識別機器學習模型
- 支援向量機(SVM)從原理到python程式碼實現Python
- opencv + SVM 程式碼OpenCV
- Python機器學習筆記:SVM(1)——SVM概述Python機器學習筆記
- 一文讀懂支援向量機SVM(附實現程式碼、公式)公式
- 機器學習:支援向量機(SVM)機器學習
- 機器學習——支援向量機(SVM)機器學習
- Python機器學習筆記:SVM(3)——證明SVMPython機器學習筆記
- 機器學習演算法筆記之5:支援向量機SVM機器學習演算法筆記
- 機器學習實戰-邊學邊讀python程式碼(5)機器學習Python
- Scikit-learn SVM 實現
- Python機器學習筆記:SVM(2)——SVM核函式Python機器學習筆記函式
- 機器學習——支援向量機SVM(一)機器學習
- 【機器學習】--xgboost初始之程式碼實現分類機器學習
- 程式碼實現(機器學習識別手寫數字)機器學習
- python中svm方法實現Python
- Svm演算法原理及實現演算法
- 【Python機器學習實戰】感知機和支援向量機學習筆記(三)之SVM的實現Python機器學習筆記
- 機器學習基礎篇:支援向量機(SVM)理論與實踐機器學習
- Python機器學習筆記——One Class SVMPython機器學習筆記
- 【機器學習】SVM核函式的計算機器學習函式
- Stanford機器學習課程筆記——SVM機器學習筆記
- 人工智慧-機器學習-支援向量機SVM人工智慧機器學習
- 學習SVM(一) SVM模型訓練與分類的OpenCV實現模型OpenCV
- 基於Sklearn機器學習程式碼實戰機器學習
- SVM大解密(附程式碼和公式)解密公式
- SVM實現多分類的三種方案
- 機器學習 | 深入SVM原理及模型推導(一)機器學習模型
- 機器學習基礎專題:支援向量機SVM機器學習
- [機器學習&資料探勘]SVM---核函式機器學習函式
- 【機器學習】求解邏輯迴歸引數(三種方法程式碼實現)機器學習邏輯迴歸
- Andrew Ng機器學習筆記+Weka相關演算法實現(四)SVM和原始對偶問題機器學習筆記演算法
- 程式碼質量第 5 層 - 只是實現了功能
- 支援向量機(SVM)和python實現(二)Python
- OpenCV筆記(3)實現支援向量機(SVM)OpenCV筆記
- Spark MLlib SVM 文字分類器實現Spark文字分類
- 【Svm機器學習篇】Opencv3.4.1與C++實現對分類問題的訓練與預測】機器學習OpenCVC++