感知机
感知机(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)