感知机与对偶算法:基础与应用

感知机与对偶算法:基础与应用

感知机是一种线性二分类模型,最早由Rosenblatt在1957年提出。本文将介绍感知机的基本原理、原感知机算法以及其对偶算法。

1.感知机模型

(1)模型:

感知机模型是一种简单的线性分类模型,其核心思想是找到一个能够将数据分为两个类别的超平面。具体来说,感知机模型通过一个线性函数和一个阈值来实现分类:
f ( x ) = y i ( w ⋅ x + b ) f(x) = y_i(\mathbf{w} \cdot \mathbf{x} + b) f(x)=yi(wx+b)
其中, w w w是权重向量, x x x 是输入特征向量, b b b 是偏置项。感知机的目标是找到一个权重向量和偏置项,使得:

  • 对于正类样本 y i = 1 y_i=1 yi=1,有 w ⋅ x i + b ≥ 0 \mathbf{w} \cdot \mathbf{x}_i + b \geq 0 wxi+b0
  • 对于负类样本 y i = − 1 y_i=-1 yi=1,有 w ⋅ x i + b < 0 \mathbf{w} \cdot \mathbf{x}_i + b < 0 wxi+b<0
(2)策略:没有误分类点

m i n w , b L ( w , b ) = − ∑ x ϵ M y i ( w ⋅ x i + b ) \underset{w,b}{min}L\left( w,b \right) =-\sum_{x\epsilon M}{y_i}\left( w·x_i+b \right) w,bminL(w,b)=xϵMyi(wxi+b)

(3)算法:原始算法与对偶算法

感知机算法流程图

2.原感知机算法

原感知机算法是一种基于梯度下降的算法,通过不断调整权重和偏置来最小化分类误差。其基本步骤如下:
输入:训练数据集T={ ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) (x_1,y_1),(x_2,y_2),…,(x_N,y_N) (x1,y1),(x2,y2),,(xN,yN)};
y i y_i yi={+1,-1};
学习率 ( 0 < η < = 1 ) (0<\eta<=1) (0<η<=1)
输出: w w w, b b b;感知机模型 f ( x ) = y i ( w ⋅ x + b ) f(x) = y_i(w·x+b) f(x)=yi(wx+b)

  1. 初始化:随机初始化权重 w 0 w_0 w0和偏置 b 0 b_0 b0

  2. 迭代:对于每一轮迭代:

    • 遍历所有训练样本 x i x_i xi
    • 如果 y i ( w ⋅ x i + b ) < 1 y_i (w ·{x_i}+ b) < 1 yi(wxi+b)<1,则更新权重和偏置: w ← w + η y i x i \mathbf{w} \leftarrow \mathbf{w} + \eta y_i \mathbf{x}_i ww+ηyixi, b ← b + η y i b \leftarrow b + \eta y_i bb+ηyi
      其中, η \eta η是学习率。
  3. 收敛:当所有样本都被正确分类或达到最大迭代次数时,算法停止。

  4. 代码及可视化

x_eg1 =np.array([[1,2], [2,3], [3,1],[4,2]])
y = np.array([1,1,-1,-1])
plt.scatter(x_eg1[:,0],x_eg1[:,1],c=y)
def perception_normal(x_trian, y,w,b,n = 1000,eta=1.0):
    m = len(x_trian)
    i = 0
    while i < n:
        k = i
        for j in range(m):
            juge = y[j]*(np.dot(x_trian[j,:],w)+b)
            if juge <= 0: 
                i += 1
                w = w  + y[j]* x_trian[j,:]*eta
                b = b  + y[j]*eta
                break
        if i == k:
            break
    if i-k != 0:
        print("even n is equal to " +str(n) +",the work is still not well done")
    return w,b,[i]   
#感知机的输出结果与初始参数有关
W = [[w,b],[w+[0,10],b+2]]
for i in W:
    plot_perception(x_eg1,y,i[0],i[1],n=1000)

原感知机的分类预测可视化

3.对偶算法

对偶算法是感知机的一种变体,它通过最大化两个类别之间的间隔来找到最优的权重和偏置。对偶算法的核心思想是将原始问题转化为对偶问题,从而简化计算。

  1. 拉格朗日乘子法:首先将原始问题转化为拉格朗日形式:
    L ( w , b , α ) = − ∑ i = 1 m α i y i ( w ⋅ x i + b ) + λ ( ∥ w ∥ 2 + b 2 ) L(\mathbf{w}, b, \alpha) = -\sum_{i=1}^m \alpha_i y_i (\mathbf{w} \cdot \mathbf{x}_i + b) + \lambda (\|\mathbf{w}\|^2 + b^2) L(w,b,α)=i=1mαiyi(wxi+b)+λ(w2+b2) 其中, α i \alpha_i αi是拉格朗日乘子, λ \lambda λ是正则化项。

  2. 求解对偶问题:通过求解对偶问题来找到最优的 α \alpha α
    min ⁡ α max ⁡ w , b L ( w , b , α ) \min_{\alpha} \max_{\mathbf{w}, b} L(\mathbf{w}, b, \alpha) minαmaxw,bL(w,b,α)

  3. 更新权重和偏置:最终的权重和偏置可以通过以下公式计算:
    w = ∑ i = 1 m α i y i x i \mathbf{w} = \sum_{i=1}^m \alpha_i y_i \mathbf{x}_i w=i=1mαiyixi, b = 1 η ∑ i = 1 m α i y i − ∥ w ∥ 2 2 η b = \frac{1}{\eta} \sum_{i=1}^m \alpha_i y_i - \frac{\|\mathbf{w}\|^2}{2 \eta} b=η1i=1mαiyi2ηw2

  4. 代码和可视化

def perception_dual(x_trian, y,a,b,n = 1000,eta=1.0):
    m = len(x_trian)
    Gram = np.dot(x_trian,x_trian.T)
    i = 0
    while i < n:
        k = i
        for j in range(m):
            juge = y[j]*(a * y @Gram[j]+b)
            if juge <= 0: 
                i += 1
                a[j] += eta
                b +=  y[j]*eta
                break
        if i == k:
            break
    if i-k != 0:
        print("even if n is equal to " +str(n) +",the work is still not well done")
    weight = a * y @ x_trian
    return weight,b,[i]   

感知机对偶算法的分类预测可视化

讨论和感知机优缺点

  • 讨论:XOR 数据集是否可以实现划分
    XOR(异或)数据集是一个经典的二元分类问题,其特点是数据点在特征空间中不是线性可分的。具体来说,XOR问题涉及两个二进制输入特征,其输出根据输入的异或结果确定。例如:
    (1,2)→1 (2,3)→-1
    (4,2)→1 (3,1)→-1
    XOR数据集可视化
    even n is equal to 2,the work is still not well done
    对偶算法XOR的可视化
  • 优缺点:
  1. 优点
    简单直观:感知机模型和算法相对简单,容易理解和实现。
    历史意义:感知机是机器学习领域的早期模型之一,对后续模型的发展有重要影响。
    快速训练:对于线性可分的数据集,感知机算法通常能够快速收敛。
  2. 缺点
    非线性限制:感知机只能处理线性可分的数据集,对于非线性问题,如XOR,无法实现完美划分。
    参数选择:学习率和迭代次数的选择对模型性能有显著影响,需要仔细调整。
    局部最优:感知机算法容易陷入局部最优解,尤其是在数据集复杂或噪声较多的情况下。
  • 29
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值