機器學習--感知機算法原理、方法及代碼實現


1.感知器算法原理

兩類線性可分的模式類:,設判別函數為:

                  

     對樣本進行規范化處理,即類樣本全部乘以(-1),則有:

                    

感知器算法通過對已知類別的訓練樣本集的學習,尋找一個滿足上式的權向量。

2.算法步驟

1)選擇N個分屬於類的模式樣本構成訓練樣本集{ X1,  …, XN }構成增廣向量形式,並進行規范化處理。任取權向量初始值W(1),開始迭代。迭代次數k=1

(2)用全部訓練樣本進行一輪迭代,計算WT(k)Xi 的值,並修正權向量。分兩種情況,更新權向量的值:

    若   分類器對第 i 個模式做了錯誤分類,權向量校正為:  c為整的校正增量。

    ‚若   分類正確,權向量不變, 

 統一寫成:

      

(3)分析分類結果:只要有一個錯誤分類,回到(2),直至對所有樣本正確分類。

  感知器算法是一種賞罰過程:

    分類正確時,對權向量“賞”——這里用“不罰”,即權向量不變;

    分類錯誤時,對權向量“罰”——對其修改,向正確的方向轉換。

  3.代碼示例

#感知機算法
import numpy as np
import matplotlib.pyplot as plt

X0 = np.array([[1,0],
              [0,1],
              [2,0],
              [2,2]])
X1 = np.array([[-1,-1],
              [-1,0],
              [-2,-1],
              [0,-2]])

#將樣本數據化為增廣向量矩陣
ones = -np.ones((X0.shape[0],1))
X0 = np.hstack((ones,X0))
ones = -np.ones((X1.shape[0],1))
X1 = np.hstack((ones,X1))

#對樣本進行規范化處理
X = np.vstack((-X0,X1))
plt.grid()
plt.scatter(X0[:,1],X0[:,2],c = 'r',marker='o',s=500)
plt.scatter(X1[:,1],X1[:,2],c = 'g',marker='*',s=500)
W = np.ones((X.shape[1],1))

flag = True
while(flag):
    flag = False
    for i in range(len(X)):
        x = X[i,:].reshape(-1,1)    
        if np.dot(W.T,x)<=0:
            W = W + x
            flag = True
p1=[-2.0,2.0]
p2=[(W[0]+2*W[1])/W[2],(W[0]-2*W[1])/W[2]]
plt.plot(p1,p2)
plt.show()
     

輸出結果:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM