支持向量机(SVM)学习报告

发布于:2025-09-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、学习背景与目的

在机器学习课程的学习中,我接触到了多种分类算法,其中支持向量机(SVM)凭借独特的 “寻找最优划分边界” 思路,在小样本分类任务中表现突出,引起了我的兴趣。为了深入理解 SVM 的核心原理,掌握其从理论推导到实际应用的完整逻辑,我围绕 “如何构建鲁棒的分类超平面” 展开学习,希望通过本次学习达成以下目标:

  1. 搞懂 SVM 中 “超平面”“支持向量”“分类间隔” 等基础概念;
  2. 理清 SVM 优化目标的构建过程,学会用数学方法求解;
  3. 理解软间隔、核变换如何解决现实中的数据问题;
  4. 结合实例掌握 SVM 的计算步骤,为后续课程作业和实践项目打基础。

二、SVM 核心基础概念理解

2.1 超平面:分类的 “边界线”

刚开始学习时,我对 “超平面” 这个概念有点困惑,后来通过老师的讲解和例子才慢慢明白:超平面其实就是样本空间中划分不同类别样本的 “边界”,它的维度比样本空间低 1 维。比如:

  • 当样本是二维的(像平面上的点,有 x1、x2 两个特征),超平面就是一条直线,公式是\(Ax + By + C = 0\);
  • 当样本是三维的(有 x1、x2、x3 三个特征),超平面就是一个平面,公式是\(Ax + By + Cz + D = 0\);
  • 推广到 n 维样本空间,超平面的通用公式是\(\boldsymbol{w}^T\boldsymbol{x} + b = 0\)。这里\(\boldsymbol{w}\)是法向量,决定超平面的方向;b是截距,决定超平面的位置;\(\boldsymbol{x}\)是样本的特征向量。

有了超平面,就能判断样本类别:把样本\(\boldsymbol{x}\)代入决策函数\(y(\boldsymbol{x}) = \boldsymbol{w}^T\Phi(\boldsymbol{x}) + b\)(\(\Phi(\boldsymbol{x})\)暂时理解为特征处理),如果结果大于 0,样本就是正例(标签\(Y=+1\));小于 0 就是负例(标签\(Y=-1\))。

2.2 支持向量与分类间隔:为什么 SVM 的边界更 “好”

老师在课上强调,SVM 找的不是随便一条能划分样本的超平面,而是 “最好” 的超平面 —— 也就是对样本轻微变动容忍度最高的超平面。这就需要用到 “支持向量” 和 “分类间隔” 两个概念:

  • 支持向量:是样本中离超平面最近的点,就像 “边界哨兵” 一样。我发现一个有趣的点:如果把非支持向量的样本去掉,超平面的位置完全不会变,可见支持向量才是决定超平面的关键。
  • 分类间隔(Margin):是两类支持向量分别到超平面的距离之和。比如左边支持向量到超平面距离是d,右边也是d,那间隔就是2d。

SVM 的核心目标就是 “最大化这个间隔”。老师举了个例子:如果间隔很小,稍微移动一个样本就可能分错类;但间隔大的话,即使样本有点小偏差,也能正确分类 —— 这就是 SVM 泛化能力强的原因。

2.3 点到超平面的距离:计算间隔的 “工具”

要最大化间隔,首先得知道怎么计算 “样本点到超平面的距离”。这部分和高中数学里 “点到直线的距离” 很像,只是推广到了 n 维:

  • 二维空间中,点\((x,y)\)到直线\(Ax + By + C = 0\)的距离是\(d = \frac{|Ax + By + C|}{\sqrt{A^2 + B^2}}\);
  • 推广到 n 维超平面\(\boldsymbol{w}^T\boldsymbol{x} + b = 0\),样本\(\boldsymbol{x}\)到超平面的距离就是\(d = \frac{|\boldsymbol{w}^T\boldsymbol{x} + b|}{\|\boldsymbol{w}\|}\)。这里\(\|\boldsymbol{w}\|\)是\(\boldsymbol{w}\)的 L2 范数,计算方法是把\(\boldsymbol{w}\)的每个元素平方后相加再开根号。

这个公式是后续推导优化目标的基础,我花了点时间才记住,还通过代入简单的二维例子验证了一下,确认和高中知识能对应上,才放心继续往下学。

三、SVM 优化目标与数学求解过程

3.1 优化目标:从 “最大化间隔” 到 “最小化范数”

