SVM-支持向量机

来源:互联网 发布:计量型数据什么? 编辑:程序博客网 时间:2024/05/22 14:15

SVM

标签(空格分隔): ML


  • SVM
    • 线性SVM
      • 1 为什么要大的间隔直觉
      • 2 间隔的计算
      • 3 解的形式转化
      • 4 二次规划求解
      • 5 为什么要大间隔降低模型复杂度
    • 对偶SVM
      • 1 非线性SVM
      • 2 对偶转换
      • 3 对偶形式的简化
      • 4 SVM隐藏的信息
    • 核型SVM
      • 1 高维问题
      • 2 kernel
      • 3 Polynomial Kernel
      • 4 Gaussian Kernel
      • 5 Comparison of Kernels
    • 软间隔SVM
      • 1 引入软间隔-容忍误差
      • 2 软间隔SVM的求解类似于硬间隔SVM
    • SMO算法
      • 0 SMO算法思路
      • 1 2个变量二次规划的求解方法
        • 11 问题形式转变
        • 12 变量的约束范围
        • 13 a_2的求解
      • 2 变量的选择方法
        • 21 第1个变量的选择
        • 22 第2个变量的选择
        • 23 更新b和E_i
      • 3 算法流程

本文主要来源于台湾大学林轩田在Coursera的课程《机器学习技术》

1. 线性SVM

1.1 为什么要大的间隔——直觉

间隔越大能容忍越大的误差,越健壮:
Snip20160321_2.png-123.4kB

线性分类转变为:
Snip20160321_3.png-86.8kB

1.2 间隔的计算

向量映射:
Snip20160321_4.png-138.1kB

1.3 解的形式转化

(1)w和b的Scale对解没有影响,选择特定Scale的w和b,对解的形式进行化简:
Snip20160321_5.png-144.1kB

(2)对目标函数进行转换:避免根号的计算;求最大值问题,变为求最小值问题:
Snip20160321_6.png-169.3kB

1.4 二次规划求解

对于带约束的解,只能用二次规划求解:
Snip20160321_9.png-120.3kB
代入二次求解公式:
Snip20160321_10.png-146kB
解:
Snip20160321_11.png-69.2kB

1.5 为什么要大间隔——降低模型复杂度

zn=ϕ(xn), ϕ为特征转换函数)SVM的大间隔相当于在保证分类准确率的情况下,尽可能的正则化:
Snip20160321_13.png-110kB

Aρ:分类间隔必须大于等于ρ. 通过限制分类间隔,可以降低模型的VC维,即模型的复杂度降低:
Snip20160321_14.png-174.8kB

大间隔可以降低模型复杂度;特征转换可以使分类边界比较复杂:
Snip20160321_15.png-145.3kB

2. 对偶SVM

Solving non-linear Support Vector Machine
Snip20160321_16.png-71.4kB

2.1 非线性SVM

进行非线性转换后,维度从d变为d̃ , d̃ 可能变的很大甚至是无限大:
Snip20160321_17.png-185.7kB

2.2 对偶转换

对偶的目的在于将d̃ -(b,w)维参数优化问题,转化为N-(λ,拉格朗日参数)维参数优化问题:
Snip20160321_18.png-168.3kB

等价的拉格朗日形式(去除限制条件):
Snip20160321_19.png-190.2kB

对偶形式:
Snip20160321_21.png-135.7kB

强对偶性(现在不理解。。。。)
Snip20160321_22.png-146.5kB

2.3 对偶形式的简化

通过对b求导数,令导数为0,求最小值;利用导数为0得到的式子,去除变量b
Snip20160321_23.png-142.3kB

通过对w求导数,令导数为0,求最小值;得到w的表达式,去除变量w:
Snip20160321_24.png-147.3kB

KKT条件:原始问题和对偶问题的限制条件都满足,原始问题和对偶问题的内部变量的导数值均为0. 若一个变量满足KKT条件,则其为原始问题和对偶问题的最优解。
Snip20160321_25.png-174.7kB

最终的对偶形式:
Snip20160321_26.png-128.3kB

对于上述最终形式利用优化包,可求解到α
Snip20160321_31.png-167.3kB

求出α后,进一步求解bw:
Snip20160321_27.png-183.5kB

2.4 SVM隐藏的信息

非支持向量上的点,α为0;只有在支持向量上的点对wb的值有影响;即支持向量机,被2条支持向量所决定:
Snip20160321_28.png-188.1kB

SVM与PLA(感知机)间的联系:
Snip20160321_29.png-131.2kB

3. 核型SVM

核型SVM解决高维空间计算问题。
Snip20160321_30.png-75.6kB

3.1 高维问题

d̃ 可能非常大:
Snip20160321_32.png-94.6kB

3.2 kernel

Inner Product可用转换前d复杂度,完成d̃ 复杂度的计算:
Snip20160321_33.png-131.6kB

Kernel = Transform + Inner Product:
Snip20160321_34.png-177.9kB

Kernel SVM:所有的与高维d̃ 有关的计算都可以通过Kernel函数计算完成:
Snip20160321_35.png-218kB

3.3 Polynomial Kernel

