1. 程式人生 > >SVM原理推導以及SMO、Kernel的理解

SVM原理推導以及SMO、Kernel的理解

一、支援向量機(Support Vector Machines, SVM)

原理:找到離分隔超平面最近的點,確保它們離分隔平面的距離儘可能遠。

超平面(hyperplane):決策的邊界,通常表示為 w.T*x+b=0,至於為何可以表示為一個平面,思考二維情況:

                                        w.T*x+b=0 即為 w1x1+w2x2+b=0,也就是平面座標系中的直線。

間隔(margin):點到分隔平面的距離。

支援向量(Support Vector):離分隔超平面最近的那些點。

分類器:

hw,b(x) = g(w.T*x+b)

若z≥0, g(z) = 1

若z<0,g(z) = -1

兩種距離表示:函式距離(functional margins)&幾何距離(geometric margins)

1. 函式距離: γ(i) = y(i)*(w.T*x(i)+b),    y(i)∈{-1, 1} (點(x(i), y(i))的函式距離)

w.T*x+b>0時,y(i)=1,點離平面距離越遠,函式距離越大。

w.T*x+b<0時,y(i)=-1,距離仍是一個很大的正數。

所以無論點在平面的正負側,函式距離都是正數,且距離越遠,數值越大。

定義某訓練集的函式距離為 γ = min i=1,...,m γ(i)  ,即訓練集中所有點的函式距離的最小值作為該訓練集的函式距離。

2. 幾何距離:γ(i) = y(i)*((w/||w||).T*x(i) + b/||w||) (點(x(i), y(i))的幾何距離)

推導:


如圖,w為平面 w.T*x+b=0 的法向量(思考二維平面情況中,直線w1x1+w2x2+b=0的法向量為(w1, w2),同理三維或N維)。

對於點A(x(i), y(i))來說,線段AB即是點A到超平面的幾何間隔,記為γ(i)

所以B點的座標為:x(i) - γ(i)*w/||w||, w/||w||即為w向量方向上的單位向量。

又因為B點在超平面w.T*x+b=0上,所以滿足 w.T*(x(i) - γ(i)*w/||w||) + b = 0

可解得 γ(i) = (w/||w||).T*x(i)

 + b/||w||

再乘上y(i)保證符號,最後幾何間隔為: γ(i) = y(i)*((w/||w||).T*x(i) + b/||w||)

同樣,定義訓練集的幾何間隔為 γ = min i=1,...,m γ(i)  ,即訓練集中所有點的幾何距離的最小值作為該訓練集的幾何距離。

在SVM優化問題中,我們選用幾何間隔而不是函式間隔,因為任意縮放參數(w, b)時,例如變為(2w, 2b),hw,b(x)不改變,其只關心x的正負。但函式間隔改變,相當於×2,為使得函式具有任意縮放的性質,加入歸一化項,例如||w||,即使用幾何間隔。

回到SVM,根據目標:最大化支援向量到分隔面的距離,定義我們的原始優化問題為:

arg max w,b { min n (y(i)*(w.T*x(i)+b)) * 1/||w|| }

對乘積的優化很複雜,我們令所有支援向量的距離為1,即 y(i)*(w.T*x(i)+b) = 1,原始問題轉化為:

max w,b 1/||w||

s.t.  y(i)*(w.T*x(i)+b) ≥ 1 ,  i = 1,...,m

變換形式為:

min w,b 1/2||w||^2

s.t.  y(i)*(w.T*x(i)+b) ≥ 1 ,  i = 1,...,m

存在不等式約束的優化問題求解,我們使用拉格朗日數乘法,具體情況將在後面列出。

______________________________________________________________________________

二、對偶形式與KKT條件

該部分完全是為了求解SVM的優化問題做準備。

對於優化問題:

min f(x)

s.t. gi(x) ≤ 0,  i=1,...,k

構造拉格朗日函數:L(x, α)= f(x) + ∑αi*gi(x)

只有當αi ≥0 時,αi*gi(x) ≤ 0,所以 maxα L(x, α) = f(x)

∴ minx f(x) = minmaxα L(x, α)     (1)

∵ maxα minx L(x, α)= maxα [ minx f(x) + minx α*g(x) ] = maxα minx f(x) + maxα minx α*g(x) = minx f(x)  + maxα minx α*g(x)

∵ 當α=0或者g(x)=0時,minx α*g(x) = 0,否則 minx α*g(x) = -∞

∴ maxαminx α*g(x) = 0, 此時α=0或者g(x)=0

∴ maxα minx L(x, α)= minx f(x)     (2)

