《统计学习方法》—— 感知机原理、推导以及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个数据, x 1 x_1 x1 x 2 x_2 x2,…, x N x_N xN,它们的标记分别为 y 1 y_1 y1 y 2 y_2 y2,…, y N y_N yN。其中, x i ∈ R n x_i\in\mathbb{R}^n xiRn y i ∈ { + 1 , − 1 } y_i\in\{+1, -1\} yi{+1,1}.

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

3. 问题的简单化

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

  • 直观上说,线性可分的数据集是如图2所示的,总是有一条直线可以将其划分。
    在这里插入图片描述
    而对另一些数据,如图3所示,则是不可分的,因为找不到这样一条直线,使得它能够分开数据集。
    在这里插入图片描述
  • 线性可分数据集的数学定义。

考虑数据集
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)}
其中, x i ∈ R n x_i\in\mathbb{R}^n xiRn y i ∈ { + 1 , − 1 } y_i\in\{+1, -1\} yi{+1,1}

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

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

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

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

4. 问题的求解

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

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

4.1 损失函数

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

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

记误分类点集合为 M M M,自然的,我们选取如下函数作为目标函数,
min ⁡ w , b L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + 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)=xiMyi(wxi+b)

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

4.2 梯度下降

面对目标函数或者损失函数
min ⁡ w , b L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + 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)=xiMyi(wxi+b)
我们可以用梯度下降方法进行求解。对函数 L ( w , b ) L(w, b) L(w,b) 分别对 w w w b b b 求偏导,有
∇ w L ( w , b ) = − ∑ x i ∈ M y i x i \nabla_{w}L(w, b)=-\sum\limits_{x_i\in M}y_ix_i wL(w,b)=xiMyixi

∇ b L ( w , b ) = − ∑ x i ∈ M y i \nabla_{b}L(w, b)=-\sum\limits_{x_i\in M}y_i bL(w,b)=xiMyi

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

并且,梯度方向是函数增加最快的方向,因此,要取最小,我们只需要取梯度的反方向即可。
w ← w + η y i x i w\leftarrow w+\eta y_ix_i ww+ηyixi

b ← b + η y i b\leftarrow b+\eta y_i bb+ηyi

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

5. 感知机算法

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

