本章开始进入SVM的讲解。SVM(Support Vector Machine)指的是支持向量机,是常见的一种判别方法。在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别、分类以及回归分析。
在进入SVM学习之前,需要对以下知识点进行说明,大纲如下:
● 梯度下降法、拉格朗日乘子法、KKT条件回顾
● 感知器模型回顾
● SVM线性可分 (重点)
● SVM线性不可分 (重点)
● 核函数 (重点)
● SMO
1、梯度下降法、拉格朗日乘子法、KKT条件回顾
梯度下降法是一种求极值的算法,在对自变量没有限制条件的时候使用。当函数自变量存在取值范围的时候,就无法使用梯度下降法进行求解了。
10 回归算法 - 梯度下降在线性回归中的应用
11 回归算法 - BGD、SGD、MBGD梯度下降
12 回归算法 - 手写梯度下降代码
对自变量有取值范围的函数,如果要求极值,可以使用拉格朗日乘子法。即在有限制的情况下,对有限制条件的函数进行转化,转化成无限制条件的函数,使转化完的函数和原函数等价,这时取得极值点的时候和原函数相同。这就是拉格朗日乘子法的思想和存在的意义。
02 SVM - 拉格朗日乘子法
当有限制的函数转化成无限制的函数后,就可以通过求偏导的方法(梯度下降法)进行求极值。
KKT条件 是指,满足什么样的条件下,可以让原函数转化成拉格朗日乘子法。
03 SVM - KKT条件
2、感知器模型
直观理解:找到一些直线划分两个不同的分类,使得误分的点越少越好。
04 SVM - 感知器模型
3、SVM线性可分、不可分 (重点)
用感知器找到的直线不止一条,可以找到一条感知器模型的最优解。最后找到的直线称为SVM支持向量机。
SVM支持向量机可以处理两类问题:
SVM线性可分模型 ,即一条直线可以分割两种分类。
05 SVM - 支持向量机 - 概念、线性可分
06 SVM - 线性可分SVM算法和案例
07 SVM - 软间隔模型
08 SVM - 软间隔模型算法流程
SVM线性不可分模型,两种分类比较紧密,用一条直线无法轻易分割。这种问题的处理方式可以将数据映射到高维,通过一个面来分割两类数据,最后求高维面在低维上的映射。
4、核函数 (重点)
解决数据映射到高维时,计算量复杂的问题。
10 SVM - 核函数
5、SMO
SVM通常用对偶问题来求解,这样的好处有两个:1、变量只有N个(N为训练集中的样本个数),原始问题中的变量数量与样本点的特征个数相同,当样本特征非常多时,求解难度较大。2、可以方便地引入核函数,求解非线性SVM。求解对偶问题,常用的算法是SMO,彻底地理解这个算法对初学者有一定难度,本文尝试模拟算法作者发明该算法的思考过程,让大家轻轻松松理解SMO算法。
理解原理即可。
参考: 《用讲故事的办法帮你理解SMO算法》
11 SVM - SMO - 序列最小优化算法
12 SVM - SMO - 初始β变量的选择、总结
13 SVM - SVR(回归问题的SVM)
6、scikit-learn SVM算法库
scikit-learn中SVM的算法库主要分为两类,一类是分类算法,包括:SVC、NuSVC和LinearSVC这三个类,另外一类是回归算法,包括:SVR、NuSVR和LinearSVR这三个类;除此之外,用的比较多的SVM模型还有OneClassSVM类(主要功能是:异常点检测)
详见:http://scikit-learn.org/dev/modules/svm.html
scikit-learn SVM算法库概述分类算法
scikit-learn SVM算法库概述回归算法
一些代码案例:
《14 SVM - 代码案例一 - 鸢尾花数据SVM分类》
《15 SVM - 代码案例二 - 鸢尾花数据不同分类器效果比较》
《16 SVM - 代码案例三 - 不同SVM核函数效果比较》
《17 SVM - 代码案例四 - 不同SVM惩罚参数C值不同效果比较》