1. 程式人生 > >【統計學習方法讀書筆記】感知機的個人理解(1)

【統計學習方法讀書筆記】感知機的個人理解(1)

寫在前面:

在友人的推薦下,開始入李航老師的坑,《統計學習方法》。

讀到第二章,感知機,李航老師由淺入深讓我有了很好的理解,現在自己總結一下思路。


正文:

 感知機用於二分類問題,由淺開始:假定我們有一個平面上存在許許多多的藍色點和紅色點,並且假設存在一條直線可以將藍紅兩色的點分隔在直線兩側(即書中所說的資料線性可分)。我們如何找到一條這樣的直線y=wx+b呢?

同理:將這個問題推廣到n維空間中,在空間若存在兩組不同的特徵點,我們是否能找到一個超平面來將這兩組截然不同的目標分隔在超平面兩端呢?

由上述的問題,便引出了感知機這樣的二分類模型。我們設定用於分隔資料的直線(超平面)表示式為y=wx+b(在二維平面中,w、b為一個數;而在n維平面中w為陣列,b還是一個數),我們將直線一側的資料分類結果表示為1,另一側我們用-1來表示。很自然的,我們引出符號函式:

                                                                                          f=sign(x)\left\{\begin{matrix} +1,& x\geq 0 \\ -1, & x<0 \end{matrix}\right.

按照李航老師的思路,統計學習路線為:模型→策略→演算法,我們先提出模型:

感知機的模型我們定義為:f(x)=sign(w\cdot x+b);其中w\epsilon \mathbb{R}^{n},b\epsilon \mathbb{R}。而在感知機模型中,w稱為權重(weights),b稱為偏置(bias)。

有了模型,我們就需要有一種學習策略,也就是如何優化這個模型,或者說如何衡量這個模型的優劣?很自然的一個想法,就是我們看一看分類錯誤的點的個數就能衡量模型的好壞。但是這種衡量方式對於w,b來說是一種離散的關係,無法求導,也就無從下手去優化w,b的值(找不到優化方向);第二種方法就是衡量被誤分類的點到分類直線(超平面)的距離總和,距離總和越小,證明我們分類的越準確。

基於上述思路,我們首先提出任意一點到超平面的距離公式:

                                                                                           \frac{1}{\left \| w \right \|}\mid w\cdot x+b\mid

對於誤分類問題來說,-y_{i}(w\cdot x_{i}+b)> 0,因為錯誤分類,當括號內>0時,y_{i}<0,反之亦然。因此對於被誤分類的點來說,它的距離公式就變為了:

                                                                                           -\frac{1}{\left \| w \right \|}y_{i}( w\cdot x_{i}+b)

(這裡剛看的時候轉不過彎,不明白為什麼誤分類的點距離要擴大y_{i}倍,後來發現y_{i}取值是1……蠢哭)

那麼如果我們總共有M個點被誤分類,那麼這M個點的距離總和為:

                                                                                         -\frac{1}{\left \| w \right \|}\sum_{x\rightarrow 0}^{M}y_{i}( w\cdot x_{i}+b)

不妨令上述距離變為L關於w、b的函式,那麼我們希望通過改變w、b的值,令L變得越小越好。那麼對於\frac{1}{\left \| w \right \|}我們並不關心,它無非就是一個係數而已,因此將其省略後,L的函式為:

                                                                                       L(w,b)=\sum_{x\rightarrow 0}^{M}y_{i}( w\cdot x_{i}+b)

很明顯,這個函式在存在誤分類點時>0(非負,畢竟是距離嘛),在沒有誤分類點時為0。因此為了最小化L的取值,我們需要不斷更新w,b的值。使用的方法是隨機梯度下降法,我對隨機的理解就是隨便選取一個w0,b0的初值(隨便選取一個直線or超平面)。然後L分別對w、b求偏導,那麼根據求導結果:

w:=w+\eta y_{i}x_{i}                     b:=b+\eta y_{i}

其中η∈(0,1],叫做步長(step)或著學習率。

那麼有了策略後,我們需要再提出一個演算法來進行實操。

數中的第一個演算法就是感知機學習演算法的原始形式:

對於一個數據集,我們有了感知機的模型f(x)=sign(w\cdot x+b),有了學習率:

(1)首先我們隨便取一個初值;

(2)選取一個訓練集中的資料帶入;

(3)如果y_{i}( w\cdot x_{i}+b)≤0則存在誤分類的情況,需要按照w:=w+\eta y_{i}x_{i};  b:=b+\eta y_{i}來更新w、b的取值

(4)再次重複(2)直到沒有y_{i}( w\cdot x_{i}+b)≤0,則訓練結束。