SVM系列之SMO的Python实现(四)

前言

经过前面三篇漫长的 SVM 介绍以及 SMO 算法的原理介绍和公式推导,终于到了 SMO 的算法实现以及最终的 SVM 分类实现了。那么现在就先看看 SMO 的 python 实现。

SMO python 实现

代码中的 \(\alpha_{i}\),\(\alpha_{j}\) 对应了前一篇中的 \(\alpha_{1}\) 和 \(\alpha_{2}\),并且代码中的计算方式都是套用前一篇中推导出来的公式,请仔细体会。另外,以下我把选出来的 \(\alpha_{i}\),\(\alpha_{j}\) 分别成为第一个 alpha 值和第二个 alpha 值。

首先定义一个核转换函数用于计算训练集矩阵(X)与任意给定样本矩阵间的核转换结果。

下面定义一个 SVMStruct 类来封装一些属性和方法,以便可以快速构建一个 SVM 模型。

接下来定义一些 SVMStruct 类下的辅助方法。

接下来,函数 innerL为 SMO 主程序内层循环的代码。

外层循环的代码:

计算权重 \(w\) 的函数:

分类函数的代码:

最后是 plot 出样本点,和划分线:

那么最后可视化的结果为:

  1. 本例中所用的数据集必须使用线性核才使得样本可分。
  2. 本文代码见个人github repository MLCodeOnTheBlog

参考

[1] <<机器学习实战-中文版>>
[2] Sequential Minimal Optimization:
A Fast Algorithm for Training Support Vector Machines
by John C. Platt
[3] 机器学习算法与Python实践之(四)支持向量机(SVM)实现 by zouxy
[4] 机器学习算法实践-SVM中的SMO算法 by PytLab酱

-------------本文结束感谢您的阅读-------------