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

前言

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

SMO python 实现

代码中的 αi α i αj α j 对应了前一篇中的 α1 α 1 α2 α 2 ,并且代码中的计算方式都是套用前一篇中推导出来的公式,请仔细体会。另外,以下我把选出来的 αi α i αj α 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酱

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值