機器學習---支持向量機(一)

 

        本打算從最原始理論原理開始講起,發現網上已經有人詳細的講解了,我通讀了一遍,寫的淺顯易懂,適合初學者看,在這裏貼上博客的地址支持向量機通俗導論(理解SVM的三層境界),這篇文章說的很詳細,但是有些地方看起來還是有點不好,在這裏,按照本人的思路主線記錄一下,算是總結一下,中間會有所不同,可能會比這篇博客更簡潔,但是簡潔的前提是在條理性、可讀性清晰的情況下進行的,如果您感覺那篇文章讀起來有點暈,您可以嘗試讀本篇文章,本人力求在困惑的地方仔細解讀。支持向量機會分幾個部分,幾個部分組合成完整的支持向量機,廢話不多說,下面正式開始:

        支持向量機的提出是爲了解決線性無法分類的問題,想要深入理解就需要從線性分類開始探討,找到線性分類的優缺點,然後在循序漸進的提出解決方法和思路進而引出支持向量機,在繼續深入探討支持向量機的特點,以及如何分類?分類的原理是什麼,支持向量機的難點在哪裏?如何解決?帶着問題去探討,這樣才符合我們認識事物的規律,本篇講述就按此進行。

線性分類器:

如圖二維數據分類的例子,從 圖中看,這條分類函數還是可以準確做出判斷的,但是這樣的一元線性函數只存在一條嗎?當然不是,能正確做出判斷的函數有很多,如下圖:

 從圖中可以看出這些一元線性函數都可以對此進行分類,但哪個線性分類函數最好呢?如何找出這個最好的線性分類函數呢?

在解釋提出的問題之前,先把線性分類函數的一般表達式給出:

還記的Logistic迴歸中,他的分類函數的表達式是什麼樣的嗎?直接引用博客裏的式子:

                                               \large f(x) = w^{T}x + b  

其中:\large w^{T}x =  \large w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+.....+w_{n}x_{n}

           \large b爲常數

下面就是如何找到最好的分類函數,什麼是最好呢?就是分類預測的確信或者準確度達到最高就是最好的了

那麼怎麼找呢?

找這個分類函數其實就是找最佳的權值向量\large w和b,怎麼找呢?找之前先引入幾個概念:

最大邊緣超平面(MMH):

