机器学习(十八) ——SVM实战

机器学习(十八)——SVM实战

(原创内容,转载请注明来源,谢谢)

一、概述

本篇主要用python来实现SVM算法,并用SVM算法进行预测分类结果。对于SMO的计算,是以上一篇的理论分析为基础的。

SMO的核心思想,就是每次选择两个α,其中第一个α是随机选出来的,第二个α根据一定的优化规则选出来,然后计算这两个α对应的拉格朗日乘子的结果,查看是否符合KKT条件,对于不符合条件且可以更新的α,进行更新。

二、前期准备

1、数据准备

由于SVM的计算,是wx+b,而不是logistic中的θx,因此这里取数据的时候,不需要人工添加上x0=1这一项,而是直接从x1开始的。

2、辅助函数—限定变量上下界

这个主要是在后面,SMO算法中,需要更新α2,更新的时候,要保证更新的α必须在0~C之间,因此这里写了辅助函数。

3、核函数

核函数K(x)非常方便,可以用线性函数、高斯核函数等进行替换,核函数有很多,这里目前就实现了线性函数和高斯核函数。

4、辅助数据结构

这里定义了一个辅助的类,便于存储训练样本、分类结果、参与训练α的参数C、允许误差的偏差toler(实际是ξ符号)、核函数等。

5、计算误差

这里的误差计算,是用于调整α的,实际公式是α*y*K(x)+b-y。

6、选择第二个α

根据第一个α的下标,以及误差值,还有辅助类,保证在有误差的元素中进行选择,且不能取到同一个元素,且还需要取到误差相对来说最大的元素。但是如果是第一次选择,那就随机选择一个即可。

7、误差存储

优化后的SMO算法,与普通的SMO算法,最大的区别,就在于其有对误差进行存储,且保证第一次遍历整个样本后,第二次开始,只更新所关心的支持向量的优化,而并不需要整个样本的点参与优化。

这里更新完,存储在辅助类的属性中。

三、内循环—选择第二个α

内循环,目的是选择第二个α,而这个前提是第一个选出来的α是可以更新的,其对应的约束条件为:

这就是下面的if语句中的判断。

而对于α的更新,其还有个约束条件,即α有对应的最值,不能超过0~C的区间,如下规则(具体原因见上一篇文章的推导过程):

得到α2的区间后,还需要更新出α2,进而更新出α1,以及b(具体原因见上一篇文章的推导过程)。

四、外循环

外循环的目的是根据一定的条件选出α1,再调用上面的选择α2的内循环,主要在于控制集合的范围。

这里即体现了优化的SMO的思想:第一次训练,则要循环整个样本集,但是仅存储误差需要更新的对应的α,将其存储在辅助类中;第二次开始,则从辅助类中取点,只对辅助类中的点进行更新;当辅助类的点都更新完,如果训练的次数还没超过预定的训练上限,则再次取整个样本集。以此类推进行训练。

五、测试以及执行结果

测试的过程则比较简单,把样本集传入上面定义好的函数,设定C、ξ、训练次数、核函数,即可得到对应的α和b,利用这两个参数(α实际上是一个矩阵),再对测试样本进行判断结果。

这里可以看到,当通过SMO算法,得到α和b后,实际上已经不需要再次用训练数据进行训练,下面代码中的训练和测试实际上可以理解成两次的测试过程。

下面是执行结果的部分截图。可以看到错误率15%,算是比较低的。

六、总结

支持向量机,是一个比较有趣的算法,经过这几天的学习,我对里面的大部分的公式和编码过程有了大致的了解,具体的细则还没了解的那么透,后面还会继续深入学习。接下来可以迈入新的学习内容了。

我感觉学习的过程,还是贵在坚持,而且要静下心来。对于看不懂的内容,多查资料;对于数学公式,自己一步步去推导;对于代码,一行行去看。慢慢的就会有种融会贯通的感觉。

——written by linhxx 2018.01.20

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-01-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯Bugly的专栏

手机端运行卷积神经网络实现文档检测功能(二) -- 从 VGG 到 MobileNetV2 知识梳理

5964
来自专栏决胜机器学习

从机器学习学python(四) ——numpy矩阵广播及一些技巧

从机器学习学python(四)——numpy矩阵广播及一些技巧 (原创内容,转载请注明来源,谢谢) 在学ng的深度学习微专业时,其中有几节课讲到numpy的一...

3714
来自专栏和蔼的张星的图像处理专栏

图像旋转即c++实现

主要还是考虑面试的时候会不会用到,刚才好好看了下旋转的这个思路,其实和图像缩放的思路差不多的,主要的问题是要找到坐标的映射方式。 因为还是包含了一部分的公式,...

1334
来自专栏机器学习养成记

决策树(R语言)

决策树是有监督学习算法中的一种。基于属性做一系列的决策,每次决策要么进入下一级决策,要么生成最终结果。决策树可以作为集成算法中的基分类器,并且有最为广泛的应用。...

29511
来自专栏数据处理

Home Depot Product Search Relevance

kaggle赛题链接Home Depot Product Search Relevance,这个题目关键点就是特征提取,给的数据需要观察处理

761
来自专栏ATYUN订阅号

Python机器学习的练习八:异常检测和推荐系统

在这篇文章中,将会涉及两个话题——异常检测和推荐系统,我们将使用高斯模型实现异常检测算法并且应用它检测网络上的故障服务器。我们还将看到如何使用协同过滤创建推荐系...

7757
来自专栏机器之心

学界 | MIT与微软联合论文提出深度API编程器:可通过API调用合成新程序

选自arXiv.org 机器之心编译 参与:吴攀 让机器学会自动编程一直以来都是人工智能研究界所追求的一个重要目标,甚至被一些人认为是实现真正通用的人工智能...

2735
来自专栏机器之心

资源 | 十倍模型计算时间仅增20%:OpenAI开源梯度替换插件

3109
来自专栏灯塔大数据

每周学点大数据 | No.35缩图法(二)

No.35期 缩图法(二) Mr. 王:现在我们一步一步来分析。首先,每加入一条边,都会构成一个新的连通分量,或者在已有的连通分量上增加一个点,这意味着每一...

3339
来自专栏人工智能

从程序员的角度设计一个Java的神经网络

用Java或任何其他编程语言设计神经网络我们需要理解人工神经网络的结构和功能。

1.2K10

扫码关注云+社区