感知机学习算法初步—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)。首先,任意选取一个超平面
算法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()
实验结果
ID | w | b | 误分类点 |
---|---|---|---|
0 | [0,0] | 0 | 0 |
1 | [3,3] | 1 | 2 |
2 | [2,2] | 0 | 2 |
3 | [1 1] | -1 | 2 |
4 | [0,0] | -2 | 0 |
5 | [3,3] | -1 | 2 |
6 | [2,2] | -2 | 2 |
7 | [1,1] | -3 | |
8 | [1,1] | -3 |
Talking is cheap, show me the code! YOU KNOW!!!
吴小同
2016-5-20
- 来源于李航《统计学习方法》. ↩