一步步進行SVM公式推導之間隔

看着Peter在《機器學習》中給出的SVM分類公式表示一臉懵逼,便決定了用自己的語言來對這些公式進行一次推導完成實驗報告的同時,也算是爲了以後如果忘了推導過程,可以馬上翻出來看看。正所謂SVM有三寶:間隔,對偶和技巧。那麼接下來我會對這三個關鍵詞說說我的理解。

SVM的中心思想

        首先來說SVM是怎麼進行分類的呢?其實簡單的理解話就是劃一條線將兩個類分開,這條線也就是我需要利用SVM求得。我們就拿二維的來舉個栗子,如圖所示,可以分割開這兩個類的分割線數不勝數,那麼哪一條先纔是最優的呢?我們應該怎麼定義它的好壞呢?首先我們來看看l3這條分割線,由圖可以看出,它離A,B兩點都很近。如果這個時候來了一個測試數據C,C剛好也在B附近,但是C完全有可能出現在在l3上面(因爲B和l3挨着也很近),這樣的話C就會被歸類到A類。顯然這不是我們所希望的,所以找到魯棒性最好的那條線,間隔最大的那條線。

         

     總結一下:現在是二維的情況,那麼三維,四維.....呢,這個時候分割他們的就不再是一條線了,而是一個超平面。而SVM的目的就是爲了尋找一個滿足分類要求的超平面,並且使訓練集中的數據點儘量的遠離這個超平秒即間隔最大(能達到一個更好的容噪效果)

間隔

硬間隔目標函數的初始建立

    接下來會出現大量的推導公式,如果您僅僅是爲了瞭解一下SVM遠離的話,可以直接跳過中間推導,直接到最後的結論。如果自己學過高數,線代的話,我覺得大家可以跟着思路推導一下。

     Step1:建立超平面公式

     爲了求超平面,自然需要超平面的公式。就像高中的時候求一條直線,我們需要先假設這條直線爲y=kx+b,然後再把具體的點帶入得到具體的相關係數。那麼超平面等公式應該怎麼求呢?我們還是先看到上圖,上圖的超平面其實就是一條直線,那麼我們同樣可以得到這個超平面的公式爲w^{T}x+b=0。(大家看到這個w^{T}x+b是不是很熟悉,沒錯其實這就是邏輯迴歸裏面的z。其實我覺得他們的思想其實是一樣的,邏輯迴歸裏面把z>0和z<0分成了兩類,而這裏同樣。當然他們其實在處理的時候還是有區別,這個最後來說)

       好,現在我們已經完成了第一步,超平面公式的建立爲

                                                  f(w)=w^{T}x+b                                            公式  1

     step2:求第i個訓練樣本與超平面的函數距離

                                                \mathop {{\gamma ^i}}\limits^ \wedge = {y^i}({w^T}x + b) = \left| {{w^T}x + b} \right|                       公式 2

                 首先說這個距離是怎麼來的呢?其實很簡單就是初中的點到面的距離公式推出來的,如果一直ax+by+c=0,求(x1,x2)與該面的距離,則距離公式爲:

                                                 dis = \frac{{\left| {a{x_1} + b{x_2} + c} \right|}}{{\sqrt {{a^2} + {b^2}} }}             

                由於分母相同,所以我們可以直接忽略,進而得到公式2,這裏爲了把絕對值和模這兩個符號分開,以後就都用||x||表示x向量的模,因此得到函數距離爲:

                                                 \mathop {{\gamma ^i}}\limits^ \wedge = {y^i}({w^T}x + b) = \left\| {{w^T}x + b} \right\|                      公式3

      step3:因此所有間隔中最近的間隔爲

                                                   \mathop \gamma \limits^ \wedge = \mathop {\min }\limits_{i = 1...N} \mathop {{\gamma ^i}}\limits^ \wedge                                                     公式4

      step4:尋找幾何間隔

                這個函數間隔又是個什麼鬼東西呢?是這樣的\mathop \gamma \limits^ \wedge其實是一個數值,也就是說普通的函數間隔,現在我們需要把它轉換成函數間隔(也就是把向量給加進去)。爲什麼要轉換成幾何間隔,後面再說。

                  

             如圖所示,At爲A在l2上的投影,也就是說\overrightarrow {A{A_t}}向量爲超平面的法向量,這是At的座標怎麼求呢?由高中立體幾何的知識可以得到\overrightarrow {OA} + \overrightarrow {A{A_t}} = \overrightarrow {O{A_t}}\overrightarrow {O{A}}好求,因爲就是訓練集中A的座標,那麼\overrightarrow {A{A_t}}應該怎麼求呢?其實我們可以把它分成兩部分即距離乘以單位向量。距離其實就是我們之前求得函數距離,那麼單位向量呢?

            其實單位向量就是超平面的法向量,又因爲w和超平面的法向量平行,也就是說單位向量可以用\frac{w}{{\left\| w \right\|}}得到。那麼爲什麼w垂直於超平面呢?這裏又涉及到了高中的立體幾何知識。因爲

                                                \left\{ \begin{array}{l} {w^T}{x_1} + b = 0\\ {w^T}{x_2} + b = 0 \end{array} \right.

           可得{\rm{w(}}{x_1} - {x_2}{\rm{) = 0}}(其實就是二式相減得到的),因此w垂直與一個向量,然後同理再找一個向量並能夠證明得到w垂直於x1,x2所在的超平面了。

         總結一下就是

                                                     \begin{array}{l} \overrightarrow {OA} = {x^i}\\ \overrightarrow {A{A_t}} = - {\gamma ^i} * \frac{w}{{\left\| w \right\|}}\\ \overrightarrow {OA} + \overrightarrow {A{A_t}} = \overrightarrow {O{A_t}} = {x^i} - {\gamma ^i} * \frac{w}{{\left\| w \right\|}} \end{array}                             公式5

step5:將公式5帶入公式2得到

                                                      {w^T}({x^i} - \mathop {{\gamma ^i}}\limits^ \wedge * \frac{w}{{\left\| w \right\|}}) + b = 0                                         公式6

step6:化簡等式6得到幾何間隔

                                                   {\gamma ^i} = \frac{{{w^T}{x^i} + b}}{{\left\| w \right\|}} = {\left( {\frac{w}{{\left\| w \right\|}}} \right)^T}.{x^i} + \frac{b}{{\left\| w \right\|}}                         公式7

                             由上式可以看出幾何間隔與函數間隔之間的關係爲:

                                                              \gamma = \frac{{\mathop \gamma \limits^ \wedge }}{{\left\| w \right\|}}

綜上:整個訓練集的幾何間隔爲

                                                             \gamma = \mathop {\min }\limits_{i = 1,..N} {\gamma ^i}                                                        公式8

好了到此,整個硬間隔的模型已經完成。那麼現在我們重新回答一下之前那個問題:

爲什麼在有了函數間隔的情況下,還要定義幾何間隔呢?

              我們還是用二維來說,如果分割線爲0=2x+1+y和0=4x+2+2y其實是同一個超平面,但是如果我們把它帶入公式2(函數距離)中會發現,如果w和b同時增大n倍,那麼函數距離也會隨之增大。這就是幾何間隔引入的原因。從公式7就可以看出,w,b如果同時增大,幾何間隔會保持不變。(因爲分母除了一個w的模)

step7:目標函數的建立

             現在我們已經知道了每個點與超平面的幾何間隔,那麼我們的目標是什麼呢?當然是使這些函數距離中的最小的那個距離儘可能大。(因爲最小的距離都很大了,那麼其他的距離就更大了)

因此可以得到目標函數爲:

                                                     \begin{array}{l} \max \gamma \\ st.{\rm{ }}{{\rm{y}}^i}\left( {{{\left( {\frac{w}{{\left\| w \right\|}}} \right)}^T}.{x^i} + \frac{b}{{\left\| w \right\|}}} \right) \ge \gamma \end{array}                                 公式9

約束條件表示的意思是:γ是最小的,其他的距離都比他大

然後我們將公式9在進行一次化解,利用公式7,8

得到目標函數:

                                                   \begin{array}{l} \max \frac{{\mathop \gamma \limits^ \wedge }}{{\left\| w \right\|}}\\ st.{\rm{ }}{{\rm{y}}^i}({w^T}{x^i} + b) \ge \mathop \gamma \limits^ \wedge {\rm{ i = 1}}..{\rm{N}} \end{array}                                  公式10

這個公式就是Peter給的那個公式:

                                                   max \left( {\mathop {\min }\limits_{i = 1,..N} {y^i}\left( {\frac{{{w^T}{x^i} + b}}{{\left\| w \right\|}}} \right)} \right)

那麼到底點和超平面之間至少應該相差多遠呢?這裏我們就假設至少相差1.(可根據不同情況改變),所以化簡式子爲:

                                                   \begin{array}{l} \max \frac{1}{{\left\| w \right\|}}\\ st.{\rm{ }}{{\rm{y}}^i}({w^T}{x^i} + b) \ge 1{\rm{ i = 1}}..{\rm{N}} \end{array}                                   公式11

其實公式11還存在一定的物理意義,如下圖:

 

也就是在原來的一個超平面的基礎上增添了兩個超平面,這兩個超平面

{x^i}屬於類別1時:

                                {w^T}{x^i} + b1 \ge 1

{x^i}屬於類別2時:

                                {w^T}{x^i} + b \le - 1

                            

綜上:將公式11轉換一下得到目標函數:

                                  \begin{array}{l} \min \frac{1}{2}{\left\| w \right\|^2}\\ st.{\rm{ }}{{\rm{y}}^i}({w^T}{x^i} + b) \ge 1 \end{array}                                公式12

  好的到這裏位置,整個SVM的目標函數就建立完了,但是沒有得到Peter給的那個最後那個公式,那麼他給的最後那個公式又是怎麼回事呢?那就得看看對偶和技巧了

對偶: