感知机学习算法初步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()
实验结果
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 |
吴小同
2016-5-20
来源于李航《统计学习方法》. ↩
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法