感知機算法及實現

感知機算法

定義1:假設輸入空間是χRn\chi \subseteq R^{n},輸出空間爲γ\gamma={+1,-1}.輸入xχ\in \chi表示實例的特徵向量,對應於輸入空間的點;輸出yγy\in \gamma表示實例的類別。由輸入空間到輸出空間的如下函數f(x)=sign(wx+b)f(x)=sign(\mathbf{w} \mathbf{x}+b)稱爲感知機。其中wx\mathbf{w} \mathbf{x}是向量乘積形式。我們只需要求得兩個參數w\mathbf{w}和b,就可以獲得感知機模型。
感知機有如下幾何解釋:線性方程wx+b=0\mathbf{w} \mathbf{x}+b=0對應於特徵空間的一個超平面S,其中w\mathbf{w}是超平面的法向量,b是超平面的截距。位於兩部分的點分別被分爲正負兩類,因此,超平面S稱爲分離超平面。
這裏寫圖片描述

根據經驗,需要定義損失函數並令損失函數最小化。對於感知機模型,損失函數選擇誤分類點到超平面的總距離。假設xix_{i}是誤分類點,那麼誤分類點xix_{i}到超平面的距離爲1wyi(wxi+b)-\frac{1}{||\mathbf{w}||}y_{i}(\mathbf{w} \mathbf{x_{i}}+b)假設超平面S的誤分類點的集合爲M。那麼誤分類點到超平面S的總距離爲1wxiMyi(wxi+b)-\frac{1}{||\mathbf{w}||}\sum_{x_{i} \in M}y_{i}(\mathbf{w} \mathbf{x_{i}}+b)。不考慮1w\frac{1}{||\mathbf{w}||},我們就可以得到感知機的損失函數L(w,b)=xiMyi(wxi+b)L(\mathbf{w},b)=-\sum_{x_{i} \in M}y_{i}(\mathbf{w} \mathbf{x_{i}}+b)

感知機算法的原始形式

這裏寫圖片描述

下面是參考博客 https://blog.csdn.net/qq_29591261/article/details/77934696實現的感知機算法,具體代碼如下:

#感知機
training_set=[[(1,2),1],[(2,3),1],[(3,1),-1],[(4,2),-1]]
#參數初始化
w=[0,0]
b=0
history=[]#用來記錄每次更新的參數

#參數更新
def update(item):
    #item是誤分類的點
    global w,b,history
    w[0]=w[0]+item[1]*item[0][0]
    w[1]=w[1]+item[1]*item[0][1]
    b=b+item[1]
    print('w的值爲:',w,'b的值爲:',b)#輸出每次更新過後的參數值
    history.append([w,b])

#用於計算item到分類平面的距離
def cal(item):
    res=0
    for i in range(len(item[0])):
        res=res+w[i]*item[0][i]
    res+=b
    res=res*item[1]
    return res

def check():
    flag=False
    for item in training_set:
        if cal(item)<=0:
            flag=True
            update(item)
    if not flag:
        print('結果 w:'+str(w)+'  b:'+str(b))
    return flag

if __name__=="__main__":
    for i in range(1000):
        if not check():break

##感知機算法的對偶形式##
對偶形式的基本想法是:將w和b表示爲實例xix_{i}和標記yiy_{i}的線性組合的形式。通過求解係數從而求得w和b。在算法1中初始化w和b爲0,對於誤分類點通過
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ &\mathbf{w} \g…
逐步修改w和b,假設修改了n次,那麼w,b關於(xi,yi)(x_{i},y_{i})的增量分別爲αiyixiαiyI\alpha _{i}y_{i}x_{i}和\alpha_{i}y_{I},這裏αi=niη\alpha _{i}=n_{i}\eta。於是,我們最後學習到的w,b可以表示爲
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ &\mathbf{w}=\s…
這裏,$\alpha_{i}\ge0,i=1,2,0,i=1,2,\cdots,N,,N,當\eta=1$時,表示第i個實例點由於誤分而進行更新的次數。實例點更新的次數越多,意味着他距離分類超平面越近,也就越難正確分類。這樣的實例對學習結果影響最大。
算法2:
這裏寫圖片描述這裏寫圖片描述

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