SVM(Support Vector Machines)
近年已被深度学习所替代
SVM寻找区分两类的超平面(hyper plane),使边际(margin)最大
向量内积:
范数:
当时,可以求余弦相似度:
算法推论:
转化为凸优化问题:
——》,求最大值,即求
而凸优化问题一般有三种情况:
1、无约束优化问题: 费马定理
2、带等式约束的优化问题:
-拉格朗日乘子法:
s.t.
3、带不等式约束的优化问题:
-KKT条件
s.t.
而算法是在的条件下求
实际上存在时,取1,即属于第2种情况
广义拉格朗日乘子法:
而KKT条件(Karush-Kuhn-Tucker最优化条件)
是拉格朗日乘子法的一种推广,可以处理有不等号的约束条件
进一步简化为对偶问题
上述问题可以改写成:
可以等价为下列对偶问题:
消除w,b——
s.t.
s.t.
由此可得最优解,带入后得
SMO算法
针对线性SVM和稀疏数据时性能更优
s.t.
s.t.
基本思路是先根据约束条件随机给赋值,然后每次选举两个,调节这两个使得目标函数最小。然后再选取两个,调节使得目标函数最小。以此类推
线性不可分的情况
引入松弛变量与惩罚函数
松弛变量
约束条件没有体现错误分类的点要尽量接近分类边界
惩罚函数
使得分错的点越少越好,距离分类边界越近越好
线性不可分下的对偶问题:
——》
s.t.
s.t.
eg:
可知目标函数为:, s.t. ,
其中
然后,将带入目标函数,得到一个关于和的函数
对求偏导,并令其为0
可知在(1.5,-1)处取极值
而(1.5,-1)不满足的约束条件,可推断最小值在边界上达到
经计算,
当时,
当时,
所以,在时取最小值
此时可算出
所以,不等于0,所以对应点和就应该是支持向量
进而
即。进而有
因此最大间隔分类超平面为
分类决策函数为
非线性的情况
把低维空间的非线性问题映射到高维空间,变成求解线性问题
映射举例:
3维输入向量
转化到6维空间中去:
新的决策超平面,其中和是向量,这个超平面是线性的,解出和之间,并且带回原方程
存在的问题:
1、维度灾难
2、如何选择合理的非线性转换
核函数
我们可以构造核函数使得运算结果等同于非线性映射,同时运算量要远远小于非线性映射
h次多项式核函数:
高斯径向基函数核函数:
S型核函数:
SVM优点
-算法复杂度由支持向量的个数决定,而非数据维度,所以不太易产生overfitting
-SVM训练出来的模型完全依赖于支持向量(Support Vectors)即使训练集里面所有非支持向量的点都被去除,重复训练过程,结果仍会一样
-一个SVM如果训练得出的支持向量个数比较小,SVM训练出的模型比较容易泛化