連線(1)和(2):

minmaxα L(x, α) = maxα minx L(x, α)

稱左邊為原問題,右邊為原問題的對偶形式,即當滿足一定條件時,原問題的解與對偶問題的解相同,在最優解x*處,α=0或者g(x*)=0

所以KKT(Karush-Kuhn-Tucker)條件為:

(1) 拉格朗日函式對各引數求導=0

(2) α≥ 0

(3) αi*gi(x*) = 0

(4) gi(x*) ≤ 0   (原始約束條件)

KKT的含義其實是一組解成為最優解的必要條件。

——————————————————————————————————————————

三、求解SVM

回到SVM中,我們的優化問題為:

min w,b 1/2||w||^2

s.t.  y(i)*(w.T*x(i)+b) ≥ 1 ,  i = 1,...,m

構造拉格朗日函式:

L(w, b, α) = 1/2||w||^2 - ∑ αi*(y(i)*(w.T*x(i)+b)-1)

注意此處為了符合拉格朗日約束條件的形式,將原始約束條件轉化為≤。

即原始問題等於 minw,b maxα L(w, b, α),由於滿足KKT條件,其對偶形式為maxα minw,b L(w, b, α)。

所以先根據拉格朗日函式對w,b分別求導,令導數等於0,得到:

w = ∑ αy(i) x(i)

∑ αy(i) = 0

將這兩個結果重新代入拉格朗日函式中,得到:

L(w, b, α) = ∑ αi - 1/2∑y(i)y(j)αiαj(x(i)).T*x(j)

即我們的優化問題變為:

maxα W(α) = ∑αi- 1/2∑y(i)y(j)αiαj(x(i)).T*x(j)

s.t. αi ≥ 0, i = 1,..., m

      ∑ αy(i) = 0

這也是我們最終需要求解的問題,求出α後,可以得到w和b,以及分隔超平面 w.T*x+b=0。

該問題求解方法很多,通常使用SMO。

_____________________________________________________________________________

四、Kernel

對於有些問題,我們不希望直接使用原始輸入屬性(input attributes),例如輸入向量x為房屋區域長寬高之類,而我們通常使用面積、體積(?)來描述一個房子,使用x的平方或者立方來作為學習演算法的輸入。這些新獲得的輸入即特徵(features)。

我們用φ(x)來表示特徵對映,從原始輸入屬性到特徵的對映。如上面的問題可以表示為:


在SVM中,我們最終要求的問題是:


(word公式編輯器真是好用)

其中最後面這個可以換成φ(x),即將原始屬性換種形式。

定義Kernel為:


我們將替換所有<x, z>為K(x, z),將低維空間X對映到高維空間Z,使資料線性可分。

但通常Kernel計算開銷非常大,甚至φ(x)如果是個高維向量,其本身開銷也很大。(矩陣乘法時間複雜度為O(n^3),橫向遍歷n^2,縱向遍歷n,當然有好的演算法可以降低到O(n^2.37);對於向量,橫向遍歷N*1,縱向遍歷N,時間複雜度為O(n^2))

我們可以直接用X空間表示Kernel,而不需要通過轉換為Z空間(花費O(n^2))再計算內積。

例如:多項式Kernel:


可以寫為:


只需花費O(n)的時間來直接計算Kernel,(第一行,兩個括號中的公式可以同時運算,所以是O(n)),也就不需要顯示錶示出高維的φ(x)了。

相關Kernel也同理。

這就是kernel trick,即利用X空間的核函式計算,得到經過特徵轉換到Z空間的向量內積結果,即通過低維運算,得到高維轉換後的結果。

另外,我們知道,兩個垂直向量的內積為0,如果φ(x)和φ(z)距離較近,則核函式較大,反之如果較遠,或者說接近垂直,則核函式較小。所以核函式可以用來評估φ(x)和φ(z)的相似度,或者x與z的相似度。(比如高斯核函式,在0,1之間)

如何判斷某個函式是否為有效的Kernel?

首先定義Kernel matrix:

如果K是一個有效的Kernel,則有:

即矩陣K為對稱的。

另外可以推斷

K是有效的核的充分必要條件是,矩陣K是對稱半正定矩陣

五、正則化

在前面我們假設了資料集或者在低維或者在高維,資料線性可分,但通常會有一些異常值(outlier)使得分類器整個改變。如圖:


此類噪聲的影響,我們加入正則化,原始問題變為:


對於一些距離分類邊界1-ξ的樣本,我們增加了Cξ,確保了最小邊距為1。

然後構造拉格朗日函式:


得到最終對偶問題:


