支持向量機(jī)(Support Vector Machine)08

First

由于博客公式的限制我還沒有找到在合適的簡書內(nèi)給公式編號的方案,大家可以在我個(gè)人的博客中看帶公式編號的這篇文章,點(diǎn)這里。SVM算法大概是,學(xué)到現(xiàn)在最難的算法了,牽扯了拉格朗日的細(xì)節(jié)問題,這些問題在學(xué)高數(shù)做題的時(shí)候都沒有深入思考過。

SVM的優(yōu)點(diǎn)和缺點(diǎn)

  • 優(yōu)點(diǎn):泛化錯(cuò)誤率低,計(jì)算開銷不大,結(jié)果易解釋
  • 缺點(diǎn):對參數(shù)調(diào)節(jié)和核函數(shù)的選擇敏感,原始分類器不加修改僅適用于處理二類問題。
  • 數(shù)據(jù)類型:數(shù)值型和標(biāo)稱型數(shù)據(jù)。

SVM算法原理

首先我們都知道,為了劃分二維的數(shù)據(jù)需要一根線,劃分三維數(shù)據(jù)需要一個(gè)面。這里線是一維,面是二維,同理繼續(xù)推出對N維的數(shù)據(jù)需要使用N-1維的對象進(jìn)行分割,線性回歸和SVM本質(zhì)都是通過找這個(gè)超平面來達(dá)到分類的效果。

具體的來說SVM是在優(yōu)化線性回歸中的kx+b模型。在線性回歸中只需要考慮有一個(gè)分割超平面能進(jìn)行分類即可,而SVM則想找出所有能分類的分割超平面中最優(yōu)的超平面,即所有點(diǎn)都到分割超平面的距離最大,而支持向量指的就是離超平面最近的那些點(diǎn)。

超平面的公式為公式2.1。所以點(diǎn)A到分割超平面的距離為公式2.2。這里我們?yōu)榱朔奖阌?jì)算引入類別標(biāo)簽為-1和+1。所以保證所有的最小間隔的點(diǎn)最大化的公式為公式2.3。
注1:-1和+1是為了保證預(yù)測正確的時(shí)候,y(x_i)*label_i都是一個(gè)很大的正值。
注2:arg\ max_{w,b}的含義是,得到w和b使得后面式子取最大值
y(x) = w^TX+b

\frac{|w^TX+b|}{||w||}

arg\ max_{w,b}\{min_i(label_i*(w^Tx_i+b)*\frac{1}{||w||})\}

顯然我們不能直接求解上面的式子。需要化簡下它。由于公式2.1在正確預(yù)測時(shí),同label的乘積大于1。所以我們可以拆分公式2.3為公式2.4,約束條件為公式2.5。
注:這里的約束條件公式2.5中,要對每一個(gè)式子前都要加系數(shù),即拉格朗日數(shù)乘子\alpha_i
arg\ min_{w,b}\ ||w||
st.\ \ label_i*(w^Tx_i+b) \geq 1
對為了方便求導(dǎo)計(jì)算在公式2.4前加上\frac{1}{2}這個(gè)系數(shù)。之后使用拉格朗日乘子法得到公式2.6,并進(jìn)行計(jì)算。根據(jù)KKT條件中的偏導(dǎo)數(shù)等于0得到公式2.7和公式2.8。
祝:這里需要注意的是拉格朗日數(shù)乘子的正負(fù)號,這個(gè)同不等式的符號有關(guān)

L(w,b,\alpha)= \frac{1}{2}||w||^2-\sum_{i=1}^n\alpha_i*[label_i*(w^Tx_i+b)-1]
\sum_{i=1}^{n}\alpha_i label_i x_i = w
\sum_{i=1}^{n}\alpha_i label_i = 0
將公式2.7,公式2.8代入公式2.6化簡,再根據(jù)對偶問題得到最終公式2.9,根據(jù)KKT,其約束條件為公式2.10。
注1:KKT條件在SMO算法中統(tǒng)一進(jìn)行講解。
注2:b是由公式2.8消掉的。
注3:在拉格朗日乘子法應(yīng)用在這里,我們可以把||w||,寫作max_\alpha\ L(w,b,\alpha),所以原式可以寫作min_{w,b}\ max_\alpha\ L(w,b,\alpha),根據(jù)對偶問題,就可以變成max_\alpha\ min_{w,b}\ L(w,b,\alpha),這也是能把公式2.7和公式2.8代入公式2.6的原因,也是公式2.9種是max_\alpha的原因。具體證明在KKT中的附上的博客中。
max_\alpha\ \sum_{i=1}^{n}\alpha_i - \frac{1}{2}\sum_{i,j=1}^{m}label_i*label_j*a_i*a_j\langle x_i·x_j\rangle

