python實現感知機學習演算法的原始形式
阿新 • • 發佈:2018-11-09
感知機
感知機(perceptron)是二類分類的線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取+1和-1二值。感知機對應於輸入空間(特徵空間)中將例項劃分為正負兩類的分離超平面,屬於判別模型。感知機學習旨在求出將訓練資料進行線性劃分的分離超平面。
感知機學習演算法的原始形式
輸入:訓練資料集
,其中
,
,
;學習率
;
輸出:w,b;感知機模型
。
步驟:
(1)選取初值
(2)在訓練集中選取資料
(3)判斷是否誤分類,如果
:
(4)轉至(2),直至訓練集中沒有誤分類點。
python實現
#感知機演算法的原始形式
import pandas as pd
import numpy as np
dataSet = pd.DataFrame({'x1':[3,4,1], 'x2':[3,3,1], 'y':[1,1,-1]})
w = [0, 0]
b = 0
r = 1
lengths = 100
def perceptronOriginal(dataSet, w, b, r, lengths):
X = dataSet.iloc[:,:-1].as_matrix()
Y = dataSet.iloc[:,-1].as_matrix()
W = np.array(w)
count = 0
while count < lengths:
#記錄對於所有X是否都沒有誤分類
correctCount = 0
for i in range(len(X)):
#判斷是否屬於誤分類
if Y[i] * (np.dot(W, X[i]) + b) <= 0:
W = W + r * Y[i] * X[i]
b = b + r * Y[i]
#print('Xi:',X[i], 'Yi:',Y[i], 'W:',W, 'b:',b)
#每次迭代更新引數後,退出迴圈,重新判斷
break
else:
correctCount += 1
count += 1
#所有X都正確分類後
if correctCount == len(X):
#print (count, W, b)
return W, b
#記錄迭代次數
else:
print (count)