什麼是最大邊緣超平面呢?大家都知道,在一維中(橫軸) 一點可以把數分兩類,在二維中,一條直線可以把數據分兩類(上面講的都二維的),在三維中,一個平面可以把數據分兩類(大家可以想象空間一個球,過球心的水平面就可以把球分兩部分),在四維,五維、六維、、、n維中(我們目前只知道一、二、三維的空間,三維空間可通過平面進行區分空間,更高維度的空間區分他們就叫超平面了,例如 五維空間一般可以通過四維超平面進行分開,n維就是通過n-1維超平面進行區分,下面解釋一下最大邊界,以二維空間爲例,我們知道區分二維平面的是直線,所謂最大邊界,例如上圖右,藍色和紅色邊界的直線(黃色的)稱爲決策邊界,他們分別經過了兩邊邊沿的一個數據點,而這些數據點就稱爲支持向量點,爲什麼這樣稱呼下面會講解,同時該兩條直線之間的空間稱爲「隔離帶」(自稱的),如下圖:

我們可以看到,b11和b12, b21和b22就是最大邊緣決策邊界(最大邊緣超平面),他們分別經過兩組數據的第一個點,以此稱爲決策邊界,找到最大邊緣分界有什麼用呢?其實最優的分類一定就在這之間了,但是如何確定最優的呢?

                  假如我們找到的決策函數爲上圖的B1或者B2,大家覺得決策函數應該在哪裏最好?直觀是不是應該在中間,以B1的邊緣爲例,那麼B1的決策決策函數就在b11和b12中間,因爲中間位置到兩遍的邊緣分界的距離最大,那麼他判斷正確的確信度就越高,所以‘隔離帶’越大越好,即通過求分界線之間的距離建立關係,一旦分界間的距離確定了,那麼決策函數就容易求了,因此定義決策超平面(在二維中,是一條線,但是在高維中就是超平面了)如下:

                                                          \large w^{T}x + b = 0

把兩邊決策邊界定義爲:

                                                          \large w^{T}x_{1} + b = 1                                 ①

                                                           \large w^{T}x_{2} + b = -1                             ②

 

                                 

 至於爲什麼是1和-1,那篇文章講的很詳細,我就不囉嗦了,不知道的可以查看一下,需要解釋一下爲什麼邊界線通過的點稱爲支持向量,以二維爲例,上圖中,我們可以看到x1和x2兩個數據點分別是邊界線進過的數據點,以0爲原點建立直角座標系,數據x1和x2分別構成的向量爲:\large \vec{ox_{1}} 和 \large \vec{ox_{2}},,兩向量相減得到:

                                                  \large \vec{ox_{1}} -  \large \vec{ox_{2}} = \large \vec{x_{2}x_{1}}

另外我們知道直線的斜率就是法向量,與直線是垂直的,上圖是二維平面,直線的法向量\large w和直線垂直,同時也是邊界線的法向量,因此\large \vec{x_{2}x_{1}}\large w的內積就可以寫出了:

                                                   \large w \bullet \vec{x_{2}x_{1}} = \large \left \| w \right \|*\left \|\vec{x_{2}x_{1}} \right \|*cos(\Theta )                          
內積大家都知道吧,那我們繼續,

下面正式推到了,上面是從向量的建立角度進行講解,爲下面的做準備工作。

然而這內積結果爲什麼等於2呢?可以根據兩式相減得到,即兩邊界方程相減得:即① - ②

                                               \large w^{T}(x_{1}-x_{2}) = 2

又因爲\large x_{1}-x_{2} = \large \vec{x_{2}x_{1}}(因爲都是向量,向量的減法沒忘完吧)

所以上式可以寫爲:

                                           \large w^{T}\bullet \vec{x_{2}x_{1}} = 2

                                           \large w^{T} \bullet \vec{x_{2}x_{1}} = \large \left \| w \right \|*\left \|\vec{x_{2}x_{1}} \right \|*cos(\Theta )=2     

又因爲\large \left \|\vec{x_{2}x_{1}} \right \|*cos(\Theta )其實就是兩條邊界線的距離d,不懂的可能是夾角\large \Theta,其實就是法向量\large w\large \vec{x_{2}x_{1}}中間的夾角,到這裏令:

                                                       \large d =  \large \left \|\vec{x_{2}x_{1}} \right \|*cos(\Theta )

可改寫爲:

                                             \large w^{T} \bullet \vec{x_{2}x_{1}} = \large \left \| w \right \|\cdot d=2

 所以:

                                                 \large d = \frac{2}{\left \| w \right \|}

到這裏問題就轉化了,求d得最大值就可以了。

在這裏還有另外一種解決思路:

我們知道平面的兩條直線的距離公式爲:

               如果求邊界間的距離,可以直以直接使用該公式即可:

                                                              \large w^{T}x_{1} + b = 1      

                                                               \large w^{T}x_{2} + b = -1

同樣可以得到邊界線的距離:

                                                                 \large d = \frac{2}{\left \| w \right \|}

這種顯得更簡潔,但是爲什麼不直接使用這個呢?因爲這個在高維的情況下可能不適用,同時也無法解釋什麼是支持向量,無法解釋支持向量機的本質。

總結一下: 所謂支持向量就是邊界超平面經過的數據點,因爲這些點才構成邊界,因纔有支持向量的稱呼,但是找邊界不是目的,我們希望找到最優的決策超平面,而最優的決策超平面就在決策邊界中心位置,而且決策邊界間的距離越大越好,即把問題轉化爲求距離最大問題了。

下面問題是如何求最大距離?有哪些約束條件?下一篇介紹。