感知机perceptron
定义和模型
(1)f(x)=sign(w⋅x+b)f(x) = sign(w \cdot x+b) \tag{1}f(x)=sign(w⋅x+b)(1)
其中, w和b是模型参数, w向量叫做权重向量; b叫偏置(bias)向量。
公式1就是感知机,是线性分类模型(liner classifier model),属于判别模型。
几何解释
超平面:(2)w⋅x+b=0w\cdot x +b =0 \tag{2}w⋅x+b=0(2)
也称为分离超平面;其实和二维空间的二维分割线一个作用。在多维空间中,则称为超平面,www是法向量,也就是平面上变化最快的方向,可以参考梯度.
学习目标
我们的目标是通过训练实例,学习参数w,b,从而找到分离超平面,得到模型,公式1,从而预测新的实例。大部分的学习都是学习参数,从而确定假设空间,也就是f。
学习策略
极小化误分类点到分离超平面的距离。 也就是说,错误实例点到分离平面的距离之和尽量小。
损失函数
如果存在超平面
w⋅x+b=0w\cdot x +b =0 w⋅x+b=0
那么正确的分类的实例,w⋅xi+b>0w\cdot x_i +b >0 w⋅xi+b>0的yiy_iyi值为1; 那么w⋅xi+b<0w\cdot x_i +b<0 w⋅xi+b<0的yiy_iyi的值则为-1。
任意一个点(xi,yi)(x_i,y_i)(xi,yi)到超平面的距离为:
∣w⋅xi+b∣∥W∥\frac{|w\cdot x_i+b|}{\lVert W \lVert}∥W∥∣w⋅xi+b∣
补充:
点到平面的距离公式
d=∣Ax0+By0+CZ0+D∣A2+B2+C2d = \frac{|Ax_0+By_0+CZ_0+D|}{\sqrt{A^2+B^2+C^2}} d=A2+B2+C2∣Ax0+By0+CZ0+D∣
公式描述:公式中的平面方程为Ax+By+Cz+D=0,点P的坐标(x0,y0,z0),d为点P到平面的距离。
技巧:由于是误分类点,根据f>0,y=-1; f<0,y=1这个特点,可以得到分类点xix_ixi到超平面的距离公式统一为:
−1∥W∥yi(w⋅xi+b)-\frac{1}{\lVert W \lVert}y_i(w\cdot x_i+b) −∥W∥1yi(w⋅xi+b)
不考虑固定的法向量w的L2范数,那么我们的优化目标即损失函数为:
(3)Loss(w,b)=−∑xi∈Myi(w⋅xi+b)Loss(w,b) =- \sum_{x_i \in M}^{}y_i(w\cdot x_i+b) \tag{3} Loss(w,b)=−xi∈M∑yi(w⋅xi+b)(3)
其中M为误分类点集合。总结一句:错误样例驱动的训练模型。
学习算法
采用随机梯度下降法,对w和b分别求偏导得到梯度:
∇wL(w,b)=−∑xi∈Myixi\nabla_w L(w,b) = - \sum_{x_i \in M} y_ix_i ∇wL(w,b)=−xi∈M∑yixi
∇bL(w,b)=−∑xi∈Myi\nabla_b L(w,b) = - \sum_{x_i \in M} y_i ∇bL(w,b)=−xi∈M∑yi
有了梯度,则参数按照负梯度的方向变化,则目标函数会不断减小。
针对一个误分类点(xi,yi)(x_i, y_i)(xi,yi),从而得到更新公式:
(4)w:=w+ηyixib:=b+ηyiw:=w+\eta y_ix_i \\ b:=b+\eta y_i \\ \tag{4} w:=w+ηyixib:=b+ηyi(4)
根据公式4,则找到了参数的迭代公式。
利用一个实例进行更新参数,是随机梯度下降法。
对偶形式
算法
输入:训练数据集T=(x1,y1),(x2,y2),...,(xN,yN),y∈{−1,+1}T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}, y \in \{{-1,+1}\}T=(x1,y1),(x2,y2),...,(xN,yN),y∈{−1,+1}, 学习率η(0<η<=1)\eta(0<\eta<=1)η(0<η<=1)
输出:w,b 感知机模型 f(x)=sign(w⋅x+b)f(x) = sign(w\cdot x+b)f(x)=sign(w⋅x+b)
算法步骤:
- 选择初始值w0,b0w_0,b_0w0,b0
- 在训练集中选择数据(xi,yi)(x_i,y_i)(xi,yi)
- 如果满足yi(w⋅xi+b)<=0y_i(w\cdot x_i+b)<=0yi(w⋅xi+b)<=0则是误分类点,那么更新参数。
w:=w+ηyixib:=b+ηyiw:=w+\eta y_ix_i \\ b:=b+\eta y_i \\ w:=w+ηyixib:=b+ηyi - 转到2直到不存在误分类点。
解释:如果存在误分类点,则通过更新w,b来满足误分类点,直到不存在误分类点。
举例和代码
package algorithm;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** 用二维特征演示感知机的计算过程例子。***/
public class Perceptron {//feature, label// w:=w+alpha * xiyi// b:= alpha * yipublic static void main(String args[]){List<Instance> data = new ArrayList<Instance>();data.add(new Instance(new int[]{3,3},1));data.add(new Instance(new int[]{4,3},1));data.add(new Instance(new int[]{1,1},-1));Perceptron pt = new Perceptron();pt.fit(data);}public void fit(List<Instance>data){int iteration = 1;boolean allfit = true;while(allfit){allfit = false;for(Instance it: data){int distanceToPlane = 0;for(int i=0;i<w.length;i++){distanceToPlane+=(w[i]*it.feature[i]);}distanceToPlane+=b;distanceToPlane*=it.label;if(distanceToPlane<=0){allfit = true;for(int i=0;i<w.length;i++){w[i]+=it.label*it.feature[i];}b+=it.label;System.out.println("迭代次数:"+iteration+++",误分类点:"+it.label+","+Arrays.toString(it.feature)+",w:"+Arrays.toString(w)+",b:"+b);System.out.println();}}}}private int w[] = new int[2];private int b = 0;}
class Instance
{//模拟二维的特征向量int[] feature = new int[2];int label;Instance(int[]feature, int label){this.feature = feature;this.label = label;}
}
计算的输入实例是:
data.add(new Instance(new int[]{3,3},1));
data.add(new Instance(new int[]{4,3},1));
data.add(new Instance(new int[]{1,1},-1));
三个实例,2个正例,一个反例。
结果是:
迭代次数:1,误分类点:1,[3, 3],w:[3, 3],b:1迭代次数:2,误分类点:-1,[1, 1],w:[2, 2],b:0迭代次数:3,误分类点:-1,[1, 1],w:[1, 1],b:-1迭代次数:4,误分类点:-1,[1, 1],w:[0, 0],b:-2迭代次数:5,误分类点:1,[3, 3],w:[3, 3],b:-1迭代次数:6,误分类点:-1,[1, 1],w:[2, 2],b:-2迭代次数:7,误分类点:-1,[1, 1],w:[1, 1],b:-3
python-sklearn
from sklearn.linear_model import Perceptronx_data_train = [[3.0,3.0],[4.0,3.0],[1.0,1.0]]
y_data_train = [1,1,-1]
#定义感知机
clf = Perceptron(fit_intercept=True,n_iter=30,shuffle=False)
#使用训练数据进行训练
clf.fit(x_data_train,y_data_train)
#得到训练结果,权重矩阵W
print(clf.coef_)
#输出为:[[ 1. 1.]]#超平面的截距b,此处输出为:[-3.]
print(clf.intercept_)
输出的结果和java程序的输出是一样的。
总结
- 二分类模型
- 线性分类模型
- 感知机对应到分离超平面,属于判别模型。
- 误分类驱动的损失函数
- 随机梯度下降求解最优
- 分为原始形式和对偶形式
- 是神经网络和支持向量机的基础
- 函数是符号函数,称为感知机。 f(x)=sign(w⋅x+b)f(x) = sign(w \cdot x+b)f(x)=sign(w⋅x+b)
参考文献
https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_plane
https://zhuanlan.zhihu.com/p/27152953
统计学习方法 李航
感知机perceptron相关推荐
- 基于感知机Perceptron的鸢尾花分类实践
文章目录 1. 感知机简介 2. 编写感知机实践 2.1 数据处理 2.2 编写感知机类 2.3 多参数组合运行 3. sklearn 感知机实践 4. 附完整代码 本文将使用感知机模型,对鸢尾花进行 ...
- 20151227感知机(perceptron)
1 感知机 1.1 感知机定义 感知机是一个二分类的线性分类模型,其生成一个分离超平面将实例的特征向量,输出为+1,-1.导入基于误分类的损失函数,利用梯度下降法对损失函数极小化,从而求得此超平面,该 ...
- 【监督学习】第三课(机器学习,折半算法,专家算法,感知机perceptron,Winnow,在线学习)
这里是监督学习第三课,长期更新,求关注! 前两课分别讲了监督学习最简单(普遍)的算法,线性回归,以及knn和常见的问题以及解决方式. 对于线性回归的计算复杂度优化由mn两个参数决定.根据他们的相对大小 ...
- 机器学习-感知机perceptron
在机器学习中,感知机(perceptron)是二分类的线性分类模型,属于监督学习算法.输入为实例的特征向量,输出为实例的类别(取+1和-1).感知机对应于输入空间中将实例划分为两类的分离超平面.感知机 ...
- 机器学习理论之(13):感知机 Perceptron;多层感知机(神经网络)
文章目录 表示学习 (representation Learning) 生物神经元 V.S. 人造神经元 感知机 (Perceptron) 训练感知机(Training Perceptron) 激活函 ...
- 机器学习笔记 - 什么是感知机(Perceptron)?
一.什么是感知机? 由Rosenblatt于1958年首次推出的感知机,他提出了基于原始 MCP 神经元的感知机学习规则.可以说是最古老.最简单的ANN算法.在此出版物之后,基于感知机的技术在神经网络 ...
- 深度学习感知机(Perceptron)学习笔记
1. 简介 神经网络由若干神经元组成,这些神经元负责对输入数据进行相似的计算操作.神经网络如下图所示: 图 1 上图中每个圆圈都是一个神经元,每条线表示神经元之间的连接.我们可以看到,上面的神经元被分 ...
- 2. 感知机 Perceptron
1. Perceptron 1.1 模型概述 感知机是一种非常简单的机器学习模型,可以表达为下式 y=w⋅x+by=w\cdot x+by=w⋅x+b 在二维形式上,就是寻找一条线,将平面分成两个部分 ...
- 感知机(perceptron):原理、python实现及sklearn.linear_model.Perceptron参数详解
文章目录 1.感知机模型介绍 2.感知机学习策略 3.感知机学习算法 3.1 原始形式 3.2.1算法收敛性的证明 3.2对偶形式 4.python实现感知机算法 4.1手写感知机算法 4.2 sci ...
最新文章
- c3p0对mysql配置_c3p0的常用配置方式
- 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY9-聚类
- python编程入门课 视频教程-Python编程零基础入门课
- ssh_config sshd_config 详解
- 回顾亚马逊推荐系统20年发展
- oracle游标循环定义变量赋值,PL/SQL 循环 数组 游标的使用
- HTTP状态码的类别
- linux命令数据盘分多个区,pvmove命令 – 移动物理盘区
- 我的第一个项目(人力资源管理之报表管理)
- 为什么遇见逆水寒服务器维修,《遇见逆水寒》4月23日更新公告
- python正则表达式 多个条件的匹配
- 利用Karma、Jasmine 做前端单元测试
- 自动化学报-英文版-LaTeX模板
- PXE工作流程(PXE启动报错处理)
- 发票管理小工具(三):PDFMiner vs pdfminer3k vs Pdfminer.six
- Java基础-面向对象进阶-多态包final权限修饰符代码块
- C++ P1091 合唱队形[DP]
- 【转】Maximal Information Coefficient (MIC)最大互信息系数详解与实现
- Hedge fund Two Sigma hires Alfred Spector as Chief Technology Officer
- 微型计算机的多级存储结构,微型计算机存储系统结构.doc