\alpha_i \geq 0\ \ 且\ \sum_{i=1}^{m}\alpha_i*label_i = 0

注:這里\langle x_i·x_j\rangle是兩者向量積的運(yùn)算,是從x_i^T*x_j得到的。
這么看來我們算出了\alpha就能算出超平面,所以SVM的工作就是算出這些\alpha,而SMO算法就是求\alpha的典型算法。

對SVM引入線性不可分

由于數(shù)據(jù)都不那么干凈,所以我們不應(yīng)該假設(shè)數(shù)據(jù)能夠100%的線性可分。我們通過對判定的公式,公式2.5,引入松弛變量\xi_i\geq 0,得到其引入了松弛因子的形式,如下公式3.1。
y_i(w*x_i+b)\geq1-\xi_i
同時(shí)對于目標(biāo)函數(shù)公式2.4也需要調(diào)整,我們將\xi引入目標(biāo)函數(shù)并對其設(shè)置權(quán)值,得到公式3.2,也因此其約束條件變?yōu)楣?.1,公式3.2。
min_{w,b}\frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i
\begin{split} st.\ \ \ &y_i(w*x_i+b)\geq 1 - \xi_i\\ &\xi \geq 0 \end{split}
故拉格朗日函數(shù)L(w,b,\xi,\alpha,\mu)為如下公式3.3,其中\alpha\mu為拉格朗日數(shù)乘子。
L(w,b,\xi,\alpha,\mu)=\frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i-\sum_{i=1}^n\alpha_i*[label_i*(w^Tx_i+b)-1+\xi_i]-\sum_{i=1}^n\mu_i\xi_i
和之前的操作一樣,對其進(jìn)行求偏導(dǎo)操作后,類似的得到了相同的公式2.7,公式2.8,不同的是這里對\xi的求到后對\alpha有了限制,得到了公式3.4,由于\mu\geq0所以有\alpha_i的取值范圍0 \leq \alpha_i \leq C
注:注意這里的\alpha取值,之后SMO會(huì)用
C-\alpha_i-\mu_i = 0
最終目標(biāo)函數(shù)還是同之前推到的相同,即公式2.9,約束條件中只有\alpha的取值變?yōu)榱耍?img class="math-inline" src="https://math.jianshu.com/math?formula=0%20%5Cleq%20%5Calpha_i%20%5Cleq%20C" alt="0 \leq \alpha_i \leq C" mathimg="1">。這樣有了目標(biāo)函數(shù)了以后,之后可以根據(jù)梯度下降算法求得最終的\alpha

SMO(Sequential Minimal Optimization)

KKT條件

f(x) 極值的時(shí)候我們這里討論三種情況。

  1. 沒有約束條件:

  2. 有一個(gè)等式h(x)的約束條件:
    使用拉格朗日乘子法(Lagrange Multiplier),也就是我們在高數(shù)中求極值常用的。設(shè)置一個(gè)拉格朗日系數(shù)\alpha_1,得到如下公式,之后對x\alpha_1用求導(dǎo)的方式求極值即可。
    L(x, \alpha) = f(x) + \alpha*h(x)

  3. 含有不等式的約束條件:
    當(dāng)約束條件中有不等式時(shí),就需要用到KKT條件。同樣地,把所有的不等式約束g(x)\leq0、等式約束h(x)=0和目標(biāo)函數(shù)f(x)全部寫為一個(gè)式子如下公式。
    L(x,\alpha_1, \alpha_2)= f(x) + \alpha_1*g(x)+\alpha_2*h(x)
    KKT條件是說最優(yōu)值必須滿足以下條件:

    1. L(x, \alpha) = f(x) + \alpha(x)x\alpha_1\alpha_2求導(dǎo)為零。
    2. h(x)=0
    3. g(x)*\alpha_1=0
      其中第三個(gè)式子非常有趣,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=g(x)%5Cleq" alt="g(x)\leq" mathimg="1"> 0 ,如果要滿足這個(gè)等式,必須有a = 0或者g(x) = 0。這是SVM的很多重要性質(zhì)的來源。同時(shí)f(x)也可以寫作max_{\alpha_1,\alpha_2}\ L(x,\alpha_1,\alpha_2),這個(gè)則是SMO求解中的一個(gè)關(guān)鍵性質(zhì)。詳細(xì)的論述參考這篇博客

