感知机学习算法初步1

感知机学习算法初步—1

本博文简单介绍了感知机学习算法,给出了解决思路,算法,实验代码,以及实验结果等等。

问题定义1

给定一个训练数据集

T={(x1,y1),(x2,y2,,(xN,yN))}

其中, xiRn , yi{1,1} , i=1,2,,N ,求参数 w,b ,使其为以下损失函数极小化问题的解
minw,bL(w,b)=xiMyi(wxi+b)

其中, M 为误分类点的集合。

解决思路

感知机学习算法是无分类驱动的,具体采用随机梯度下降法(stochastic gradient descent)。首先,任意选取一个超平面 w0,b0,然后采用梯度下降法不断地极小化目标函数。极小化过程中不是一次使 M 中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。


算法1 (感知机学习算法的原始形式)
输入: T,学习率 η(0<η1)
输出: w,b
1. 随机生成初值 w=w0,b=b0
2. 如果存在误分类点,在训练集中选取误分类点 (xk,yk) ,即 yk(wxk+b)0
3. w=w+ηykxk b=b+ηyk
4. 跳转到2,直至训练集中没有误分类点


实验分析

我们以《统计学习方法》中的例2.1作为示例,来验证我们的代码正确与否,Python代码如下:

import numpy as np
import matplotlib.pyplot as plt

x = [[3,3],[4,3],[1,1]]
y = [1,1,-1]

w = np.zeros(2)
b = 0

while 1:
    for i in range(3):
        flag = 0
        if (np.dot(w,x[i])+b)*y[i] <= 0:
            w = np.add(w,np.multiply(x[i],y[i]))
            b = b+y[i]
            print i,w,b
            flag = 1
            break

    if flag == 0:
        break


print w,b

s1 = np.linspace(0,5,100)    
s2 = (-1*b-w[0]*s1)/w[1] 

plt.plot([3,4],[3,3],'*',[1],[1],'o',s1,s2,'r-')    
plt.show()

实验结果
实验结果

ID w b误分类点
0[0,0]00
1[3,3]12
2[2,2]02
3[1 1]-12
4[0,0]-20
5[3,3]-12
6[2,2]-22
7[1,1]-3
8[1,1]-3

Talking is cheap, show me the code! YOU KNOW!!!

吴小同
2016-5-20


  1. 来源于李航《统计学习方法》.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值