同時KKT條件有所改變:


正則化後的KKT條件推導:

上面的拉格朗日函式,分別對w和b求導,令導數=0。可以看到,對w求導,與正則化之前不變,仍得到

而對b求導則得到:

     這是一個很重要的結論。

同未正則化時的KKT推導一樣,


要想max L(w, b, ...) = f(x),則需要後面兩項(不包括符號)最值為0,即≥0。此時:


要想對偶形式也等於minf(x),則需要後兩項均為0。

 即以及,至於為什麼沒有求和符號,因為拉格朗日引數αi≥0,ri≥0,且ξi≥0,所以若想二者乘積和為0,則需要每個乘積都為0。

我們現在的條件有:


KKT為:


1. 當αi=0時,ri=C,則ξi=0,所以:


2. 同理,αi=C是,ri=0,自動滿足第三個條件;因為ξi≥0,所以

3. 當0<αi<C,ri≠0,ξi=0,因為所以


——————————————————————————————————————

六、SMO(sequential minimal optimization)

上文提到,求解最後對偶優化問題通常用SMO演算法。

我們先來看看座標上升法,即Coordinate ascent。

思考一個無約束優化問題:

座標上升演算法為:


在內迴圈中,每次固定除αi意外的變數,並將αi更改為函式取極值時的值。直到演算法收斂。

下圖是演算法迭代示意圖,每次更新都沿著座標軸方向,因為一次改變一個變數。


回到SMO,我們要解決的問題是:


如果我們使用座標上升法,一次改變一個αi,則將不滿足第二個約束條件。所以在SMO中,我們一次改變兩個α,演算法如下:


由於α有約束條件[0, C],並且需要滿足在直線上,所以α取值範圍為[L, H]


最後α的更新應為:


相關推薦

SVM原理推導以及SMOKernel理解

一、支援向量機(Support Vector Machines, SVM)原理:找到離分隔超平面最近的點,確保它們離分隔平面的距離儘可能遠。超平面(hyperplane):決策的邊界,通常表示為 w.T*x+b=0,至於為何可以表示為一個平面,思考二維情況:         

HTTPS原理以及加密解密的原理

www 實的 對稱加密 tls 最重要的 進行 des 加密、解密 等等 摘要:本文用圖文的形式一步步還原HTTPS的設計過程,進而深入了解原理。 A在向B進行通信時,如果是以明文的方式進行通信,中

SVM中的對偶問題KKT條件以及對拉格朗日乘子求值得SMO演算法

考慮以下優化問題              目標函式是f(w),下面是等式約束。通常解法是引入拉格朗日運算元,這裡使用來表示運算元,得到拉格朗日公式為              L是等式約束的個數。     然後分別對w和求偏導,

SVM原理公式推導libsvm原始碼分析

恰好翻到了以前記的cs229的筆記, 其實也想了好久要不要跟風去推導公式, 寫寫就當是複習一下了 說到svm, 按套路就要先說說線性分類器, 如圖, 在特徵維數為2時, 可以用一條線將正負樣本分離開

對InodeHard Link以及Soft Link的理解

第一個 nbsp 圖1 lock image pla files 地址 logs 一、EXT2/EXT3等文件系統的分區格式   Linux的文件系統從EXT2開始將文件的屬性和文件的實際內容分開存儲,文件的屬性由inode存儲,文件的內容由block存儲。   系統在對磁

【轉載】hashCode()equals()以及compareTo()方法的理解

進行 一個 terms 兩個 定義 == bject str rac 判斷兩個對象是否相等(是同一個對象),首先調用hashCode()方法得到各自的hashcode, 1、如果hashcode不相等,則表明兩個對象不相等。 2、如果hashcode相等,繼續調用equal

svm原理以及利用現成庫實現

blog tps 就是 print ear 原理 允許 ins tails SVM 1 由來利用一根直線或者一個超平面把數據按照某種規則區分開來 2 最大間隔分類器上面我們推導出了間隔的表達式,自然的,我們想讓數據點離超平面越遠越好: 3 核函數在前面的討論中,我們假設數據

svm原理詳細推導

筆者在查閱了大量資料和閱讀大佬的講解之後,終於對svm有了比較深一點的認識,先將理解的推導過程分享如下: 本文主要從如下五個方面進行介紹:基本推導,鬆弛因子,核函式,SMO演算法,小結五個方面以%%為分隔,同時有些地方需要解釋或者注意一下即在畫有---------符號的部分內。 本文主要介紹