现将算法总结如下:

  • 步骤一:任意挑选初值 w 0 w_0 w0 b 0 b_0 b0
  • 步骤二:遍历整个数据集 T T T,找出第一个误分类点 ( x i , y i ) (x_i, y_i) (xi,yi)
  • 步骤三:更新 w w w b b b,如下 w ← w + η y i x i w\leftarrow w+\eta y_i x_i ww+ηyixi b ← b + η y i b\leftarrow b+\eta y_i bb+ηyi
  • 步骤四:返回步骤二,当找不到误分类点时,终结算法

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

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

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

  1. 证明 ∥ ( w k , b k ) ∥ 2 ≤ k η 2 R 2 \left\|(w_k, b_k)\right\|^2\le k\eta^2R^2 (wk,bk)2kη2R2。实际上,
    ∥ ( w k , b k ) ∥ 2 = ∥ ( w k − 1 + η y i x i , b k − 1 + η y i ) ∥ 2 = ∥ ( w k − 1 , b k − 1 ) + η y i ( x i , 1 ) ∥ 2 ≤ ∥ ( w k − 1 , b k − 1 ) ∥ 2 + 2 η y i ( w k − 1 , b k − 1 ) ⋅ ( x i , 1 ) + ∥ η y i ( x i , 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==(wk1+ηyixi,bk1+ηyi)2(wk1,bk1)+ηyi(xi1)2(wk1,bk1)2+2ηyi(wk1,bk1)(xi1)+ηyi(xi1)2

由于 ( x i , y i ) (x_i, y_i) (xi,yi)是第k次更新时发现的误分类点,所以满足 y i ( w k − 1 , b k − 1 ) ⋅ ( x i , 1 ) ≤ 0 y_i(w_{k-1}, b_{k-1})\cdot( x_i,1)\le 0 yi(wk1,bk1)(xi1)0

所以可以得到,
∥ ( w k , b k ) ∥ 2 ≤ ∥ ( w k − 1 , b k − 1 ) ∥ 2 + ∥ η y i ( x i , 1 ) ∥ 2 ≤ ∥ ( w k − 1 , b k − 1 ) ∥ 2 + η 2 R 2 \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(wk1,bk1)2+ηyi(xi1)2(wk1,bk1)2+η2R2

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

对上式进行递归,考虑到 ( w 0 , b 0 ) = ( 0 , 0 ) (w_0, b_0)=(0, 0) (w0,b0)=(0,0),可以得到
∥ ( w k , b k ) ∥ 2 ≤ k η 2 R 2 \left\|(w_k, b_k)\right\|^2\le k\eta^2R^2 (wk,bk)2kη2R2
2. 证明 ( w k , b k ) ⋅ ( w o p t , b o p t ) ≥ k η γ (w_k, b_k)\cdot(w_{opt}, b_{opt})\ge k\eta\gamma (wk,bk)(wopt,bopt)kηγ。实际上,
( w k , b k ) ⋅ ( w o p t , b o p t ) = ( w k − 1 + η y i x i , b k − 1 + η y i ) ⋅ ( w o p t , b o p t ) = w k − 1 ⋅ w o p t + b k − 1 b o p t + η y i ( w o p t ⋅ x i + b o p t ) = ( w k − 1 , b k − 1 ) ⋅ ( w o p t , b o p t ) + η y i ( w o p t ⋅ x i + b o p t ) ≥ ( w k − 1 , b k − 1 ) ⋅ ( w o p t , b o p t ) + η γ \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)===(wk1+ηyixi,bk1+ηyi)(wopt,bopt)wk1wopt+bk1bopt+ηyi(woptxi+bopt)(wk1,bk1)(wopt,bopt)+ηyi(woptxi+bopt)(wk1,bk1)(wopt,bopt)+ηγ

其中, γ = min ⁡ ( x i , y i ) ∈ T y i ( w o p t ⋅ x i + b o p t ) \gamma=\min\limits_{(x_i, y_i)\in T}y_i(w_{opt}\cdot x_i+b_{opt}) γ=(xi,yi)Tminyi(woptxi+bopt)

通过递归,考虑到 ( w 0 , b 0 ) = ( 0 , 0 ) (w_0,b_0)=(0, 0) (w0,b0)=(0,0),我们有 ( w k , b k ) ⋅ ( w o p t , b o p t ) ≥ k η γ (w_k, b_k)\cdot(w_{opt}, b_{opt})\ge k\eta\gamma (wk,bk)(wopt,bopt)kηγ
3. 证明更新次数 k k k 满足 k ≤ ( R γ ) 2 k\le\left(\frac{R}{\gamma}\right)^2 k(γR)2。根据第一步和第二步得到的两个不等式,我们有
k η γ ≤ ( w k , b k ) ⋅ ( w o p t , b o p t ) ≤ ∥ ( w k , b k ) ∥ ⋅ ∥ ( w o p t , b o p t ) ∥ = ∥ ( w k , b k ) ∥ ≤ 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 γ ) 2 k\le\left(\frac{R}{\gamma}\right)^2 k(γR)2

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

由于对 w o p t w_{opt} wopt b o p t b_{opt} bopt 同时乘除一个数,超平面并不变,因此,我们可以同时乘以 1 ∥ ( w o p t , b o p t ) ∥ \frac{1}{\left\|(w_{opt}, b_{opt})\right\|} (wopt,bopt)1,此时,新的参数 ( w o p t ∥ ( w o p t , b o p t ) ∥ , b o p t ∥ ( w o p t , b o p t ) ∥ ) (\frac{w_{opt}}{\left\|(w_{opt}, b_{opt})\right\|}, \frac{b_{opt}}{\left\|(w_{opt}, b_{opt})\right\|}) ((wopt,bopt)wopt,(wopt,bopt)bopt) 满足 ∥ ( w o p t ∥ ( w o p t , b o p t ) ∥ , b o p t ∥ ( w o p t , b o p t ) ∥ ) ∥ = 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代码实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值