刚开始我以为 “最大化间隔” 直接求就行,后来发现需要把它转化成数学优化问题。老师一步步推导的时候,我跟着记了笔记:

  1. 分类约束:为了让超平面能正确分类所有样本,需要满足\(Y_i(\boldsymbol{w}^T\Phi(\boldsymbol{x}_i) + b) \geq 1\)。这里的 “1” 是通过 “放缩变换” 得到的 —— 对\(\boldsymbol{w}\)和b同比例缩放,让支持向量刚好满足等号\(Y_i(\boldsymbol{w}^T\Phi(\boldsymbol{x}_i) + b) = 1\),这样计算更方便。
  2. 间隔与范数的关系:因为支持向量满足\(|\boldsymbol{w}^T\Phi(\boldsymbol{x}_i) + b| = 1\),代入距离公式,单个支持向量到超平面的距离\(d = \frac{1}{\|\boldsymbol{w}\|}\),所以间隔\(Margin = 2d = \frac{2}{\|\boldsymbol{w}\|}\)。
  3. 目标转化:要最大化Margin,也就是最大化\(\frac{2}{\|\boldsymbol{w}\|}\),等价于最小化\(\|\boldsymbol{w}\|\)。为了后续求导方便,通常会最小化\(\frac{1}{2}\|\boldsymbol{w}\|^2\)(乘以\(\frac{1}{2}\)不影响最小值的位置)。

最终,SVM 的优化问题就变成了: 要最小化的目标函数:\(\frac{1}{2}\|\boldsymbol{w}\|^2\) 约束条件:\(Y_i(\boldsymbol{w}^T\Phi(\boldsymbol{x}_i) + b) \geq 1\)(每个样本都要满足)

3.2 拉格朗日乘子法:解决带约束的优化问题

这个带约束的优化问题怎么解呢?老师介绍了 “拉格朗日乘子法”,这部分是难点,我反复看了好几遍课件才理清楚思路:

  1. 构建拉格朗日函数:引入非负的拉格朗日乘子\(\alpha_i \geq 0\),把约束条件融入目标函数,得到: \(L(\boldsymbol{w}, b, \alpha) = \frac{1}{2}\|\boldsymbol{w}\|^2 - \sum_{i=1}^n \alpha_i\left[Y_i(\boldsymbol{w}^T\Phi(\boldsymbol{x}_i) + b) - 1\right]\) 这里的减号是因为约束条件是 “大于等于”,需要把它转化为拉格朗日函数的一部分。
  2. 求偏导找最优条件:对\(\boldsymbol{w}\)和b分别求偏导,然后令偏导数等于 0(因为极值点的偏导数为 0):
    • 对\(\boldsymbol{w}\)求偏导:\(\frac{\partial L}{\partial \boldsymbol{w}} = \boldsymbol{w} - \sum_{i=1}^n \alpha_i Y_i \Phi(\boldsymbol{x}_i) = 0\),整理得\(\boldsymbol{w} = \sum_{i=1}^n \alpha_i Y_i \Phi(\boldsymbol{x}_i)\)。这说明\(\boldsymbol{w}\)是支持向量特征映射的线性组合(非支持向量的\(\alpha_i=0\),不会参与计算)。
    • 对b求偏导:\(\frac{\partial L}{\partial b} = -\sum_{i=1}^n \alpha_i Y_i = 0\),也就是\(\sum_{i=1}^n \alpha_i Y_i = 0\)。这是计算b的重要约束。
  3. 转化为对偶问题:把\(\boldsymbol{w}\)的表达式代入拉格朗日函数,消去\(\boldsymbol{w}\)和b,原来的 “最小化问题” 就变成了 “最大化问题”(对偶问题): 对偶目标函数:\(\sum_{i=1}^n \alpha_i - \frac{1}{2}\sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_j Y_i Y_j \cdot \Phi(\boldsymbol{x}_i)^T\Phi(\boldsymbol{x}_j)\) 约束条件:\(\sum_{i=1}^n \alpha_i Y_i = 0\)且\(\alpha_i \geq 0\)。

老师说,对偶问题的好处是后续可以用 “核函数” 简化计算,这在解决低维不可分问题时特别有用。

3.3 实例求解:跟着例子算一遍

