【机器学习】感知机

1. 感知机

感知机是一个二分类的线性模型,它通过构造一个超平面,将特征空间中的样本分为两类。感知机的核心思想是找到一个超平面,使得不同类别的样本可以通过该超平面分开,适用于线性可分的数据集。
优点

  • 实现简单,易于理解和实现。
  • 在处理线性可分数据集时具有良好的表现。

缺点

  • 仅适用于线性可分数据集,对线性不可分数据无能为力。
  • 容易受噪声数据影响,可能导致学习困难。
  • 学习率的选择对收敛速度和效果有较大影响。

其他算法的对比:

  • 与SVM的对比
    • 感知机与SVM都可以用于二分类任务,但SVM引入了间隔的概念,优化目标是最大化分类间隔,从而具有更好的泛化能力。
    • 感知机没有惩罚项,容易过拟合,而SVM通过加入惩罚项来平衡间隔与误分类的权衡。
  • 与逻辑回归的对比
    • 感知机使用的是硬分类,即直接将结果映射到-1或+1,而逻辑回归是基于概率的软分类模型,输出一个概率值,再根据阈值进行分类。
    • 逻辑回归的损失函数是对数损失,而感知机没有明确的损失函数,这使得逻辑回归在处理噪声数据时更为鲁棒。

1.1 基本原理

