定义和模型

(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&gt;0w\cdot x_i +b &gt;0 w⋅xi​+b>0的yiy_iyi​值为1; 那么w⋅xi+b&lt;0w\cdot x_i +b&lt;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∥1​yi​(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 ∇w​L(w,b)=−xi​∈M∑​yi​xi​
∇bL(w,b)=−∑xi∈Myi\nabla_b L(w,b) = - \sum_{x_i \in M} y_i ∇b​L(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+ηyi​xi​b:=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&lt;η&lt;=1)\eta(0&lt;\eta&lt;=1)η(0<η<=1)
输出:w,b 感知机模型 f(x)=sign(w⋅x+b)f(x) = sign(w\cdot x+b)f(x)=sign(w⋅x+b)

算法步骤:

  1. 选择初始值w0,b0w_0,b_0w0​,b0​
  2. 在训练集中选择数据(xi,yi)(x_i,y_i)(xi​,yi​)
  3. 如果满足yi(w⋅xi+b)&lt;=0y_i(w\cdot x_i+b)&lt;=0yi​(w⋅xi​+b)<=0则是误分类点,那么更新参数。
    w:=w+ηyixib:=b+ηyiw:=w+\eta y_ix_i \\ b:=b+\eta y_i \\ w:=w+ηyi​xi​b:=b+ηyi​
  4. 转到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程序的输出是一样的。

总结

  1. 二分类模型
  2. 线性分类模型
  3. 感知机对应到分离超平面,属于判别模型。
  4. 误分类驱动的损失函数
  5. 随机梯度下降求解最优
  6. 分为原始形式和对偶形式
  7. 是神经网络和支持向量机的基础
  8. 函数是符号函数,称为感知机。 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相关推荐

  1. 基于感知机Perceptron的鸢尾花分类实践

    文章目录 1. 感知机简介 2. 编写感知机实践 2.1 数据处理 2.2 编写感知机类 2.3 多参数组合运行 3. sklearn 感知机实践 4. 附完整代码 本文将使用感知机模型,对鸢尾花进行 ...

  2. 20151227感知机(perceptron)

    1 感知机 1.1 感知机定义 感知机是一个二分类的线性分类模型,其生成一个分离超平面将实例的特征向量,输出为+1,-1.导入基于误分类的损失函数,利用梯度下降法对损失函数极小化,从而求得此超平面,该 ...

  3. 【监督学习】第三课(机器学习,折半算法,专家算法,感知机perceptron,Winnow,在线学习)

    这里是监督学习第三课,长期更新,求关注! 前两课分别讲了监督学习最简单(普遍)的算法,线性回归,以及knn和常见的问题以及解决方式. 对于线性回归的计算复杂度优化由mn两个参数决定.根据他们的相对大小 ...

  4. 机器学习-感知机perceptron

    在机器学习中,感知机(perceptron)是二分类的线性分类模型,属于监督学习算法.输入为实例的特征向量,输出为实例的类别(取+1和-1).感知机对应于输入空间中将实例划分为两类的分离超平面.感知机 ...

  5. 机器学习理论之(13):感知机 Perceptron;多层感知机(神经网络)

    文章目录 表示学习 (representation Learning) 生物神经元 V.S. 人造神经元 感知机 (Perceptron) 训练感知机(Training Perceptron) 激活函 ...

  6. 机器学习笔记 - 什么是感知机(Perceptron)?

    一.什么是感知机? 由Rosenblatt于1958年首次推出的感知机,他提出了基于原始 MCP 神经元的感知机学习规则.可以说是最古老.最简单的ANN算法.在此出版物之后,基于感知机的技术在神经网络 ...

  7. 深度学习感知机(Perceptron)学习笔记

    1. 简介 神经网络由若干神经元组成,这些神经元负责对输入数据进行相似的计算操作.神经网络如下图所示: 图 1 上图中每个圆圈都是一个神经元,每条线表示神经元之间的连接.我们可以看到,上面的神经元被分 ...

  8. 2. 感知机 Perceptron

    1. Perceptron 1.1 模型概述 感知机是一种非常简单的机器学习模型,可以表达为下式 y=w⋅x+by=w\cdot x+by=w⋅x+b 在二维形式上,就是寻找一条线,将平面分成两个部分 ...

  9. 感知机(perceptron):原理、python实现及sklearn.linear_model.Perceptron参数详解

    文章目录 1.感知机模型介绍 2.感知机学习策略 3.感知机学习算法 3.1 原始形式 3.2.1算法收敛性的证明 3.2对偶形式 4.python实现感知机算法 4.1手写感知机算法 4.2 sci ...

最新文章

  1. c3p0对mysql配置_c3p0的常用配置方式
  2. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY9-聚类
  3. python编程入门课 视频教程-Python编程零基础入门课
  4. ssh_config sshd_config 详解
  5. 回顾亚马逊推荐系统20年发展
  6. oracle游标循环定义变量赋值,PL/SQL  循环 数组 游标的使用
  7. HTTP状态码的类别
  8. linux命令数据盘分多个区,pvmove命令 – 移动物理盘区
  9. 我的第一个项目(人力资源管理之报表管理)
  10. 为什么遇见逆水寒服务器维修,《遇见逆水寒》4月23日更新公告
  11. python正则表达式 多个条件的匹配
  12. 利用Karma、Jasmine 做前端单元测试
  13. 自动化学报-英文版-LaTeX模板
  14. PXE工作流程(PXE启动报错处理)
  15. 发票管理小工具(三):PDFMiner vs pdfminer3k vs Pdfminer.six
  16. Java基础-面向对象进阶-多态包final权限修饰符代码块
  17. C++ P1091 合唱队形[DP]
  18. 【转】Maximal Information Coefficient (MIC)最大互信息系数详解与实现
  19. Hedge fund Two Sigma hires Alfred Spector as Chief Technology Officer
  20. 微型计算机的多级存储结构,微型计算机存储系统结构.doc

热门文章

  1. ubuntu下pdf中文乱码解决
  2. AMD黑苹果万能显卡驱动
  3. 弘易信泰,企业级SAAS数据存储技术分析
  4. 在线直线度检测仪的发展
  5. 基于HMM的词性标注方法
  6. 公共基础知识:地震相关知识
  7. 区块链如何解决供应链挑战?
  8. 计算机一级重点知识,计算机一级重点知识.doc
  9. 计算机毕业设计(附源码)python政府机关门禁管理系统
  10. Linux学习记录(二)QEMU安装与Linux内核环境搭建