0


感知机算法之Python代码实现

感知机算法之Python代码实现

关注我,你不会吃亏~

在这里插入图片描述

1.算法简介

感知机学习算法原始形式:
输入:训练集T
输出:w,b
感知机模型:f(x)=sign(w·x+b)
算法步骤:
1.初始化参数w0,b0
2.在训练集中选取数据(xi,yi)
3.如果yi(w·xi+b)<=0:
w=w+l·yi·xi # l为学习率
b=b+l·yi
4.转至2,直至训练集中没有误分类点。

学习算法的直观解释:
当一个实例点被误分类,即位于分离超平面的错误一侧时,则调整w和b的值,使得分离超平面向该错误分类点
的一侧移动,以减少该错误分类点与超平面间的距离,直至超平面越过该误分类点使其被正确分类。
在这里插入图片描述

2.代码实现

  1. import numpy as np
  2. # 训练集
  3. train_set = np.array([[3, 3, 1],
  4. [4, 3, 1],
  5. [1, 1, -1]])
  6. w = np.array([0, 0]) # 权重参数
  7. b = 0 #偏置
  8. l = 1 # 学习率
  9. # 更新该样本点参数
  10. def update(item):
  11. global w, b # 全局变量(便于修改全局变量w和b)
  12. # 计算w和b ——w += l * yi * xi,b += l * yi
  13. w += l * item[-1] * item[:-1]
  14. b += l * item[-1]
  15. # 打印结果
  16. print("w={}, b={}".format(w, b))
  17. # 检查是否有错误分类点
  18. def check():
  19. # 默认无错误分类点
  20. flag = False
  21. # 检查所有样本点
  22. # 记录检查结果
  23. res = 0
  24. for item in train_set:
  25. # 计算w*xi+b
  26. res = (w * item[:-1]).sum() + b
  27. # 计算yi(w*xi+b)
  28. res *= item[-1]
  29. # 判断是否错误分类
  30. if res <= 0:
  31. # 错误分类
  32. flag = True
  33. # 更新该样本点参数
  34. update(item)
  35. return flag
  36. if __name__ == "__main__":
  37. flag = False
  38. for i in range(100):
  39. # 无错误分类点,结束迭代
  40. if not check(): # check返回False,表示无错误分类点
  41. flag = True
  42. break
  43. # 有错误分类点,需继续迭代
  44. if flag:
  45. print("100次迭代,可以完成正确分类!")
  46. else:
  47. print("100次迭代,不可完成正确分类!")

3.代码结果

  1. w=[3 3], b=1
  2. w=[2 2], b=0
  3. w=[1 1], b=-1
  4. w=[0 0], b=-2
  5. w=[3 3], b=-1
  6. w=[2 2], b=-2
  7. w=[1 1], b=-3
  8. 100次迭代,可以完成正确分类!

4.参考

李航——统计学习方法
林轩石——机器学习基石
知乎——《浅析感知机二》

在这里插入图片描述

谢谢观看, 欢迎交流、支持点赞和收藏哦 ~


本文转载自: https://blog.csdn.net/qq_44714448/article/details/125953251
版权归原作者 学习砖家 所有, 如有侵权,请联系我们删除。

“感知机算法之Python代码实现”的评论:

还没有评论