直线初始化
# X加上偏置项 X = np.hstack((np.ones((X.shape[0],1)), X)) # 权重初始化 w = np.random.randn(3,1) 1 2 3 4 显示初始化直线位置:
# 直线第一个坐标(x1,y1) x1 = -2 y1 = -1 / w[2] * (w[0] * 1 + w[1] * x1) # 直线第二个坐标(x2,y2) x2 = 2 y2 = -1 / w[2] * (w[0] * 1 + w[1] * x2) # 作图 plt.scatter(X[:50, 1], X[:50, 2], color='blue', marker='o', label='Positive') plt.scatter(X[50:, 1], X[50:, 2], color='red', marker='x', label='Negative') plt.plot([x1,x2], [y1,y2],'r') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.legend(loc = 'upper left') plt.show() 1 2 3 4 5 6 7 8 9 10 11 12 13 14

文章插图
由上图可见,一般随机生成的分类线,错误率很高 。
计算scores,更新权重
接下来,计算scores,得分函数与阈值0做比较,大于零则y
^
=1
y^=1,小于零则y
^
=?1
y^=?1
s = np.dot(X, w) y_pred = np.ones_like(y) # 预测输出初始化 loc_n = np.where(s < 0)[0] # 大于零索引下标 y_pred[loc_n] = -1 1 2 3 4 接着,从分类错误的样本中选择一个,使用PLA更新权重系数w
w 。
# 第一个分类错误的点 t = np.where(y != y_pred)[0][0] # 更新权重w w += y[t] * X[t, :].reshape((3,1)) 1 2 3 4 迭代更新训练
更新权重w
w是个迭代过程,只要存在分类错误的样本,就不断进行更新,直至所有的样本都分类正确 。(注意,前提是正负样本完全可分)
for i in range(100): s = np.dot(X, w) y_pred = np.ones_like(y) loc_n = np.where(s < 0)[0] y_pred[loc_n] = -1 num_fault = len(np.where(y != y_pred)[0]) print('第%2d次更新,分类错误的点个数:%2d' % (i, num_fault)) if num_fault == 0: break else: t = np.where(y != y_pred)[0][0] w += y[t] * X[t, :].reshape((3,1)) 1 2 3 4 5 6 7 8 9 10 11 12 迭代完毕后,得到更新后的权重系数w
w,绘制此时的分类直线是什么样子 。
# 直线第一个坐标(x1,y1) x1 = -2 y1 = -1 / w[2] * (w[0] * 1 + w[1] * x1) # 直线第二个坐标(x2,y2) x2 = 2 y2 = -1 / w[2] * (w[0] * 1 + w[1] * x2) # 作图 plt.scatter(X[:50, 1], X[:50, 2], color='blue', marker='o', label='Positive') plt.scatter(X[50:, 1], X[50:, 2], color='red', marker='x', label='Negative') plt.plot([x1,x2], [y1,y2],'r') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.legend(loc = 'upper left') plt.show() 1 2 3 4 5 6 7 8 9 10 11 12 13 14

文章插图
其实,PLA算法的效率还算不错,只需要数次更新就能找到一条能将所有样本完全分类正确的分类线 。所以得出结论,对于正负样本线性可分的情况,PLA能够在有限次迭代后得到正确的分类直线 。
总结与疑问
这里导入的数据本身就是线性可分的,可以使用PCA来得到分类直线 。但是,如果数据不是线性可分,即找不到一条直线能够将所有的正负样本完全分类正确,这种情况下,似乎PCA会永远更新迭代下去,却找不到正确的分类线 。
- 看完这些种类学会农药对症下药 农药有哪些种类
- 6个步骤快速学会冲冷泡茶 冷泡茶的正确冲泡方式
- 快速学会如何垂钓鲅鱼 鲐鲅鱼和鲅鱼的区别
- 生姜存放半年以上不坏的方法 生姜的保存方法 学会这招再不怕姜会坏掉啦
- 1分钟学会快速辨析偏正短语 偏正短语怎么判断
- 教你学会看英国尺码 国际码衣服和中国码对照表
- 手把手教你快速学会锁苹果软件 苹果手机怎么锁软件
- 学会这两个方法告别电脑死机 电脑卡住了按什么键
- 生僻字的正确念法,你学会了吗 马騳骉怎么念
- 学会这道红烧鱼媲美厨师 带鱼怎么做好吃又简单红烧带鱼