《统计学习方法》第二章: 感知机 读书笔记


一切为了数据挖掘的准备

2.感知机
2.1感知机模型
  • 感知机:二类分类的线性模型。
  • 数学表达:输入空间 X ⊆ R n X\subseteq R^n XRn,输出空间是 y = { + 1 , − 1 } y=\{+1,-1\} y={+1,1},输入实例x,输出实例y,输入空间到输出空间的函数: f ( x ) = s i g n ( w x + b ) f(x) = sign(wx+b) f(x)=sign(wx+b), w ∈ R n w \in R^n wRn,叫做权值, b ∈ R b\in R bR叫做偏置。sign函数是符号函数 s i g n ( x ) = { + 1 , x ⩾ 0 − 1 , x < 0 sign(x)=\begin{cases} +1, & x\geqslant 0 \\ -1, & x <0 \end{cases} sign(x)={+1,1,x0x<0
  • 分离超平面S: w x + b = 0 wx+b=0 wx+b=0对应一个超平面S,w是超平面的法向量,b是超平面的截距,可以将样本点分为正、负两类。
  • 对于数据集T,对所有的 y i = + 1 y_i = +1 yi=+1的实例, w x i + b > 0 wx_i+b>0 wxi+b>0; y i = − 1 y_i = -1 yi=1的实例, w x i + b < 0 wx_i+b<0 wxi+b<0,则数据集T为线性可分数据集。
2.2感知机学习策略
  • 输入空间 R n R^n Rn中任一点 x 0 x_0 x0到超平面S的距离: 1 ∣ ∣ w ∣ ∣ ∣ w x 0 + b ∣ \frac{1}{||w||}|wx_0+b| w1wx0+b, ∣ ∣ w ∣ ∣ ||w|| w是w的 L 2 L_2 L2范数
  • 如果数据正确分类 y i ( w x i + b ) > 0 y_i(wx_i+b)>0 yi(wxi+b)>0,如果被误分类 y i ( w x i + b ) < 0 y_i(wx_i+b)<0 yi(wxi+b)<0,误分类点到超平面S的距离 − 1 ∣ ∣ w ∣ ∣ y i ( w x i + b ) -\frac{1}{||w||}y_i(wx_i+b) w1yi(wxi+b)
  • 损失函数: L ( w x + b ) = − ∑ x i ∈ M y i ( w x i + b ) L(wx+b)=-\sum_{x_i \in M}y_i(wx_i+b) L(wx+b)=xiMyi(wxi+b),M为误分类的点。这个损失函数就是感知机的经验风险函数。
2.3感知机学习算法
感知机学习算法的原始形式
  • 损失函数极小化: m i n L ( w x + b ) = − ∑ x i ∈ M y i ( w x i + b ) minL(wx+b)=-\sum_{x_i \in M}y_i(wx_i+b) minL(wx+b)=xiMyi(wxi+b)

  • 梯度下降:
    ∇ w L ( w , b ) = − ∑ x i ∈ M y i x i \nabla_wL(w,b)=-\sum_{x_i \in M}y_ix_i wL(w,b)=xiMyixi
    ∇ b L ( w , b ) = − ∑ x i ∈ M y i \nabla_bL(w,b)=-\sum_{x_i \in M}y_i bL(w,b)=xiMyi
    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

  • 算法过程

    • 选取初值 w 0 , b 0 w_0,b_0 w0,b0
    • 在训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
    • 如果 y i ( w x i + b ) ⩽ 0 y_i(wx_i+b)\leqslant 0 yi(wxi+b)0, w ← w + η y i x i , b ← b + η y i w \leftarrow w + \eta y_ix_i,b \leftarrow b + \eta y_i ww+ηyixi,bb+ηyi,直至此点被正确分类
    • 转至第二步,直至训练集中没有误分类点
感知机学习算法的对偶形式

将最后学习到的w,b表示为 w = ∑ i = 1 N α i y i x i , b = ∑ i = 1 N α i y i w=\sum_{i=1}^{N}\alpha_iy_ix_i,b=\sum_{i=1}^N\alpha_iy_i w=i=1Nαiyixi,b=i=1Nαiyi, α i > 0 \alpha_i>0 αi>0,N为样本量

  • 算法过程:感知机模型 f ( x ) = s i g n ( ∑ j = i N α j y j x j x + b ) f(x)=sign(\sum_{j=i}^N \alpha_j y_jx_jx+b) f(x)=sign(j=iNαjyjxjx+b),其中 α = ( α 1 , α 2 , ⋯   , α N ) T \alpha=(\alpha_1,\alpha_2,\cdots,\alpha_N)^T α=(α1,α2,,αN)T
    • α ← 0 , b ← 0 \alpha \leftarrow 0,b \leftarrow 0 α0,b0
    • 训练集中选数据 ( x i , y i ) (x_i,y_i) (xi,yi)
    • 如果 y i ∑ j = i N α j y j x j x i + b ⩽ 0 y_i\sum_{j=i}^N \alpha_j y_jx_jx_i+b\leqslant 0 yij=iNαjyjxjxi+b0, α i ← α i + η , b ← b + η y i \alpha_i \leftarrow \alpha_i + \eta ,b \leftarrow b + \eta y_i αiαi+η,bb+ηyi
2.4感知机学习算法收敛证明

设最后线性可分数据集学习的结果为 w ^ o p t ⋅ x ^ = w o p t ⋅ x + b o p t = 0 \hat{w}_{opt}\cdot \hat{x} = w_{opt}\cdot x+b_{opt}=0 w^optx^=woptx+bopt=0, ∣ ∣ w ^ o p t ∣ ∣ = 1 ||\hat{w}_{opt}||=1 w^opt=1.

  • 存在 γ \gamma γ,对数据集中所有数据,满足 y i ( w ^ o p t ⋅ x ^ i ) = w o p t ⋅ x i + b o p t ⩾ γ y_i(\hat{w}_{opt}\cdot \hat{x}_i )= w_{opt}\cdot x_i+b_{opt}\geqslant \gamma yi(w^optx^i)=woptxi+boptγ,即 γ \gamma γ为离超平面最近的点的距离。
  • 假设第k次学习后的学习结果能将数据集完全正确的分开。
    w ^ k − 1 = ( w k − 1 T , b k − 1 ) T \hat{w}_{k-1}=(w_{k-1}^T,b_{k-1})^T w^k1=(wk1T,bk1)T
    w k ← w k − 1 + η y i x i , w_k \leftarrow w_{k-1} + \eta y_ix_i, wkwk1+ηyixi,
    b k ← b k − 1 + η y i , b_{k} \leftarrow b_{k-1} + \eta y_i, bkbk1+ηyi,
    w ^ k = w ^ k − 1 + η y i x ^ i \hat{w}_k=\hat{w}_{k-1} + \eta y_i\hat{x}_i w^k=w^k1+ηyix^i
    w ^ k ⋅ w ^ o p t = w ^ k − 1 ⋅ w ^ o p t + η y i w ^ o p t x ^ i ⩾ w ^ k − 1 ⋅ w ^ o p t + η γ ⩾ w ^ o ⋅ w ^ o p t + k η γ \hat{w}_k\cdot \hat{w}_{opt} = \hat{w}_{k-1} \cdot \hat{w}_{opt} + \eta y_i\hat{w}_{opt}\hat{x}_i \geqslant \hat{w}_{k-1} \cdot \hat{w}_{opt}+\eta \gamma\geqslant \hat{w}_{o} \cdot \hat{w}_{opt}+k\eta \gamma w^kw^opt=w^k1w^opt+ηyiw^optx^iw^k1w^opt+ηγw^ow^opt+kηγ
    ∣ ∣ w ^ k ∣ ∣ 2 = ∣ ∣ w ^ k − 1 + η y i x ^ i ∣ ∣ 2 = ∣ ∣ w ^ k − 1 ∣ ∣ 2 + 2 η y i w ^ k − 1 x ^ i + η 2 ∣ ∣ x ^ i ∣ ∣ 2 ⩽ ∣ ∣ w ^ k − 1 ∣ ∣ 2 + η 2 R 2 ⩽ ∣ ∣ w ^ 0 ∣ ∣ 2 + k η 2 R 2 ||\hat{w}_k||^2=||\hat{w}_{k-1} + \eta y_i\hat{x}_i||^2=||\hat{w}_{k-1}||^2 + 2\eta y_i \hat{w}_{k-1}\hat{x}_i + \eta^2||\hat{x}_i||^2 \leqslant||\hat{w}_{k-1}||^2+\eta^2R^2 \leqslant||\hat{w}_{0}||^2+k\eta^2R^2 w^k2=w^k1+ηyix^i2=w^k12+2ηyiw^k1x^i+η2x^i2w^k12+η2R2w^02+kη2R2
    k η γ ⩽ w ^ k ⋅ w ^ o p t ⩽ ∣ ∣ w ^ k ∣ ∣ ∣ ∣ w ^ o p t ∣ ∣ ⩽ ∣ ∣ w ^ k ∣ ∣ 2 ⩽ k η R k\eta \gamma\leqslant \hat{w}_k\cdot \hat{w}_{opt} \leqslant ||\hat{w}_k||||\hat{w}_{opt}|| \leqslant ||\hat{w}_k||^2 \leqslant \sqrt{k}\eta R kηγw^kw^optw^kw^optw^k2k ηR
    k ⩽ ( R γ ) 2 k\leqslant(\frac{R}{\gamma})^2 k(γR)2

2.5 我的实现,不一定简便
import numpy as np
class Perception:
    def __init__(self,x,y):
        self.tdx = np.array(x)
        self.tdy = np.array(y)
        self.w = np.zeros(self.tdx[0].shape)
        self.b = 0
        
    def train(self):
        n = 0
        #当存在分类错误的数据时,计算
        while np.sum((np.dot(self.tdx,self.w)+self.b)*self.tdy<=0)>0:
            for xi,yi in zip(self.tdx,self.tdy):
                #当此数据计算错误时,更新
                while yi*(np.dot(xi,self.w)+self.b)<= 0:
                    self.w += yi*xi
                    self.b += yi
                    n += 1
                    print('w:',self.w,' b:',self.b,' 第%d次迭代'%n)
                #如果全部数据被分类正确
                if np.sum((np.dot(self.tdx,self.w)+self.b)*self.tdy<0)== 0:
                    break
        return self.w,self.b

x=[[3,3],[4,3],[1,1]]
y=[1,1,-1]
p = Perception(x,y)
wo,bo=p.train()
print(wo,bo)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值