为了理解求解过程,我跟着课件里的实例算了一遍,虽然步骤多,但算完后清晰了很多:

  1. 已知条件:假设有 3 个样本,根据\(\sum_{i=1}^n \alpha_i Y_i = 0\),先把对偶目标函数化简,得到只和\(\alpha_1、\alpha_2、\alpha_3\)有关的式子。
  2. 求偏导找极值:对\(\alpha_1\)和\(\alpha_2\)求偏导,令偏导数为 0,得到一组解,但发现有的\(\alpha_i\)是负数,不满足\(\alpha_i \geq 0\)的约束,所以得在边界上找解。
  3. 确定最优\(\alpha\):尝试\(\alpha_1=0\)、\(\alpha_2=0\)等边界情况,最后发现当\(\alpha_1=0.25\)、\(\alpha_2=0\)、\(\alpha_3=0.25\)时,既满足所有约束,目标函数也能取到最大值。这时候\(\alpha\)非零的样本就是支持向量。
  4. 计算\(\boldsymbol{w}\)和b
    • 代入\(\boldsymbol{w} = \sum_{i=1}^n \alpha_i Y_i \Phi(\boldsymbol{x}_i)\),算出\(\boldsymbol{w} = 0.5x_1 + 0.5x_2\);
    • 选一个支持向量代入\(Y_i(\boldsymbol{w}^T\Phi(\boldsymbol{x}_i) + b) = 1\),解出\(b = -2\);
  5. 得到超平面方程:最终超平面是\(0.5x_1 + 0.5x_2 - 2 = 0\),用这个超平面分类样本,确实能分对,这让我对推导结果更有信心了。

四、SVM 的关键拓展:解决现实中的问题

4.1 软间隔:允许少量样本 “分错”

在做课程小作业时,我发现实际数据里总有一些 “噪音点”—— 比如标注错的样本,或者离群的异常值。如果还用之前的 “硬间隔”(要求所有样本都满足约束),超平面会被这些噪音点带偏,分类效果反而不好。这时候老师讲的 “软间隔” 就派上用场了:

  1. 引入松弛因子:添加一个非负的松弛因子\(\xi_i \geq 0\),表示样本对硬间隔的 “违反程度”,约束条件变成\(Y_i(\boldsymbol{w}^T\Phi(\boldsymbol{x}_i) + b) \geq 1 - \xi_i\)。\(\xi_i\)越大,说明这个样本离超平面越近,甚至可能分错。
  2. 调整目标函数:为了不让\(\xi_i\)太大(也就是不让太多样本分错),需要在目标函数里加一个惩罚项,变成: \(\min \frac{1}{2}\|\boldsymbol{w}\|^2 + C\sum_{i=1}^n \xi_i\) 这里的C是惩罚参数,老师说可以理解为 “对分错样本的容忍度”:
    • 如果C很大,惩罚很重,不允许有太多样本违反约束,适合数据很干净、没有噪音的情况;
    • 如果C很小,惩罚很轻,允许更多样本违反约束,适合噪音多的情况。

我在作业里试了不同的C值,发现当C太小时,确实有很多样本分错;C太大时,模型又会 “过度纠结” 噪音点,泛化能力下降,这让我真切感受到了参数调整的重要性。

4.2 核变换:解决 “低维分不开” 的问题

还有一个难题是 “低维不可分”—— 比如样本是环形分布的,在二维平面上根本画不出一条直线把它们分开。这时候 “核变换” 就像 “魔法” 一样,能把低维样本映射到高维空间,让它们在高维里变得可分:

  1. 核心思路:找一个特征映射函数\(\Phi\),把低维样本\(\boldsymbol{x}\)变成高维特征\(\Phi(\boldsymbol{x})\)。比如二维样本\((x1,x2)\),可以映射到三维空间\((x1^2, x2^2, \sqrt{2}x1x2)\),这样原来的环形样本在三维空间里就能用一个平面分开了。
  2. 核函数的作用:刚开始我以为要先把样本映射到高维再计算,后来发现这样会有 “维度灾难”—— 比如 100 维样本映射到\(10^4\)维,计算量太大了。而 “核函数”\(K(\boldsymbol{x}_i, \boldsymbol{x}_j) = \Phi(\boldsymbol{x}_i)^T\Phi(\boldsymbol{x}_j)\)能直接在低维空间计算高维特征的内积,不用显式映射,大大减少了计算量。
  3. 常用核函数
    • 线性核:\(K(\boldsymbol{x}_i, \boldsymbol{x}_j) = \boldsymbol{x}_i^T\boldsymbol{x}_j\),其实就是没做映射,适合低维可分的数据;
    • 高斯核:\(K(\boldsymbol{x}_i, \boldsymbol{x}_j) = \exp\left(-\frac{\|\boldsymbol{x}_i - \boldsymbol{x}_j\|^2}{2\sigma^2}\right)\),老师说这是最常用的核函数,能处理很多非线性数据。我在作业里用高斯核试了环形样本,果然能分对,特别神奇。

网站公告

今日签到

点亮在社区的每一天
去签到