前言

感知机是《统计学习方法》介绍的第一个算法,它解决的也是最基本的问题,即,面对已经标记的数据,如何根据标记将它们区分开来。

本文将从感知机问题的来源、感知机推导以及感知机的python3代码实现来展开。

1、问题的来源

为什么需要感知机?举个相亲的例子。

  • 你相亲了四个男性,分别为A,B,C,D;
  • 每个男性,从身高和颜值这两个特征进行刻画,身高以米为单位,颜值从0到1打分;
  • 这四个男性的数据为A(1.80,0.6),B(1.76, 0.9),C(1.5, 0.4),D(1.4, 0.7);
  • 这四个男性分别被你标记为 理想(+1),理想(+1),失望(-1),失望(-1)。

将上面的数据展示出来,如下

如果你又收到一个相亲邀约,且对方已经将 颜值-身高 数据 E(1.7, 0.8)发给你,如图1,那么,你将

  • 如何基于经验,也就是上述四个男性的数据
  • 决定是否开始新的相亲(如果理想则相亲,否则不相亲)?

2. 问题的抽象

我们有N个数据,x1x_1x1​,x2x_2x2​,…,xNx_NxN​,它们的标记分别为y1y_1y1​,y2y_2y2​,…,yNy_NyN​。其中,xi∈Rnx_i\in\mathbb{R}^nxi​∈Rn,yi∈{+1,−1}y_i\in\{+1, -1\}yi​∈{+1,−1}.

类似于相亲问题,当遇到一个新的数据xN+1x_{N+1}xN+1​,如何给它标记,或者说,yN+1=?y_{N+1}=?yN+1​=?。

3. 问题的简单化

我们对数据集提出要求,即,要求数据集是线性可分的

  • 直观上说,线性可分的数据集是如图2所示的,总是有一条直线可以将其划分。

    而对另一些数据,如图3所示,则是不可分的,因为找不到这样一条直线,使得它能够分开数据集。
  • 线性可分数据集的数学定义。

考虑数据集
T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)\}T={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)}
其中,xi∈Rnx_i\in\mathbb{R}^nxi​∈Rn,yi∈{+1,−1}y_i\in\{+1, -1\}yi​∈{+1,−1}。

在特征空间Rn\mathbb{R}^nRn里面,如果存在一个超平面
w⋅x+b=0w\cdot x+b=0w⋅x+b=0
使得不等式 yi(w⋅xi+b)>0y_i(w\cdot x_i+b)>0yi​(w⋅xi​+b)>0 恒成立,则称该数据集TTT是线性可分的,否则,数据集TTT线性不可分。

  • 线性可分数据集的解释。

根据定义,线性可分的数据集,总是存在一个超平面 w⋅x+b=0w\cdot x+b=0w⋅x+b=0,使得对于标记为+1,也就是yi=+1y_i=+1yi​=+1的数据,有w⋅xi+b>0w\cdot x_i+b>0w⋅xi​+b>0;对于标记为-1,也就是yi=−1y_i=-1yi​=−1的数据,有w⋅xi+b<0w\cdot x_i+b<0w⋅xi​+b<0。

这里,超平面 w⋅x+b=0w\cdot x+b=0w⋅x+b=0 其实对应着图2中的那条直线。

4. 问题的求解

对于线性可分数据集而言,显然我们需要找到一个特征空间 Rn\mathbb{R}^nRn 中的超平面 w⋅x+b=0w\cdot x+b=0w⋅x+b=0,使得
y=f(x)=sign(w⋅x+b)y=f(x)=sign(w\cdot x+b)y=f(x)=sign(w⋅x+b)
对数据集 T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)\}T={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)} 恒成立。

这样,当来到一个新的数据xN+1x_{N+1}xN+1​时,它的标记可以令为 yN+1=f(xN+1)y_{N+1}=f(x_{N+1})yN+1​=f(xN+1​)。

4.1 损失函数

在进行具体的求解之前,我们当然期望模型 f(x)=sign(w⋅x+b)f(x)=sign(w\cdot x+b)f(x)=sign(w⋅x+b)
对于数据集 TTT 越准确越好,也就是说,希望误分类点越少越好。如果没有误分类点,那么这个模型就是我们要求的。