感知机的基本思路是基于输入特征的线性组合进行分类。感知机模型可以表示为:
模型
f ( x ) = sign ( w ⋅ x + b ) \begin{align}f(\mathbf{x}) = \text{sign}(\mathbf{w} \cdot \mathbf{x} + b)\end{align} f(x)=sign(wx+b)
其中, w \mathbf{w} w 是权重向量, x \mathbf{x} x 是输入特征向量, b b b 是偏置项, sign \text{sign} sign 是符号函数,其中符号函数定义为:
sign ( x ) = { 1 if  x ≥ 0 − 1 if  x < 0 \begin{align}\text{sign}(x) = \begin{cases} 1 & \text{if } x \geq 0 \\ -1 & \text{if } x < 0 \end{cases}\end{align} sign(x)={11if x0if x<0
决策边界:决策边界是由 w ⋅ x + b = 0 \mathbf{w} \cdot \mathbf{x} + b = 0 wx+b=0 决定的超平面。
输出:感知机的输出为 +1 或 -1 ,表示对样本的分类结果。

1.2 损失函数

感知机的目标是找到一个超平面,使得所有样本的分类错误最小。为了衡量模型的性能,定义损失函数。传统的二分类损失函数(误分类点数)对权重 w \mathbf{w} w 和偏置 b b b 的梯度计算不连续,不适合优化。因此,采用基于误分类点到超平面的总距离的损失函数:
L ( w , b ) = − 1 ∥ w ∥ ∑ x i ∈ M y i ( w ⋅ x i + b ) \begin{align}L(\mathbf{w}, b) = -\frac{1}{\|\mathbf{w}\|} \sum_{x_i \in M} y_i (\mathbf{w} \cdot x_i + b)\end{align} L(w,b)=w1xiMyi(wxi+b)

其中:

  • ∥ w ∥ \|\mathbf{w}\| w 是权重向量的范数。
  • x i x_i xi 是第 i i i 个样本。
  • y i y_i yi 是第 i i i 个样本的真实标签(-1 或 1)。

1.3 学习算法

感知机的优化目标是最小化误分类样本的数量。通过调整权重 w \mathbf{w} w 和偏置 b b b,感知机的学习过程逐步减少误分类样本,直到达到预期的分类效果。常用的方法是梯度下降法,梯度下降法通过迭代更新参数 w \mathbf{w} w b b b 来找到最优解。具体步骤如下:

  1. 初始化

将权重向量 w \mathbf{w} w 和偏置 b b b 初始化为零向量或随机小值。

  1. 遍历数据

对于每个训练样本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi),计算预测值:
y i ′ = sign ( w ⋅ x i + b ) \begin{align} y'_i = \text{sign}(\mathbf{w} \cdot \mathbf{x}_i + b)\end{align} yi=sign(wxi+b)

  1. 误分类检查与更新

如果 y i ′ ≠ y i y'_i \neq y_i yi=yi(即发生误分类),则根据以下更新规则调整参数:
梯度计算:计算损失函数 L ( w , b ) L(\mathbf{w}, b) L(w,b) 对权重 w \mathbf{w} w 和偏置 b b b 的梯度:
∇ w L ( w , b ) = − ∑ x i ∈ M y i x i ∇ b L ( w , b ) = − ∑ x i ∈ M y i \begin{align}\nabla_{\mathbf{w}} L(\mathbf{w}, b) = -\sum_{\mathbf{x}_i \in M} y_i \mathbf{x}_i \\ \nabla_b L(\mathbf{w}, b) = -\sum_{\mathbf{x}_i \in M} y_i\end{align} wL(w,b)=xiMyixibL(w,b)=xiMyi
其中, M M M 表示所有误分类样本的集合。
梯度下降更新规则:使用梯度下降法更新权重和偏置:
w ← w + η ∑ x i ∈ M y i x i b ← b + η ∑ x i ∈ M y i \begin{align}\mathbf{w} \leftarrow \mathbf{w} + \eta \sum_{\mathbf{x}_i \in M} y_i \mathbf{x}_i\\ b \leftarrow b + \eta \sum_{\mathbf{x}_i \in M} y_i \end{align} ww+ηxiMyixibb+ηxiMyi
其中, η \eta η 是学习率,控制每次更新的步长。

  1. 迭代过程

重复以上步骤,直到没有误分类样本或达到最大迭代次数。

1.4 梯度下降法

根据梯度下降法的推导过程:

  1. 泰勒展开:梯度下降的基本思路是沿着梯度的反方向更新参数,以最小化目标函数。对于函数 f ( θ ) f(\theta) f(θ),其泰勒展开为:

f ( θ ) = f ( θ k ) + ( θ − θ k ) ∇ f ( θ k ) \begin{align}f(\theta) = f(\theta^k) + (\theta - \theta^k) \nabla f(\theta^k)\end{align} f(θ)=f(θk)+(θθk)f(θk)

  1. 方向向量:令 θ − θ k = v ⋅ η \theta - \theta^k = v \cdot \eta θθk=vη,其中 v v v 是方向向量, η \eta η 是步长系数。为了保证沿梯度下降方向,必须有:

f ( θ ) − f ( θ k ) = v ⋅ η ∇ f ( θ k ) < 0 \begin{align}f(\theta) - f(\theta^k) = v \cdot \eta \nabla f(\theta^k) < 0\end{align} f(θ)f(θk)=vηf(θk)<0

  1. 更新公式:因此,方向向量 v v v 应与梯度 ∇ f ( θ k ) \nabla f(\theta^k) f(θk) 方向相反,可以表示为:

v = − ∇ f ( θ k ) ∣ ∇ f ( θ k ) ∣ \begin{align}v = -\frac{\nabla f(\theta^k)}{|\nabla f(\theta^k)|}\end{align} v=∣∇f(θk)f(θk)
更新参数的公式为:
θ = θ k − ∇ f ( θ k ) ∣ ∇ f ( θ k ) ∣ η \begin{align}\theta = \theta^k - \frac{\nabla f(\theta^k)}{|\nabla f(\theta^k)|} \eta\end{align} θ=θk∣∇f(θk)f(θk)η

1.5 代码实现

感知机训练的伪代码如下:

def perceptron_train(X, y, eta=0.01, epochs=1000):
    # 初始化权重和偏置
    w = np.zeros(X.shape[1])
    b = 0

    for epoch in range(epochs):
        errors = 0
        # 每个epoch前随机打乱数据顺序
        indices = np.random.permutation(len(y))
        for i in indices:
            xi, yi = X[i], y[i]
            # 如果预测错误
            if yi * (np.dot(xi, w) + b) <= 0:
                w += eta * yi * xi
                b += eta * yi
                errors += 1
        # 如果没有误分类样本,提前停止训练
        if errors == 0:
            break

    return w, b
  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可口的冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值