SMO算法細(xì)節(jié)

SMO算法綜述

由于原來直接通過梯度下降進(jìn)行求解速度太慢,所以1996年,John Platt依靠KKT的特性,將大優(yōu)化問題變成了多個(gè)小優(yōu)化問題來求解,成為了SVM中最常用的求解思路。
其思路如下:

  • Loop:
    1. 選取一對 \alpha_i\alpha_j作為變量,其余看為常數(shù)
    2. 如果這對\alpha滿足以下兩個(gè)條件,使用梯度下降算法改變他們的值。
      • 兩者都在間隔邊界外
      • 兩者都沒有在進(jìn)行過區(qū)間化處理,或者不在邊界上
    3. 當(dāng)滿足了KKT條件,即\sum_{i=1}^N\alpha_iy_i=00\leq \alpha_i \leq C
      注:這里可以這么理解,\alpha_i從之前的公式中我們可以大致理解為是每一個(gè)樣本的權(quán)值,我們這些操作可以理解為通過操作\alpha把所有的樣本點(diǎn)盡量的放在間隔邊界上。

算法推導(dǎo)

我們接下來要做的是,通過類似梯度下降的方式來求的最優(yōu)的\alpha值。正如上一節(jié)所說的,SMO的本質(zhì)是大優(yōu)化問題畫小優(yōu)化問題。所以從目標(biāo)函數(shù)公式2.9中,隨意取出兩個(gè)\alpha,為了表達(dá)方便,不妨直接取\alpha_1\alpha_2,同時(shí)對公式2.9前加負(fù)號取反之后,化簡如下式4.1,其中\kappa_{ij}代表\langle x_i·x_j\rangle
\begin{split} min_{\alpha_1, \alpha_2}W(\alpha_1,\alpha_2) &=\frac{1}{2}\kappa_{11}\alpha_1^2+\frac{1}{2}\kappa_{22}\alpha_2^2+y_1y_2\alpha_1\alpha_2\kappa_{12}-(\alpha_1+\alpha_2)\\ &+y_1\alpha_1\sum_{i=3}^Ny_i\alpha_i\kappa_{i1}+y_2\alpha_2\sum_{i=3}^Ny_i\alpha_i\kappa_{i2}\\ \end{split}
\begin{split} st. \ \ &\alpha_1y_1+\alpha_2y_2=-\sum_{i=3}^Ny_i\alpha_i\\ &0\leq\alpha_i\leq C \end{split}
由于我們已經(jīng)把不是\alpha_1\alpha_2的參數(shù)看作常量,所以在進(jìn)行求偏導(dǎo)進(jìn)行梯度下降算法的時(shí)候就不需要考慮公式4.1中第二行的式子。通過這個(gè)式子中約束條件的等式就可以得到僅含\alpha_j的式子,對其進(jìn)行梯度下降算法,得到如下公式4.2:
g(x)=\sum_{i=1}^Ny_i\alpha_i\kappa(x_i,x)+b
\eta = \kappa_{11}+\kappa_{22}-2\kappa_{12} = ||x_1-x2||^2
E_i = g(x_i)-y_i = (\sum_{j=1}^Ny_j\alpha_j\kappa_{ji}+b)-y_i
\alpha_i = \frac{\xi-\alpha_j y_j}{y_i}
\alpha_j^{new}=\alpha_j^{old}+\frac{y_j(E_i-E_j)}{\eta}\ \ \ 公式4.2
這時(shí)候我們已經(jīng)找到了兩個(gè)的alpha的新值了,不過我們不能確定這兩個(gè)新值是否還滿足KKT條件。所以我們根據(jù)KKT條件中\alpha的取值,設(shè)置了L和H來防止新值不滿足KKT,即L\leq\alpha_i,\alpha_j \leq H,其中L,H的公式如下公式4.3和公式4.4得到:
if\ y_i \neq y_j\ \ \ L=max(0,\alpha_j-\alpha_i),\ H=min(C,C+\alpha_j-\alpha_i)
if\ y_i = y_j\ \ \ L=max(0,\alpha_j+\alpha_i-C),\ H=min(C,\alpha_j+\alpha_i)
LH的細(xì)節(jié)推到,在這個(gè)博客中詳細(xì)的說明了LH是怎么推出來的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,384評論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內(nèi)容