对于误分类点(xi,yi)(x_i, y_i)(xi​,yi​),模型y=f(xi)y=f(x_i)y=f(xi​)得到的标记与实际标记yiy_iyi​符号相反,即,yi(w⋅xi+b)<0y_i(w\cdot x_i+b)<0yi​(w⋅xi​+b)<0。

记误分类点集合为 MMM,自然的,我们选取如下函数作为目标函数,
min⁡w,bL(w,b)=−∑xi∈Myi(w⋅xi+b)\min\limits_{w, b} L(w, b)=-\sum\limits_{x_i\in M}y_i(w\cdot x_i+b) w,bmin​L(w,b)=−xi​∈M∑​yi​(w⋅xi​+b)

显然,如果集合 MMM 非空,则 L(w,b)>0L(w, b)>0L(w,b)>0恒成立。当我们能够求得一组 (w,b)(w, b)(w,b) 使得 L(w,b)=0L(w, b)=0L(w,b)=0,此时已经没有误分类点,也就是我们要求的结果。

4.2 梯度下降

面对目标函数或者损失函数
min⁡w,bL(w,b)=−∑xi∈Myi(w⋅xi+b)\min\limits_{w, b} L(w, b)=-\sum\limits_{x_i\in M}y_i(w\cdot x_i+b) w,bmin​L(w,b)=−xi​∈M∑​yi​(w⋅xi​+b)
我们可以用梯度下降方法进行求解。对函数 L(w,b)L(w, b)L(w,b) 分别对 www 和 bbb 求偏导,有
∇wL(w,b)=−∑xi∈Myixi\nabla_{w}L(w, b)=-\sum\limits_{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\limits_{x_i\in M}y_i∇b​L(w,b)=−xi​∈M∑​yi​

显然,每次更新 (w,b)(w, b)(w,b) 之后,误分类集 MMM 就会发生变化,因此,为了减少计算,我们可以随机选择一个误分类点 (xi,yi)∈M(x_i, y_i)\in M(xi​,yi​)∈M 进行更新。

并且,梯度方向是函数增加最快的方向,因此,要取最小,我们只需要取梯度的反方向即可。
w←w+ηyixiw\leftarrow w+\eta y_ix_iw←w+ηyi​xi​

b←b+ηyib\leftarrow b+\eta y_ib←b+ηyi​

这里,η\etaη为学习步长。步长过小,会造成算法时间过长;步长过大,可能会导致震荡而无法达到最优值。如图4,图5所示。

5. 感知机算法

通过上面的讨论,我们知道如何更新 (w,b)(w, b)(w,b),以及何时停止算法。

现将算法总结如下:

  • 步骤一:任意挑选初值 w0w_0w0​ 和 b0b_0b0​;
  • 步骤二:遍历整个数据集 TTT,找出第一个误分类点 (xi,yi)(x_i, y_i)(xi​,yi​);
  • 步骤三:更新 www 和 bbb,如下 w←w+ηyixiw\leftarrow w+\eta y_i x_iw←w+ηyi​xi​ b←b+ηyib\leftarrow b+\eta y_ib←b+ηyi​
  • 步骤四:返回步骤二,当找不到误分类点时,终结算法

下面证明上述算法,在给定数据集 TTT 的情况下,总是可以在有限步内获得解 (wopt,bopt)(w_{opt}, b_{opt})(wopt​,bopt​)。

记第k次更新后,参数为(wk,bk)(w_k, b_k)(wk​,bk​)。我们令初始值(w0,b0)=(0,0)(w_0, b_0)=(0, 0)(w0​,b0​)=(0,0)。

我们的证明分为三个步骤:

  1. 证明 ∥(wk,bk)∥2≤kη2R2\left\|(w_k, b_k)\right\|^2\le k\eta^2R^2∥(wk​,bk​)∥2≤kη2R2。实际上,
    ∥(wk,bk)∥2=∥(wk−1+ηyixi,bk−1+ηyi)∥2=∥(wk−1,bk−1)+ηyi(xi,1)∥2≤∥(wk−1,bk−1)∥2+2ηyi(wk−1,bk−1)⋅(xi,1)+∥ηyi(xi,1)∥2\begin{array}{lll} \left\|(w_k, b_k)\right\|^2 &=& \left\|(w_{k-1}+\eta y_i x_i, b_{k-1}+\eta y_i)\right\|^2\\ &=& \left\| (w_{k-1}, b_{k-1})+ \eta y_i( x_i,1) \right\|^2\\ &\le&\left\|(w_{k-1}, b_{k-1})\right\|^2 +2\eta y_i(w_{k-1}, b_{k-1})\cdot( x_i,1)+ \left\|\eta y_i( x_i,1) \right\|^2 \end{array} ∥(wk​,bk​)∥2​==≤​∥(wk−1​+ηyi​xi​,bk−1​+ηyi​)∥2∥(wk−1​,bk−1​)+ηyi​(xi​,1)∥2∥(wk−1​,bk−1​)∥2+2ηyi​(wk−1​,bk−1​)⋅(xi​,1)+∥ηyi​(xi​,1)∥2​

由于(xi,yi)(x_i, y_i)(xi​,yi​)是第k次更新时发现的误分类点,所以满足yi(wk−1,bk−1)⋅(xi,1)≤0y_i(w_{k-1}, b_{k-1})\cdot( x_i,1)\le 0yi​(wk−1​,bk−1​)⋅(xi​,1)≤0

所以可以得到,
∥(wk,bk)∥2≤∥(wk−1,bk−1)∥2+∥ηyi(xi,1)∥2≤∥(wk−1,bk−1)∥2+η2R2\begin{array}{lll} \left\|(w_k, b_k)\right\|^2&\le&\left\|(w_{k-1}, b_{k-1})\right\|^2+\left\|\eta y_i( x_i,1) \right\|^2 \\ &\le&\left\|(w_{k-1}, b_{k-1})\right\|^2+\eta^2R^2 \end{array} ∥(wk​,bk​)∥2​≤≤​∥(wk−1​,bk−1​)∥2+∥ηyi​(xi​,1)∥2∥(wk−1​,bk−1​)∥2+η2R2​

其中,R=max⁡(xi,yi)∈T∥(xi,1)∥R=\max\limits_{(x_i, y_i)\in T}\left\|( x_i,1) \right\|R=(xi​,yi​)∈Tmax​∥(xi​,1)∥。

对上式进行递归,考虑到 (w0,b0)=(0,0)(w_0, b_0)=(0, 0)(w0​,b0​)=(0,0),可以得到
∥(wk,bk)∥2≤kη2R2\left\|(w_k, b_k)\right\|^2\le k\eta^2R^2∥(wk​,bk​)∥2≤kη2R2
2. 证明 (wk,bk)⋅(wopt,bopt)≥kηγ(w_k, b_k)\cdot(w_{opt}, b_{opt})\ge k\eta\gamma(wk​,bk​)⋅(wopt​,bopt​)≥kηγ。实际上,
(wk,bk)⋅(wopt,bopt)=(wk−1+ηyixi,bk−1+ηyi)⋅(wopt,bopt)=wk−1⋅wopt+bk−1bopt+ηyi(wopt⋅xi+bopt)=(wk−1,bk−1)⋅(wopt,bopt)+ηyi(wopt⋅xi+bopt)≥(wk−1,bk−1)⋅(wopt,bopt)+ηγ\begin{array}{lll} (w_k, b_k)\cdot(w_{opt}, b_{opt}) &=& (w_{k-1}+\eta y_i x_i, b_{k-1}+\eta y_i)\cdot(w_{opt}, b_{opt})\\ &=& w_{k-1}\cdot w_{opt}+ b_{k-1}b_{opt} + \eta y_i(w_{opt}\cdot x_i+b_{opt}) \\ &=& (w_{k-1}, b_{k-1})\cdot(w_{opt}, b_{opt}) + \eta y_i(w_{opt}\cdot x_i+b_{opt}) \\ &\ge&(w_{k-1}, b_{k-1})\cdot(w_{opt}, b_{opt}) + \eta \gamma \end{array} (wk​,bk​)⋅(wopt​,bopt​)​===≥​(wk−1​+ηyi​xi​,bk−1​+ηyi​)⋅(wopt​,bopt​)wk−1​⋅wopt​+bk−1​bopt​+ηyi​(wopt​⋅xi​+bopt​)(wk−1​,bk−1​)⋅(wopt​,bopt​)+ηyi​(wopt​⋅xi​+bopt​)(wk−1​,bk−1​)⋅(wopt​,bopt​)+ηγ​

其中,γ=min⁡(xi,yi)∈Tyi(wopt⋅xi+bopt)\gamma=\min\limits_{(x_i, y_i)\in T}y_i(w_{opt}\cdot x_i+b_{opt})γ=(xi​,yi​)∈Tmin​yi​(wopt​⋅xi​+bopt​)。

通过递归,考虑到(w0,b0)=(0,0)(w_0,b_0)=(0, 0)(w0​,b0​)=(0,0),我们有 (wk,bk)⋅(wopt,bopt)≥kηγ(w_k, b_k)\cdot(w_{opt}, b_{opt})\ge k\eta\gamma(wk​,bk​)⋅(wopt​,bopt​)≥kηγ
3. 证明更新次数 kkk 满足 k≤(Rγ)2k\le\left(\frac{R}{\gamma}\right)^2k≤(γR​)2。根据第一步和第二步得到的两个不等式,我们有
kηγ≤(wk,bk)⋅(wopt,bopt)≤∥(wk,bk)∥⋅∥(wopt,bopt)∥=∥(wk,bk)∥≤kηR\begin{array}{lll} k\eta\gamma&\le& (w_k, b_k)\cdot(w_{opt}, b_{opt})\\ &\le&\left\|(w_k, b_k)\right\|\cdot\left\|(w_{opt}, b_{opt})\right\|\\ &=&\left\|(w_k, b_k)\right\|\\ &\le&\sqrt{k} \eta R \end{array} kηγ​≤≤=≤​(wk​,bk​)⋅(wopt​,bopt​)∥(wk​,bk​)∥⋅∥(wopt​,bopt​)∥∥(wk​,bk​)∥k​ηR​

通过简单化简,可以得到 k≤(Rγ)2k\le\left(\frac{R}{\gamma}\right)^2k≤(γR​)2。

这里的等式之所以成立,是因为我们可以选取 (wopt,bopt)(w_{opt}, b_{opt})(wopt​,bopt​) 使得 ∥(wopt,bopt)∥=1\left\|(w_{opt}, b_{opt})\right\|=1∥(wopt​,bopt​)∥=1。这样的选取是简单的。考虑超平面
wopt⋅x+bopt=0w_{opt}\cdot x + b_{opt}=0wopt​⋅x+bopt​=0

由于对 woptw_{opt}wopt​ 和 boptb_{opt}bopt​ 同时乘除一个数,超平面并不变,因此,我们可以同时乘以 1∥(wopt,bopt)∥\frac{1}{\left\|(w_{opt}, b_{opt})\right\|}∥(wopt​,bopt​)∥1​,此时,新的参数 (wopt∥(wopt,bopt)∥,bopt∥(wopt,bopt)∥)(\frac{w_{opt}}{\left\|(w_{opt}, b_{opt})\right\|}, \frac{b_{opt}}{\left\|(w_{opt}, b_{opt})\right\|})(∥(wopt​,bopt​)∥wopt​​,∥(wopt​,bopt​)∥bopt​​) 满足 ∥(wopt∥(wopt,bopt)∥,bopt∥(wopt,bopt)∥)∥=1\left\|(\frac{w_{opt}}{\left\|(w_{opt}, b_{opt})\right\|}, \frac{b_{opt}}{\left\|(w_{opt}, b_{opt})\right\|})\right\|=1∥∥∥∥​(∥(wopt​,bopt​)∥wopt​​,∥(wopt​,bopt​)∥bopt​​)∥∥∥∥​=1

证毕。

在下一篇博客,我们将继续介绍感知机算法的对偶形式,以及python3代码实现。

《统计学习方法》—— 感知机原理、推导以及python3代码实现(一)相关推荐

  1. 统计学习方法|感知机原理剖析及实现

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...

  2. 《统计学习方法》—— 感知机对偶算法、推导以及python3代码实现(二)

    前言 在前一篇博客 <统计学习方法>-- 感知机原理.推导以及python3代码实现(一) 里面,我们介绍了感知机原始形式以及具体推导.在这篇博客里面,我们将继续介绍感知机对偶形式以及py ...

  3. 统计学习方法|最大熵原理剖析及实现

    最大熵的直观理解 为了引出最大熵,我们可能需要举一个所有博客都会举的例子:如果我手里拿着一个骰子,想问你扔下去后是每一面朝上的概率是多少?所有人都能抢答出来是1/6.那么为什么是1/6呢?为什么不是1 ...

  4. 统计学习方法感知机(附简单模型代码)

    1. 感知机模型 输入为实例的特征向量, 输出为实例的类别, 取+1和-1:感知机对应于输入空间中将实例划分为正负两类的分离超平面, 属于判别模型:导入基于误分类的损失函数:利用梯度下降法对损失函数进 ...

  5. 统计学习方法 --- 感知机模型原理及c++实现

    参考博客 Liam Q博客 和李航的<统计学习方法> 感知机学习旨在求出将训练数据集进行线性划分的分类超平面,为此,导入了基于误分类的损失函数,然后利用梯度下降法对损失函数进行极小化,从而 ...

  6. 统计学习方法-感知机概括和补充

    前言 <统计学习方法>第二版出了有段时间了,最近得空可以拜读一下.之前看第一版的时候还是一年多以前,那个时候看的懵懵懂懂的,很吃力.希望这一次能够有所收获,能够收获新的东西,这些文章只是用 ...

  7. 统计学习方法——感知机

    1. 感知机原理 感知机是一个二类分类模型,输入为实例的特征向量,输出为实例的类别,取值为+1和-1. 定义1-1:数据的线性可分性 假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练数 ...

  8. 统计学习方法|决策树原理剖析及实现

    正文 决策树的直观理解 我们在买苹果的时候可以通过苹果的颜色.硬度来判断它的好坏,再决定是否买这个苹果.那么我们也许可以基于之前买苹果的经验做出这样一个分析: 颜色 硬度 香味 结论 0 红色 硬 香 ...

  9. 李航统计学习方法----感知机章节学习笔记以及python代码

    目录 1 感知机模型 2 感知机学习策略 2.1 数据集的线性可分性 2.2 感知机学习策略 3 感知机学习算法 3.1 感知机学习算法的原始形式 3.2 感知机算法的对偶形式 4 感知机算法pyth ...

最新文章

  1. access突然需要登录_早知道早好,微信小程序登录开发需要注意的事项
  2. dae怎么用草图大师打开_当 to C市场饱和,该怎么用场景化打开新市场?
  3. 推荐两本移动开发挺火的书
  4. 吃鱼可以不挑刺了?华中农业大学发现鳊鱼肌间刺表达基因,可培育“无刺鱼”...
  5. corntab定时执行任务
  6. 语音识别系统报告_2018-2024年中国语音识别系统行业市场发展格局及投资价值评估研究报告_中国产业信息网...
  7. 自用shell命令搜集
  8. React antD-Pro 添加函数防抖
  9. php 最小二乘法,XPS复杂谱图的非线性最小二乘法拟合(NLLSF)操作指南
  10. 名编辑电子杂志大师教程 | 文本复制按钮
  11. 免拆破解电信机顶盒TY1208-Z,绝对成功
  12. python开发bi报表_BI报表分析和数据可视化,推荐这三个开源工具!
  13. linux下安装php+apache+mysql集成环境
  14. 计算机电源改造加大功率,最标准的电脑电源功率计算公式 十代酷睿电源搭配建议...
  15. TP-LINK实现远程办公
  16. SAP SD VA01 在销售范围中,订单类型XX没有定义
  17. Linux如何查看显卡版本
  18. 有道云笔记不同步_有道云笔记无法同步如何处理?笔记无法同步解决方法介绍...
  19. android 百度地图3.0定位,百度地图定位功能实现v3_0_0
  20. 串的基本操作及统计字符频度-数据结构类C语言

热门文章

  1. Java 实验5 T1.整数是否为偶数
  2. 八皇后问题(C语言)
  3. JNI编程中数据类型转换的方法
  4. LeetCode for SQL 176. 第二高的薪水 (ifnull limit order by)
  5. markdown编辑技巧
  6. 【Linux】CentOS 7 安装Redis
  7. Spring Boot加载指定属性文件
  8. 【100题】第三十六 比赛淘汰问题(谷歌笔试)
  9. 用并查集合并不同的集合
  10. python-基于UDP通信的套接字,socketserver模块的使用