1 前序
第一次遇到SVM,是在写爬虫作验证码的识别。做完预处理将数字弄成特征向量后,发现SVM能将其正确分类,从此对ML感兴趣。我第一步就想自己将sklearn实现的东西自己去写一遍,体会其中的精妙。结果过了一年半,即将步入本三,才敢说自己对机器学习,支持向量机有了浅显的认知。
![](https://i-blog.csdnimg.cn/blog_migrate/2faf745fdb22ebae7ee2ea402482e233.png)
当时在翻阅网上SVM的教程,发现到处充满了优化的痕迹:KKT, Slater强对偶条件,等等。现在认为混杂了太多优化和数学知识,门槛较高,会强迫读者去接受一些无法证明的结论。其中最有趣的,就是看各个教程各显神通从几何角度解释KKT条件了。然而,从建模角度看SVM,而非触及数值优化的部分,可以让读者清晰的知道SVM在做些什么。
2 介绍
本教程基于Learning from data一书第8章(电子版)整理所得。看懂教程需要:
- 基本的解析几何知识(例如知道三维空间平面可以表示为
等)
- 线性代数简单的运算操作(向量内积,矩阵乘法等)
- 证明中逻辑学的基本符号(因为所以等):
在本节教程你会学/不会学到:
- SVM的数学建模与推理√
- QP问题的数值求解方法×
- KKT条件,Slater强对偶情形×
- 使用python与cvxopt库的QP-solver去实现简单的SVM分类器√
- 步步推导,步步为营√
由于QP问题的数值解法(如内点法)学习门槛过高,也非我们主要关注对象。我引用布鲁斯·布坎南(Bruce G.Buchanan)对于计算机科学领域的分类方式,来说服你们:先别碰这些了。真要学,也不应该从SVM切入。
![](https://i-blog.csdnimg.cn/blog_migrate/a1f050814051dce9b8402b295fa6cfdb.png)
由于教程事先用letax格式书写,有些不方便迁移的部分用图片表示,敬请谅解。
![](https://i-blog.csdnimg.cn/blog_migrate/fc7818c094ff570f55fd168f9b0bba1d.jpeg)
4.2 支持向量(support vector)和分类间隔(margin)