《统计学习方法》—— 感知机原理、推导以及python3代码实现(一)
前言
感知机是《统计学习方法》介绍的第一个算法,它解决的也是最基本的问题,即,面对已经标记的数据,如何根据标记将它们区分开来。
本文将从感知机问题的来源、感知机推导以及感知机的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,自然的,我们选取如下函数作为目标函数,
minw,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,bminL(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 梯度下降
面对目标函数或者损失函数
minw,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,bminL(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∇wL(w,b)=−xi∈M∑yixi
∇bL(w,b)=−∑xi∈Myi\nabla_{b}L(w, b)=-\sum\limits_{x_i\in M}y_i∇bL(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+ηyixi
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+ηyixi 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)。
我们的证明分为三个步骤:
- 证明 ∥(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+η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
由于(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+η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)+ηγ
其中,γ=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)∈Tminyi(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代码实现(一)相关推荐
- 统计学习方法|感知机原理剖析及实现
欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...
- 《统计学习方法》—— 感知机对偶算法、推导以及python3代码实现(二)
前言 在前一篇博客 <统计学习方法>-- 感知机原理.推导以及python3代码实现(一) 里面,我们介绍了感知机原始形式以及具体推导.在这篇博客里面,我们将继续介绍感知机对偶形式以及py ...
- 统计学习方法|最大熵原理剖析及实现
最大熵的直观理解 为了引出最大熵,我们可能需要举一个所有博客都会举的例子:如果我手里拿着一个骰子,想问你扔下去后是每一面朝上的概率是多少?所有人都能抢答出来是1/6.那么为什么是1/6呢?为什么不是1 ...
- 统计学习方法感知机(附简单模型代码)
1. 感知机模型 输入为实例的特征向量, 输出为实例的类别, 取+1和-1:感知机对应于输入空间中将实例划分为正负两类的分离超平面, 属于判别模型:导入基于误分类的损失函数:利用梯度下降法对损失函数进 ...
- 统计学习方法 --- 感知机模型原理及c++实现
参考博客 Liam Q博客 和李航的<统计学习方法> 感知机学习旨在求出将训练数据集进行线性划分的分类超平面,为此,导入了基于误分类的损失函数,然后利用梯度下降法对损失函数进行极小化,从而 ...
- 统计学习方法-感知机概括和补充
前言 <统计学习方法>第二版出了有段时间了,最近得空可以拜读一下.之前看第一版的时候还是一年多以前,那个时候看的懵懵懂懂的,很吃力.希望这一次能够有所收获,能够收获新的东西,这些文章只是用 ...
- 统计学习方法——感知机
1. 感知机原理 感知机是一个二类分类模型,输入为实例的特征向量,输出为实例的类别,取值为+1和-1. 定义1-1:数据的线性可分性 假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练数 ...
- 统计学习方法|决策树原理剖析及实现
正文 决策树的直观理解 我们在买苹果的时候可以通过苹果的颜色.硬度来判断它的好坏,再决定是否买这个苹果.那么我们也许可以基于之前买苹果的经验做出这样一个分析: 颜色 硬度 香味 结论 0 红色 硬 香 ...
- 李航统计学习方法----感知机章节学习笔记以及python代码
目录 1 感知机模型 2 感知机学习策略 2.1 数据集的线性可分性 2.2 感知机学习策略 3 感知机学习算法 3.1 感知机学习算法的原始形式 3.2 感知机算法的对偶形式 4 感知机算法pyth ...
最新文章
- access突然需要登录_早知道早好,微信小程序登录开发需要注意的事项
- dae怎么用草图大师打开_当 to C市场饱和,该怎么用场景化打开新市场?
- 推荐两本移动开发挺火的书
- 吃鱼可以不挑刺了?华中农业大学发现鳊鱼肌间刺表达基因,可培育“无刺鱼”...
- corntab定时执行任务
- 语音识别系统报告_2018-2024年中国语音识别系统行业市场发展格局及投资价值评估研究报告_中国产业信息网...
- 自用shell命令搜集
- React antD-Pro 添加函数防抖
- php 最小二乘法,XPS复杂谱图的非线性最小二乘法拟合(NLLSF)操作指南
- 名编辑电子杂志大师教程 | 文本复制按钮
- 免拆破解电信机顶盒TY1208-Z,绝对成功
- python开发bi报表_BI报表分析和数据可视化,推荐这三个开源工具!
- linux下安装php+apache+mysql集成环境
- 计算机电源改造加大功率,最标准的电脑电源功率计算公式 十代酷睿电源搭配建议...
- TP-LINK实现远程办公
- SAP SD VA01 在销售范围中,订单类型XX没有定义
- Linux如何查看显卡版本
- 有道云笔记不同步_有道云笔记无法同步如何处理?笔记无法同步解决方法介绍...
- android 百度地图3.0定位,百度地图定位功能实现v3_0_0
- 串的基本操作及统计字符频度-数据结构类C语言