机器学习 - 感知机(PLA, Perceptron Learning Algorithm)
来源:互联网 发布:陕西天诚软件 怎么样 编辑:程序博客网 时间:2024/06/05 12:46
1. 感知机模型
感知机是二分类的线性分类模型,该模型的输入为实例的特征向量,输出为实例的类别,一般取+1和-1两个值。感知机将实例划分为两类,属于判别模型。
1.1 模型定义
【感知机定义】
假设输入空间(特征空间)是
- 输入
x⊂X 表示实例的特征向量对应于输入空间(特征空间)的点。 - 输出
y⊂Y 表示实例的类别。
从输入空间到输出空间有如下的变换关系:
上述的变换关系就称为感知机。其中,
1.2 模型的几何解释
线性方程:
对应于特征空间
2. 感知机学习策略
假设训练数据集都是线性可分的,感知机学习的目标就是求得一个能够将训练数据集正实例点和负实例点完全正确分开的超平面。为了找到这个超平面,需要确定一个学习策略。定义一个损失函数,转化为求损失函数的极小值。
1. 很容易想到的是:将损失函数定义为误分点的个数,但是这里会有一个问题,因为这样的函数不是连续函数,所以对于参数
2. 损失函数定义为误分类点到超平面
对于误分类的数据
所以可以所有将误分类点点超平面的总距离定义为:
上式中,若不考虑
上式中
3. 感知机学习算法
有了上面的损失函数,问题就转化成了一个优化问题,也就是求解损失函数的最小值。
3.1 感知机学习算法原始形式
【问题】
给定一个训练数据集
其中,
其中,
采用梯度下降法就可以求解上述的问题,具体的求解步骤如下:
1. 任意选取一个超平面
2. 在训练数据集中选取数据
3. 如果
4.继续第2步,直到训练集中没有误分点(线性可分情况)。
3.2 Python实现感知机
import numpy as npimport matplotlib.pyplot as pltclass showPicture: def __init__(self,data,tag,w,b): self.b = b self.w = w plt.figure(1) plt.title('Pic', size=14) plt.xlabel('x', size=14) plt.ylabel('y', size=14) xData = np.linspace(0, 5, 100) yData = self.expression(xData) plt.plot(xData, yData, color='r', label='y1 data') for i in range(len(data)): if tag[i] == 1: plt.scatter(data[i][0],data[i][1],s=50) else: plt.scatter(data[i][0],data[i][1],marker='x',s=50) plt.savefig('pic.png',dpi=75) def expression(self,x): y = (-self.b - self.w[0]*x)/self.w[1] return y def show(self): plt.show()class perceptron: def __init__(self,x,y,eta=1): self.x = x self.y = y self.w = np.zeros((x.shape[1],1)) self.b = 0 self.eta = eta def sign(self,w,b,x): y = np.dot(x,w)+b return int(y) def train(self): flag = True length = len(self.x) while flag: count = 0 for i in range(length): #print self.x[i,:] tmpY = self.sign(self.w,self.b,self.x[i,:]) if tmpY*self.y[i]<=0: tmp = self.y[i] * self.eta * self.x[i,:] tmp = tmp.reshape(self.w.shape) self.w = self.w + tmp self.b = self.b + self.eta * self.y[i] count += 1 #print "ttt\n" if count == 0: flag = False return self.w,self.b#xArray = np.array([3,3,4,3,1,1])xArray = xArray.reshape((3,2))yArray = np.array([1,1,-1])#myPerceptron = perceptron(xArray,yArray,1)w0,b0 = myPerceptron.train()#picture = showPicture(xArray,yArray,w=w0,b=b0)picture.show()
修改初始参数
0 0
- 机器学习 - 感知机(PLA, Perceptron Learning Algorithm)
- 什么是感知器学习算法(Perceptron Learning Algorithm/PLA)?
- 统计学习方法笔记二---感知机(Perceptron Learning Algorithm,PLA)
- PLA(Perceptron Learning Algorithm)--机器学习基石笔记
- 机器学习基石2-2 PLA(Perceptron Learning Algorithm)
- 机器学习基石 2.2 Perceptron Learning Algorithm (PLA)
- 感知机:Perceptron Learning Algorithm
- Digression:The perceptron learning algorithm(感知机学习算法)
- 感知机算法(perceptron learning algorithm)
- 感知机PLA(perceptron)
- 机器学习之Perceptron Learning Algorithm
- 感知器Perceptron Learning Algorithm
- 机器学习-感知机perceptron
- 机器学习-感知机perceptron
- 机器学习-感知机perceptron
- 闲谈:感知器学习算法(The perceptron learning algorithm)
- 感知机学习算法的几何解释(perceptron learning algorithm)
- 感知机perceptron-机器学习ML
- js的笔记11.16
- Android堆栈管理的类ActivityStackManager
- iOS画柱状图,折线图
- Eclipse中LogCat如何打开
- MFC 自定义子线程新建对话框的数据传输问题 -- 以及由此对MFC的一些思考
- 机器学习 - 感知机(PLA, Perceptron Learning Algorithm)
- android:windowSoftInputMode
- 线性代数的本质-20160614总结
- codevs 1003 电话连线
- JAVA 复习
- AngularJS中单选按钮和多选框的动态绑定
- mach_absolute_time () 与 CACurrentMediaTime() 计算时间 间隔 并转为秒
- 使用tornado如何实现请求异步非阻塞?
- 计算机系统原理之程序是怎么运行的