感知机简介
感知机为二类分类的线性分类模型,其输入为特征向量,输出为实例类别,即{+1,-1}。
在进行感知机学习策略的时候,需要注意训练数据集是否线性可分
示例代码
import numpy as np
import matplotlib.pyplot as plt
p_x = np.array([[3, 3], [4, 3], [1, 1]])
y = np.array([1, 1, -1])
plt.figure()
for i in range(len(p_x)):
if y[i] == 1:
plt.plot(p_x[i][0], p_x[i][1], 'ro') #'ro'表示红色圆点
else:
plt.plot(p_x[i][0], p_x[i][1], 'bo') #'bo'表示蓝色圆点
w = np.array([0, 0])
b = 0
delta = 1
for i in range(100):
choice = -1
for j in range(len(p_x)):
if y[j] != np.sign(np.dot(w, p_x[0]) + b): #np.dot()表示两向量内积,返回的是常数
choice = j
break
if choice == -1:
break
w = w + delta * y[choice]*p_x[choice] #此处常数与矩阵相乘,返回矩阵;若choice=-1,则代表取列表最后一位
b = b + delta * y[choice]
line_x = [0, 10]
line_y = [0, 0]
for i in range(len(line_x)):
line_y[i] = (-w[0] * line_x[i]- b)/w[1]
plt.plot(line_x, line_y)
手动迭代还可以计算,可是这块代码硬是没看懂,我还是缺失基本的编程思维,不过相信以后慢慢会好起来的,知乎萧大推荐了SICP这本书,原话如下:“在阅读SICP之前,你也许能通过调用几个函数解决一个简单问题。但阅读完SICP之后,你会学会如何将问题抽象并且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。”——思维方式确实是最重要的东西,我想提高代码能力的话,必须花时间观摩一下SICP这本书~