李航《统计学习方法》第二章-感知机的python实现

重点:

  1. 感知机是一种二类分类的线性分类模型,属于判别模型。感知机对应于特征空间中的分离超平面 w*x+b=0
  2. 损失函数:误分类点到分离超平面的总距离。
  3. 学习算法:随机梯度下降法。有原始和对偶两种形式。
  4. 当训练数据线性可分时,感知机学习算法存在无穷多解,其解由不同初值和迭代顺序而可能不同。


实现代码:

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')  
    else:  
        plt.plot(p_x[i][0], p_x[i][1], 'bo')  
        
# 初始权重w0,偏置b0,学习率delta=1
w = np.array([1, 0])  
b = 0  
delta = 1  
  
for i in range(1000):  
    choice = -1  
    #选取一个错误分类的点,计算其梯度下降
    for j in range(len(p_x)):  
        if y[j] != np.sign(np.dot(w, p_x[0]) + b):  
            choice = j  
            break  
    if choice == -1:  
        break  
    # 学习权重和偏置
    w = w + delta * y[choice]*p_x[choice]  
    b = b + delta * y[choice]  
  
line_x = [0, 20]  
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)  
plt.savefig("picture.png")  

运行结果:



注意:作为数据驱动的学习算法,数据点太少,可能学习不到最后的分类超平面。


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值