在机器学习中,感知机(perceptron)是二分类的线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得超平面导入了基于误分类的损失函数,利用梯度下降法 对损失函数进行最优化(最优化)。感知机的学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。感知机预测是用学习得到的感知机模型对新的实例进行预测的,因此属于判别模型。感知机由Rosenblatt于1957年提出的,是神经网络支持向量机的基础。

定义

假设输入空间(特征向量)为X⊆RnX⊆R^n,输出空间为Y={-1, +1}。输入x∈Xx∈X表示实例的特征向量,对应于输入空间的点;输出y∈Y表示示例的类别。由输入空间到输出空间的函数为

f(x)=sign(w⋅x+b)

f(x)=sign(w·x + b)

称为感知机。其中,参数w叫做权值向量weight,b称为偏置bias。w⋅xw·x表示w和x的点积

∑i=1mwixi=w1x1+w2x2+...+wnxn

\sum_{i=1}^m w_i x_i= w_1x_1+w_2x_2+...+w_nx_n

sign为符号函数,即

f(x)={+1−1if x>=0else

f(x) = \begin{cases}+1 & \text{if } x >= 0\\-1 & else\end{cases}

在二分类问题中,f(x)f(x)的值(+1或-1)用于分类xx为正样本(+1)还是负样本(-1)。感知机是一种线性分类模型,属于判别模型。我们需要做的就是找到一个最佳的满足w⋅x+b=0w \cdot x + b = 0的w和b值,即分离超平面(separating hyperplane)。如下图,一个线性可分的感知机模型

中间的直线即w⋅x+b=0w \cdot x + b = 0这条直线。

线性分类器的几何表示有:直线、平面、超平面。

学习策略

核心:极小化损失函数。

如果训练集是可分的,感知机的学习目的是求得一个能将训练集正实例点和负实例点完全分开的分离超平面。为了找到这样一个平面(或超平面),即确定感知机模型参数w和b,我们采用的是损失函数,同时并将损失函数极小化。

对于损失函数的选择,我们采用的是误分类点到超平面的距离(可以自己推算一下,这里采用的是几何间距,就是点到直线的距离):

1∥w∥|w∗x0+b|

\dfrac{1}{\parallel w\parallel}|w*x_{0}+b|

其中||w||||w||是L2L2范数。

对于误分类点(xi,yi)(x_i, y_i)来说:

−yi(w∗xi+b)>0

- y_i(w * x_{i}+b)>0

误分类点到超平面的距离为:

−1∥w∥yi(w∗x0+b)

-\dfrac{1}{\parallel w\parallel}y_i(w*x_{0}+b)

那么,所有点到超平面的总距离为:

−1∥w∥∑xiϵMyi|w∗x0+b|

-\dfrac{1}{\parallel w\parallel} \sum_{x_i\epsilon M} y_i|w*x_{0}+b|

不考虑1||w||\frac{1}{||w||},就得到感知机的损失函数了。

L(w,b)=−∑xiϵMyi(w∗x0+b)

L(w,b) = - \sum_{x_i\epsilon M} y_i(w*x_{0}+b)

其中M为误分类的集合。这个损失函数就是感知机学习的经验风险函数

可以看出,随时函数L(w,b)L(w,b)是非负的。如果没有误分类点,则损失函数的值为0,而且误分类点越少,误分类点距离超平面就越近,损失函数值就越小。同时,损失函数L(w,b)L(w, b)是连续可导函数。

学习算法

感知机学习转变成求解损失函数L(w,b)L(w,b)的最优化问题。最优化的方法是随机梯度下降法(stochastic gradient descent),这里采用的就是该方法。关于梯度下降的详细内容,参考wikipedia Gradient descent。下面给出一个简单的梯度下降的可视化图:

上图就是随机梯度下降法一步一步达到最优值的过程,说明一下,梯度下降其实是局部最优。感知机学习算法本身是误分类驱动的,因此我们采用随机梯度下降法。首先,任选一个超平面w0w_0和b0b_0,然后使用梯度下降法不断地极小化目标函数

minw,bL(w,b)=−∑xiϵMyi(w∗x0+b)

min_{w,b} L(w,b) = - \sum_{x_i\epsilon M} y_i(w*x_{0}+b)

极小化过程不是一次使M中所有误分类点的梯度下降,而是一次随机的选取一个误分类点使其梯度下降。使用的规则为 θ:=θ−α∇θℓ(θ)\theta: = \theta - \alpha \nabla_{\theta}\ell(\theta),其中α\alpha是步长,∇θℓ(θ)\nabla_{\theta}\ell(\theta)是梯度。假设误分类点集合MM是固定的,那么损失函数L(w,b) L(w,b)的梯度通过偏导计算:

∂L(w,b)∂w=−∑xiϵMyixi

\frac{\partial L(w,b)}{\partial w} = - \sum_{x_i\epsilon M}y_ix_i

∂L(w,b)∂b=−∑xiϵMyi

\frac{\partial L(w,b)}{\partial b} = - \sum_{x_i\epsilon M}y_i

然后,随机选取一个误分类点,根据上面的规则,计算新的w,bw,b,然后进行更新:

w:=w+ηyixi

w := w + \eta y_ix_i

b:=b+ηyi

b := b + \eta y_i

其中η\eta是步长,大于0小于1,在统计学习中称之为学习率(learning rate)。这样,通过迭代可以期待损失函数L(w,b)L(w,b)不断减小,直至为0.

下面给出一个感知器学习的图,比较形象:

由于上图采取的损失函数不同,所以权值的变化式子有点区别,不过思想都是一样的。

算法描述如下:

算法:感知机学习算法原始形式

输入:T={(x1,y1),(x2,y2)...(xN,yN)}(其中xi∈X=Rn,yi∈Y={-1, +1},i=1,2...N,学习速率为η)
输出:w, b;感知机模型f(x)=sign(w·x+b)
(1) 初始化w0,b0,权值可以初始化为0或一个很小的随机数
(2) 在训练数据集中选取(x_i, y_i)
(3) 如果yi(w xi+b)≤0w = w + ηy_ix_ib = b + ηy_i
(4) 转至(2),直至训练集中没有误分类点

解释:当一个实例点被误分类时,调整w,b,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直至超越该点被正确分类。

伪代码描述:

对于每个w⋅xw\cdot x其实是这样子的(假设x表示的是七维):

yj(t)=f[w(t)⋅xj+b]=f[w1(t)xj,1+w2(t)xj,2+⋯+wn(t)xj,n+b]

y_j(t) = f[\mathbf{w}(t)\cdot\mathbf{x}_j+b] = f[w_1(t)x_{j,1} + w_2(t)x_{j,2} + \dotsb + w_n(t)x_{j,n}+b]

对于输入的每个特征都附加一个权值,然后将相加得到一个和函数f,最后该函数的输出即为输出的y值。

实例

正样本点:x1=(3,3)Tx_1=(3,3)^T,x2=(4,3)Tx_2=(4,3)^T
负样本点:x1=(1,1)Tx_1=(1,1)^T
求感知机模型f(x)=sign(w⋅x+b)f(x)=sign(w\cdot x+b),其中w=(w(1),w(2))T,x=(x(1),x(2))Tw=(w^{(1)},w^{(2)})^T,x=(x^{(1)},x^{(2)})^T

解答思路:根据上面讲解的,写初始化权值w和偏置b,然后一步一步的更新权值,直到所有的点都分正确为止。

解:

(1) 令w0=0,b0=0w_0=0,b_0=0
(2) 随机的取一个点,如x1x_1,计算y1(w0⋅x1+b0)y_1(w_0\cdot x_1+b_0),结果为0,表示未被正确分类,根据下面的式子更新w,bw,b(此例中,我们将学习率η\eta设置为1):

w←w+ηyixi

w \leftarrow w + \eta y_ix_i

b←b+ηyi

b \leftarrow b + \eta y_i

计算得到

w1=w0+ηy1x1=(3,3)T

w_1 = w_0 + \eta y_1x_1=(3,3)^T

b1=b0+ηy1=1

b_1 = b_0 + \eta y_1=1

得到一个模型

w1⋅x+b1=3x(1)+3x(2)+1

w_1\cdot x+b_1 = 3x_{(1)}+3x^{(2)}+1

(3)接着继续,计算各个点是否分错,通过计算得到,x1和x2x_1和x_2两个点,yi(w0⋅xi+b1)y_i(w_0\cdot x_i+b_1)都大于0,所以是被正确分类的点,无需修改权值w和bias项;而对于x3x_3通过计算得到y3(w0⋅x3+b1)<0y_3(w_0\cdot x_3+b_1),误分了,所以修改权值:

w2=w1+y3x3=(2,2)T

w_2 = w_1 + y_3x_3=(2,2)^T

b2=b1+y3=0

b_2 = b_1 + y_3=0

得到线性模型:

w2x+b2=2x(1)+2x(2)

w_2x+b_2 = 2x^{(1)}+2x^{(2)}

一次下去,知道所有的点都有yi(w0⋅xi+b1)>0y_i(w_0\cdot x_i+b_1)>0即可

……
……
……

最后求得

w7=(1,1)T,b7=−3

w_7 = (1,1)^T,b_7=-3

所以感知机模型为:

f(x)=sign(x(1)+x(2)−3)

f(x) = sign(x_{(1)}+x^{(2)}-3)

即我们所求的感知机模型。

小结

感知器Perceptron在机器学习当中是相当重要的基础,理解好感知器对后面的SVM和神经网络都有很大的帮助。事实上感知器学习就是一个损失函数的最优化问题,这里采用的是随机梯度下降法来优化。

好吧,对于感知机的介绍,就到此为止!在复习的过程中顺便做下笔记,搜搜资料,整理整理,也算是给自己一个交代吧。希望本文章能对大家能有点帮助。

References

[1] 统计学习方法, 李航 著
[2] Wikiwand之Perceptron http://www.wikiwand.com/en/Perceptron
[3] Wikipedia https://en.wikipedia.org/wiki/Machine_learning


本栏目机器学习持续更新中,欢迎来访:Dream_Angel_Z 博客
新浪微博: @拾毅者

机器学习-感知机perceptron相关推荐

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

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

  2. 机器学习---感知机(Machine Learning Perceptron)

    感知机(perceptron)是一种线性分类算法,通常用于二分类问题.感知机由Rosenblatt在1957年提出,是神经网络和支持向量机的基础.通过修改损失函数,它可以发展成支持向量机:通过多层堆叠 ...

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

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

  4. 机器学习:感知机(Perceptron)从理论到代码

    机器学习:感知机算法 数据定义 模型介绍 优化方法 局限性 数据定义 假设DataSet∑i=1N(xi,yi)\sum_{i=1}^{N}(x_i,y_i)i=1∑N​(xi​,yi​),其中X∈R ...

  5. 2. 感知机 Perceptron

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

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

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

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

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

  8. 20151227感知机(perceptron)

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

  9. 机器学习 --- 感知机

    第1关:感知机 - 西瓜好坏自动识别 任务描述 本关任务:使用感知机算法建立一个模型,并根据感知机算法流程对模型进行训练,得到一个能够准确对西瓜好坏进行识别的模型. 相关知识 为了完成本关任务,你需要 ...

最新文章

  1. 中画图title函数_MATLAB-基础画图meshgrid
  2. Delphi XE 10.2.3使用CEF4Delphi取网页元素时碰到nbsp;变问号?的处理
  3. [BTS]6912,5641,5773,5410错误处理!
  4. 【Matlab】找到矩阵中每个连通域的最小值
  5. 分析nat穿越(未完成)
  6. 阿里云专家穆轩的《杭州九年程序员之“修炼”手册》
  7. smartfoxserver扩展里面过滤聊天的不合法字符
  8. 静止的人如何看待高速运动的球?
  9. 不一样的假期,到底哪里不一样?
  10. 正确认识 Vista 激活期限
  11. 不想业务被中断?快来解锁华为云RDS for MySQL新特性
  12. java编程如何 实现8开立方等于2_Java之Math类使用小结
  13. SpringBoot继承LogStash实现日志收集
  14. 【51Nod1773】A国的贸易 解题报告
  15. 卷积神经网络(CNN)之卷积层的实现
  16. 《你的灯亮着吗》读书笔记2
  17. live2d_vue-live2d 看板娘
  18. jsonrpc4j android,jsonrpc-4j代码解析
  19. idea,as git插件基本操作(插件回滚,撤销,恢复上一个版本)
  20. 通过SMART法则进行网站策划

热门文章

  1. 无线路由器和WiFi共享精灵你更爱哪个
  2. 小程序购物车[实现加减计算金额以及数量]
  3. 百思买Best Buy Drop Ship EDI SaaS 解决方案——LIP操作详解
  4. MS-TCN lipreading运行中的问题
  5. 【GAOPS038】数据链路层PPP和HDLC协议
  6. 是在人和计算机对话过程中,( )是在人和计算机对话过程中以人机交换方式辅助决策者探求可能的方案,生成管理者决策所需要的信息...
  7. 中科院自动化所-模式识别国家重点实验室Topic推荐-AMiner
  8. 20171119 - 2.01x - Week 4
  9. 抱薪者说 | Heisenberg:离开舒适区,与广阔世界过招
  10. 安徽省省教育厅计算机水平考试,安徽省计算机水平考试历年笔试真题