機器學習-感知機

感知機是1957年,由Rosenblatt提出,是神經網絡和支持向量機的基礎。感知機是二分類的線性分類模型,其輸入爲實例的特徵向量,輸出爲實例的類別,取+1和-1二值。感知機對應於輸入空間中將實例劃分爲正負兩類的分離超平面,屬於判別類型。
假設訓練數據集是線性可分的,感知機學習的目標是求得一個能夠將訓練數據集正實例點和負實例點完全正確分開的分離超平面。如果是非線性可分的數據,則最後無法獲得超平面。


感知機模型

感知機的輸入特徵向量x爲n維向量,輸出y∈{+1,-1}.
感知機從輸入空間到輸出空間的模型如下:
f(x)=sign(wx+b)f(x)=sign(w \cdot {x}+b)
其中wRnw∈R^n叫做權值,bRb∈R叫做偏置。
sign是符號函數,即:
sign(x)={1x<01x0sign(x)= \begin{cases} -1& {x<0}\\ 1& {x\geq 0} \end{cases}

感知機有如下幾何解釋:
線性方程w·x+b=0 對應於特徵空間RnR^n中的一個超平面S,其中w是超平面的法向量,b是超平面的截距。這個超平面將特徵空間劃分爲兩個部分。位於兩部分的點分別被分爲正、負兩類。如下圖所示:

在這裏插入圖片描述
感知機的學習目的就是確定最佳的w和b


數據集的線性可分性

給定一個訓練集T=(x1,y1),(x2,y2),...,(xN,yN)T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)},如果存在某個超平面S:w·x+b=0能夠將數據集的正實例點和負實例點完全正確地劃分到超平面的兩側,則稱爲該數據集T線性可分,否則稱爲線性不可分。


感知機學習策略

損失函數

感知機的損失函數採用誤分類點到超平面S的總距離。

首先,寫出輸入空間中任意一點x0x_0到超平面S的距離:wx0+bw\frac{|w\cdot {x_0}+b|}{||w||}
其中,||w||是w的L2L_2範數,L2L_2範數定義爲向量所有元素的平方和的開平方。

對於誤分類的數據(xi,yix_i,y_i)來說,yi(wxi+b)>0-y_i(w\cdot {x_i}+b)>0 成立
因爲當wxi+b>0w\cdot {x_i}+b>0時,yi=1y_i=-1,而當wxi+b<0w\cdot {x_i}+b<0時,yi=+1y_i=+1.
因此,誤分類點xix_i到超平面S的距離是:
yi(wxi+b)w-\frac{y_i(w\cdot {x_i}+b)}{||w||}
假設超平面S的誤分類點集合爲M,那麼所有誤分類點到超平面S的總距離爲:
1wxiMyi(wxi+b)-\frac{1}{||w||}\sum_{x_i\in{M}}y_i(w\cdot {x_i}+b).

不考慮1w\frac{1}{||w||},則感知機的損失函數定義爲:
L(w,b)=xiMyi(wxi+b)L(w,b)=-\sum_{x_i\in{M}}y_i(w\cdot {x_i}+b)
其中M爲誤分類點的集合.

顯然,損失函數是非負的。如果沒有誤分類點,損失函數值是0。而且,誤分類點越少,誤分類點離超平面越近,損失函數值就越小。給定訓練數據集T,損失函數 L(w,b)L(w,b)是w,b的連續可導函數。


爲什麼可以不考慮1w\frac{1}{||w||}

  • 1w\frac{1}{||w||}不影響yi(wxi+b)y_i(w\cdot {x_i}+b)正負的判斷,即不影響學習算法的中間過程。因爲感知機學習算法是誤分類驅動的,這裏需要注意的是所謂的“誤分類驅動”指的是我們只需要判斷yi(wxi+b)-y_i(w\cdot{x_i}+b)的正負來判斷分類的正確與否,而1w\frac{1}{||w||}並不影響正負值的判斷。所以1w\frac{1}{||w||}對感知機學習算法的中間過程可以不考慮。
  • 1w\frac{1}{||w||}不影響感知機學習算法的最終結果。因爲感知機學習算法最終的終止條件是所有的輸入都被正確分類,即不存在誤分類的點。則此時損失函數爲0. 對應於1wiMyi(wxi+b)-\frac{1}{||w||}\sum_{i\in{M}}y_i(w\cdot {x_i}+b),即分子爲0.則可以看出1w\frac{1}{||w||}對最終結果也無影響。

感知機學習算法

原始形式

輸入:訓練數據集T=(x1,y1),(x2,y2),...,(xN,yN)T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}yi{1,+1}y_i\in{\{-1,+1\}},學習率η(0<η<1)\eta(0<\eta<1)
輸出:𝑤,𝑏;感知機模型f(x)=sign(wx+b)f(x)=sign(w\cdot {x}+b)

  1. 賦初值 w0,b0w_0,b_0
  2. 選取數據點(xi,yi)(x_i,y_i)
  3. 判斷該數據點是否爲當前模型的誤分類點,即判斷若yi(wxi+b)<=0y_i(w\cdot {x_i}+b)<=0
    則更新:
    w=w+ηyixiw={w+\eta{y_ix_i}}
    b=b+ηyib={b+\eta{y_i}}
  4. 轉到2,直到訓練集中沒有誤分類點

對偶形式

由於𝑤,𝑏的梯度更新公式:
w=w+ηyixiw={w+\eta{y_ix_i}}
b=b+ηyib={b+\eta{y_i}}
我們的𝑤,𝑏經過了𝑛次修改後的,參數可以變化爲下公式,其中𝛼=𝑛𝑦:
w=xiMηyixi=i=1nαiyixiw=\sum_{x_i\in{M}}\eta{y_ix_i}=\sum_{i=1}^n\alpha_iy_ix_i
b=xiMηyi=i=1nαiyib=\sum_{x_i\in{M}}\eta{y_i}=\sum_{i=1}^n\alpha_iy_i

這樣我們就得出了感知機的對偶算法:

輸入:訓練數據集T=(x1,y1),(x2,y2),...,(xN,yN)T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}yi{1,+1}y_i\in{\{-1,+1\}},學習率η(0<η<1)\eta(0<\eta<1)
輸出:𝛼,𝑏;感知機模型f(x)=sign(wx+b)f(x)=sign(w\cdot {x}+b)
其中α=(α1,α2,...,αn)T\alpha=(\alpha_1,\alpha_2,...,\alpha_n)^T

  1. 賦初值 w0,b0w_0,b_0
  2. 選取數據點(xi,yi)(x_i,y_i)
  3. 判斷該數據點是否爲當前模型的誤分類點,即判斷若yi(wxi+b)<=0y_i(w\cdot {x_i}+b)<=0
    則更新:
    αi=αi+η\alpha_i={\alpha_i+\eta}
    b=b+ηyib={b+\eta{y_i}}
  4. 轉到2,直到訓練集中沒有誤分類點

爲了減少計算量,我們可以預先計算式中的內積,得到Gram矩陣:
G=[xi,xj]N×NG=[x_i,x_j]_{N×N}


訓練過程

我們大概從下圖看下感知機的訓練過程:
在這裏插入圖片描述

線性不可分的過程:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章