Syschronized的底層實現原理以及各種鎖的理解

      java中每個物件都可作為鎖,鎖有四種級別,按照量級從輕到重分為:無鎖、偏向鎖、輕量級鎖、重量級鎖。每個物件一開始都是無鎖的,隨著執行緒間爭奪鎖,越激烈,鎖的級別越高,並且鎖只能升級不能降級。 java物件頭  鎖的實現機制與java物件頭息息相關,鎖的所有資

徑向基-薄板樣條插值數學公式原理以及程式碼實現基本過程

徑向基插值部分 徑向基函式RBF (Radial Basis Function)有以下五種基函式 其中r代表代待求點X與已知點Xi之間的向量距離 上邊的公式是適用於以上五種基函式的計算公式,其中X代表向量,不是一個數字 對於薄板樣條插值,其公式(是經過上邊

機器學習筆記之十二——SVM原理推導

svm(support vector machine)是一種二分類演算法,它的目標在於尋找一個能將兩種點分離的直線或平面或超平面。 如圖(來自wiki): 圖中的紅線將兩邊資料點分開,這條線就是分割直線,同樣的,在三維座標軸中,將兩邊資料點分開的平面,稱為分割平面;更高維的空間座標軸,

SVM推導特點優缺點多分類問題及應用

SVM有如下主要幾個特點: (1)  非線性對映是SVM方法的理論基礎,SVM利用內積核函式代替向高維空間的非線性對映; (2)  對特徵空間劃分的最優超平面是SVM的目標,最大化分類邊際的思想是SVM方法的核心; (3)  支援向量是SVM的訓練結果,在SVM分類決策

SVM原理以及Tensorflow 實現SVM分類(附程式碼)

1.1. SVM介紹 SVM(Support Vector Machines)——支援向量機是在所有知名的資料探勘演算法中最健壯,最準確的方法之一,它屬於二分類演算法,可以支援線性和非線性的分類。發展到今天,SVM已經可以支援多分類了,但在這一章裡,我們著重講支援向量機在二分類問題中的工作原理。 假設

django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)不使用許可權框架的原始授權方式詳解

知識清單 1.瞭解基於資源的許可權管理方式 2. 掌握許可權資料模型 3. 掌握基於url的許可權管理(不使用許可權框架的情況下實現許可權管理) 許可權管理原理知識 什麼是許可權管理 只要有使用者參與的系統一般都要有許可權管理,許可權管理實現對使用者訪問系統的控制。按照安全規則或安全策略

【 專欄 】- Dubbo開發實踐以及原始碼原理分析

Dubbo開發實踐以及原始碼、原理分析 本專欄主要是為了對分散式框架Dubbo感興趣或者有開發需要的同學,基於Dubbo開發實踐以及原始碼、原理分析等幾個維度對Dubbo進行由淺入深的介紹,以便更好跟朋友們共享有關Dubbo的點滴

H264編碼原理以及IPB幀詳解

    reference:http://www.cnblogs.com/cy568searchx/p/6125031.html     H264是新一代的編碼標準,以高壓縮高質量和支援多種網路的流媒體傳輸著稱,在編碼方面,我理解的他的理論依據是:參照一段時間內影象的統計結

同步非同步阻塞非阻塞,以及IO模型的理解

同步和非同步 同步 就是你知道你什麼時候在做什麼,做完一件事情再做下一件事情,因此主動權在自己手裡。比如通過等待或輪詢,你在某個時間點總是知道結果是怎樣的(有資料還是沒資料等)。 非同步 就是你不知道什麼時候會發生什麼。比如你註冊了多個回撥函式,你不知道什

【機器學習】支援向量機SVM原理推導

參考:http://blog.csdn.net/ajianyingxiaoqinghan/article/details/72897399 部分圖片來自於上面部落格。 0 由來 在二分類問題中,我們可以計算資料代入模型後得到的結果,如果這個結果有明顯的區別,

3519V101的kernel的RTL8201百兆網絡卡配置以及tftpnfs

hisi3519預設是千M口, rgmii模式,而我的板子是百兆口,所有要修改成rmii模式的網口) 一、修改配置檔案hi3519v101.h(我這裡的板子是nand,所以這裡修改的hi3519v101_nand.h) 修改原因:在\u-boot-2010.06\drivers\net

自定義View(一)---View的基礎概念工作流程以及生命週期的理解

不詩意的女程式猿不是好廚師~ 序:最近在工作中使用到了各種自定義控制元件,也更深刻的理解了自定義控制元件的重要性,所以就建了一個專欄來專門整理自定義控制元件的相關知識。我打算先從理論知識說起,然後再把專案中使用的自定義控制元件整理後寫為部落格發表,並