Poly-2 Kernel:
Snip20160321_36.png-137.6kB

Snip20160321_37.png-179.8kB

推广的多项式核:
Snip20160321_38.png-163.2kB

线性核:
Snip20160321_39.png-112.6kB

3.4 Gaussian Kernel

Gaussian Kernel可看作特征被转换到无限维:
Snip20160321_40.png-171.2kB

一般性的Gaussian Kernel:
Snip20160321_41.png-153.9kB

Gaussian Kernel SVM可以实现无限维的线性分隔,同时用最大间隔保持泛化能力:
Snip20160321_42.png-132.5kB

Gaussian Kernel SVM的实际使用:
Snip20160321_43.png-188.5kB

3.5. Comparison of Kernels

有效核的充分必要条件:对称和半正定
Snip20160321_47.png-158.1kB

线性核:快速和易理解,但只能用于直线分隔
Snip20160321_44.png-121.8kB

多项式核:可用于曲线分隔;但数值可能会很大,而且有3个参数,参数选取比较复杂
Snip20160321_45.png-151.1kB

高斯核:很强大,可用于各种分隔;相比多项式核,数值在一定范围内,而且只有一个参数,易于调节
Snip20160321_46.png-171.7kB

4. 软间隔SVM

4.1 引入软间隔-容忍误差

允许有一些例子被错分:
Snip20160322_59.png-157.6kB

上述的形式,不能求导,也不能区分大的误差和小的误差;因此引入软间隔SVM:
Snip20160322_60.png-173.2kB

4.2 软间隔SVM的求解(类似于硬间隔SVM)

拉格朗日对偶方程:
Snip20160322_61.png-127.6kB

εn求导,令导数为0求极值,消去εβ;解的形式与硬间隔解的形似基本相同:
Snip20160322_62.png-151.5kB

应用与硬间隔相同的求解方法,得到如下形式:
Snip20160322_63.png-126.9kB

应用凸优化包进行求解:
Snip20160322_64.png-167kB

b的求解(注意as>0就是支持向量,不一定非得在边上的点才叫支持向量):
Snip20160322_65.png-167kB

不同SV范围内的an,εn取值:
Snip20160322_66.png-187kB

5. SMO算法

这部分内容,参考自李航的《统计学习方法》

5.0 SMO算法思路

要解决的问题:
Snip20160324_5.png-31.2kB
思路:选择2个变量,固定其它变量,针对这2个变量构建一个二次规划问题
Snip20160324_7.png-108.9kB

Snip20160324_6.png-56.7kB

5.1 2个变量二次规划的求解方法

5.1.1 问题形式转变

Snip20160324_8.png-45.7kB
Snip20160324_9.png-29.6kB

5.1.2 变量的约束范围

Snip20160324_10.png-39.4kB
Snip20160324_11.png-44.1kB

  • y1y2:
    k=a1a2=aold1aold2
    0a1=k+a2C0a2C
    可得:L=max(0,aold2aold1),H=min(C+aold2aold1,C)

同理可得:

  • y1=y2: L=max(0,aold2+aold1C),H=min(aold2+aold1,C)

5.1.3 a2的求解

没有约束条件下的求解:
W(a2)为关于a2的2次函数,且a2的系数k11+k222k12=|ϕ(x1)ϕ(x2)|20, 所以W(a2)在导数为0的点取得最小值,且越接近该点,值越小。(这里的思路好像有问题。。。。。。)
Snip20160324_12.png-44.4kB
Snip20160324_13.png-108.5kB

a2加上约束条件:
Snip20160324_14.png-31.1kB

5.2 变量的选择方法

选择的2个变量,至少有一个变量是违反KKT条件的

5.2.1 第1个变量的选择

Snip20160324_18.png-47.5kB
Snip20160324_19.png-32.1kB

检验过程中怎样选择样本点,《统计学习方法》没有讲清楚;原文《Sequential Minimal Optimization - A Fast Algorithm for Training Support Vector Machines》是这样描述的:
Snip20160324_17.png-28.6kB

  • (1) 遍历整个训练集,找一个违反KKT条件的样本点
  • (2) 遍历间隔边界(0<ai<C)上的样本点,找一个违反KKT条件的样本点
    (1)和(2)构成一个寻找的循环,但对于每个循环,(2)会进行多次,直到所有间隔边界上的点都满足KKT才停止。

5.2.2 第2个变量的选择

Snip20160324_20.png-33.7kB

  • (1) anew2依赖于|E1E2|, E1已知,选择a2,使其对应的|E1E2|最大
  • (2)如果以上方法选择的a2不能使目标函数的选择有足够的下降,那么遍历在间隔边界上的点,依次讲其对应的变量作为a2试用,直到目标函数有足够的下降。
  • (3)找不到合适的a2,遍历整个训练数据集
  • (4)若仍找不到合适的a2,则放弃第一个a1,再通过外层循环找另外的a1

5.2.3 更新bEi

Snip20160324_21.png-23.4kB

Snip20160324_22.png-71.6kB

5.3 算法流程

Snip20160324_15.png-80.7kB
Snip20160324_16.png-19.1kB

0 0
原创粉丝点击