输入:
训练数据集,其中
学习率为
输出:
w, b
感知机模型
过程:
- 选取初值w_0, b_0
- 在训练集中选取数据
- 如果,则
- 转至2,直至训练集中没有错误分类点
直观解释:当一个实例点被误分类, 即位于超平面错误的一侧时,则调整w,b的值,使超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直至超平面越过该误分类点使其被正确划分
代码: https://github.com/windmissing/LiHang-TongJiXueXiFangFa/blob/master/Chapter2/perceptron.ipynb
# 感知机原始形式
def perceptron(X, y, eta):
w, b = np.zeros(X.shape[1]),0
while ((y*(w.dot(X.T)+b))<=0).any():
index = np.random.randint(X.shape[0])
if y[index]*(w.dot(X[index])+b) <= 0:
w = w + eta * y[index] * X[index]
b = b + eta * y[index]
def f(x):
return np.sign(w.dot(x)+b)
return w, b, f