什么是SMO算法

SMO算法(Sequential Minimal Optimization) 是一种用于求解 支持向量机(SVM) 二次规划对偶问题的优化算法。它由 John Platt 在 1998 年提出,目的是快速解决 SVM 的优化问题,特别是当数据集较大时,传统的二次规划方法效率较低,而 SMO 算法通过分解问题,使得计算变得更加高效。

SVM 的二次规划问题回顾

支持向量机的优化问题本质上是一个 凸二次规划问题 ,其目标是找到最优的超平面,使得样本点的分类间隔最大。具体来说,SVM 的对偶问题形式为:
min ⁡ α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i \min_{\alpha} \quad \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_i \alpha_j y_i y_j K(x_i, x_j) - \sum_{i=1}^{N} \alpha_i αmin21i=1∑Nj=1∑NαiαjyiyjK(xi,xj)−i=1∑Nαi

s.t. ∑ i = 1 N α i y i = 0 , 0 ≤ α i ≤ C \text{s.t.} \quad \sum_{i=1}^{N} \alpha_i y_i = 0, \quad 0 \leq \alpha_i \leq C s.t.i=1∑Nαiyi=0,0≤αi≤C

其中:

  • α i \alpha_i αi 是拉格朗日乘子。
  • y i y_i yi 是样本点 x i x_i xi 的类别标签。
  • K ( x i , x j ) K(x_i, x_j) K(xi,xj) 是核函数,表示样本之间的相似性。
  • C C C 是惩罚参数。

这个问题涉及到对所有 N N N 个拉格朗日乘子 α \alpha α 进行优化,传统的优化算法如 内点法QP(Quadratic Programming) 方法在处理大规模问题时效率较低。

SMO 算法的基本思想

SMO 算法通过将原始的优化问题分解为多个 子问题 来求解,每次仅优化两个拉格朗日乘子 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2,其余乘子保持不变。优化两个变量的子问题可以通过简单的解析方法快速求解,从而大大减少了计算的复杂度。

SMO算法的步骤:
  1. 选择两个拉格朗日乘子

    SMO算法每次选择两个拉格朗日乘子 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 进行优化。选择这两个乘子的原则是,它们不满足 KKT条件,即当前的解不是最优的。

  2. 构建子优化问题

    假设所有其他拉格朗日乘子保持不变,SMO通过优化两个乘子 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 来最小化目标函数。优化问题变成了一个关于 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 的二次函数,且由于存在约束 ∑ i = 1 N α i y i = 0 \sum_{i=1}^{N} \alpha_i y_i = 0 ∑i=1Nαiyi=0,因此这两个变量之间有一个线性关系。

  3. 更新两个拉格朗日乘子的值

    SMO 通过解析的方法计算出新的 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 值,并根据边界 [ 0 , C ] [0, C] [0,C] 进行截断。计算后的两个新的乘子必须满足所有约束条件。

  4. 更新偏置项 b b b

    每次更新两个拉格朗日乘子后,SMO 需要更新支持向量机中的偏置项 b b b,以保证分类超平面保持正确。

  5. 迭代重复

    SMO 通过不断重复选择一对拉格朗日乘子进行优化,直到所有的乘子都满足 KKT 条件,即算法收敛。

SMO 算法的核心优化过程

SMO 算法的核心在于,它将每次优化问题简化为一个涉及两个变量的二次规划问题。假设我们要优化 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2,我们可以通过以下步骤来求解:

  1. 计算未约束解 :根据优化目标函数,我们可以直接计算出未约束的 α 2 new, unc \alpha_2^{\text{new, unc}} α2new, unc,即不考虑任何约束时最优的 α 2 \alpha_2 α2 值。

α 2 new, unc = α 2 old + y 2 ⋅ E 1 − E 2 K 11 + K 22 − 2 K 12 \alpha_2^{\text{new, unc}} = \alpha_2^{\text{old}} + y_2 \cdot \frac{E_1 - E_2}{K_{11} + K_{22} - 2K_{12}} α2new, unc=α2old+y2⋅K11+K22−2K12E1−E2

其中 E 1 E_1 E1 和 E 2 E_2 E2 是预测误差, K 11 K_{11} K11、 K 22 K_{22} K22 和 K 12 K_{12} K12 是核函数的值。

  1. 对 α 2 \alpha_2 α2 进行截断 :未约束的 α 2 \alpha_2 α2 值可能不满足约束 0 ≤ α 2 ≤ C 0 \leq \alpha_2 \leq C 0≤α2≤C,因此需要将其截断为一个满足约束条件的值。

  2. 更新 α 1 \alpha_1 α1 :由于 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 之间有线性约束关系,更新 α 2 \alpha_2 α2 后可以直接更新 α 1 \alpha_1 α1。

  3. 更新偏置项 b b b :每次更新 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 后,需要更新偏置项 b b b,以保证分类超平面的正确性。

SMO 算法的优势

  1. 局部优化效率高:每次只需要优化两个变量,计算非常快。通过反复优化不同的拉格朗日乘子对,SMO 可以快速逼近最优解。

  2. 避免矩阵操作:传统的二次规划方法通常需要对大矩阵进行操作,而 SMO 通过只处理两个变量,避免了对整个矩阵的求解,减少了计算复杂度。

  3. 适用于大规模问题:SMO 算法能够很好地处理大规模的数据集,尤其是当样本数量很大时,传统方法难以处理的问题,SMO 也能有效求解。

SMO 算法的局限

  • 选择变量的策略:SMO 的效率在很大程度上取决于选择哪两个乘子来进行优化。如果选择策略不好,算法可能收敛较慢。
  • 对初始点敏感:SMO 对初始值的选择较为敏感,不同的初始值可能导致不同的收敛速度。

总结

SMO 是一种非常有效的算法,特别适合用于大规模支持向量机的训练。通过不断地优化两个拉格朗日乘子,它极大地简化了支持向量机的二次规划问题。由于每次只处理两个变量,SMO 避免了传统方法中的矩阵运算,因此能够处理较大的数据集并且计算速度很快。

相关推荐
南城花随雪。19 分钟前
蚁群算法(Ant Colony Optimization)详细解读
算法
lLinkl26 分钟前
Java面试经典 150 题.P27. 移除元素(002)
算法
大数据AI人工智能培训专家培训讲师叶梓30 分钟前
基于模型内部的检索增强型生成答案归属方法:MIRAGE
人工智能·自然语言处理·性能优化·大模型·微调·调优·检索增强型生成
tangguofeng31 分钟前
合并排序算法(C语言版)
算法
ChaoZiLL1 小时前
关于我的数据结构与算法——初阶第二篇(排序)
数据结构·算法
爱编程的古惑仔1 小时前
leetcode刷题笔记——15.三数之和
笔记·算法·leetcode
中杯可乐多加冰2 小时前
【AI应用落地实战】智能文档处理本地部署——可视化文档解析前端TextIn ParseX实践
人工智能·深度学习·大模型·ocr·智能文档处理·acge·textin
T0uken2 小时前
【机器学习】Softmax 函数
神经网络·机器学习·分类
YRr YRr2 小时前
引入了窥视孔连接(peephole connections)的LSTM
人工智能·rnn·lstm
MogulNemenis2 小时前
随机题两题
java·后端·学习·算法