您的位置:首页 > 编程语言 > Python开发

感知机学习算法初步1

2016-05-20 20:53 459 查看

感知机学习算法初步—1

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

问题定义1

给定一个训练数据集

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

其中,xi∈Rn, yi∈{1,−1}, i=1,2,⋯,N,求参数 w,b,使其为以下损失函数极小化问题的解

minw,bL(w,b)=−∑xi∈Myi(w⋅xi+b)

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

解决思路

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

算法1 (感知机学习算法的原始形式)

输入: T,学习率 η(0<η≤1);

输出: w,b

1. 随机生成初值 w=w0,b=b0

2. 如果存在误分类点,在训练集中选取误分类点 (xk,yk),即 yk∗(w⋅xk+b)≤0

3. w=w+η⋅yk⋅xk 和 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()


实验结果



IDwb误分类点
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
来源于李航《统计学习方法》.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息