zoukankan      html  css  js  c++  java
  • 统计学习方法 李航---第7章 支持向量机

    第7章 支持向量机

    支持向量机(support vector machines, SVM)是一种二类分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming)的问题,也等价于正则化的合页损失函数的最小化问。支持向量机的学习算法是求解凸二次规划的最优化算法。

    支持向量机学习模型:线性可分支持向量机(linear support vector machine in linearly separable case )、线性支持向量机(linear support vector machine)及非线性支持向量机(non-linear support vector machine)。学习方法包括:硬间隔最大化(hud margin maximization)、软间隔最大化(soft margin maximization)、核技巧(kernel trick)。通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。这样的方法称为核技巧(kernel trick)

    7.1 线性可分支持向量机与硬间隔最大化

    定义7.1 (线性可分支持向量机):给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为

    4f34cad4-5f67-4aa9-9a40-a296c2a68afb

    以及相应的分类决策函数

    39588f12-8e53-44db-a649-41c863f67b24

    称为线性可分支持向量机.

    函数间隔和几何间隔

    定义7.2(函数间隔  functiona lmargin):对于给定的训练数据集T和超平面(w, b),定义超平面关于样本点(xi, yi)的函数间隔为

    0fdead85-e023-4225-8a7e-beca9b97a554

    定义超平面(w,b)关于训练数据集T的函数间隔为超平面(w,b)关于T中所有样本点(xi, yi)的函数间隔之最小值,即

    dfd9abeb-2f5b-4091-a520-b7e50f4ac27e

    函数间隔可以表示分类预测的正确性及确信度。但是成比例地改变w和b,例如将它们改为2w和2b,超平面并没有改变,但函数间隔却成为原来的2倍。

    对分离超平面的法向量、加某些约束,如规范化,||w||=1,使得间隔是确定的。这时函数间隔成为几何间隔。

    定义7.2(几何间隔 geometric margin):对于给定的训练数据集T和超平面(w, b),定义超平面关于样本点(xi, yi)的函数间隔为

    5a3ad74c-1130-4cea-b025-866edf09f654

    定义超平面(w,b)关于训练数据集T的函数间隔为超平面(w,b)关于T中所有样本点(xi, yi)的函数间隔之最小值,即

    ce16dcf9-2a27-457e-b8c5-883b34d91116

    函数间隔和几何间隔的关系:

    1f969fe8-50ba-496f-b291-a80189ebb42a

    如果超平面参数w和b成比例地改变(超平面没有改变),函数间隔也按此比例改变,而几何间隔不变。

    间隔最大化

    支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面是唯一的。这里的间隔最大化又称为硬间隔最大化。   

    间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类,也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。

    线性可分支持向量机的学习算法——最大间隔法(maximum margin method)。

    86139cf7-7256-4c2e-9440-30c89fba14f2

    定理7.1 (最大间隔分离超平面的存在唯一性):若训练数据集z线性可分,则可将训练数据集中的样本点完全正确分开的最大间隔分离超平面存在且唯一。

    支持向量和间隔边界

    在线性可分情况下,训练数据集的样本点中与分离超平面跄离最近的样本点的实例称为支持向量( support vector )。支持向量是使约束条件式等号成立的点,即

    789b7362-f5ce-4253-8efe-e2137b4b1ec5

    对yi=+1的正例点,支持向量在超平面5f9b7317-ce09-4c89-8499-704cd3ef8edd

    对yi=-1的负例点,支持向量在超平面d74b323a-aa9d-474f-a776-e24c4cc2da68

    下图中在H1和H2上的点就是支持向量

    509f593c-9f7e-4199-94b9-3283b0847944

    H1和H2之间的距离称为间隔(margin)。间隔依赖于分离超平面的法向量w,等于2/||w||。H1和H2称为间隔边界.

    在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。如果移动支持向量将改变所求的解;但是如果移动其他实例点,甚至去掉这些点,则解是不会改变的。由于支持向量在确定分离超平面中起决定性作用,所以将这种分类模型称为支持向量机。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。

    学习的对偶算法(dual algorithn)

    构建拉格朗日函数(Lagrange function),引进拉格朗日乘子(Lagrange multiplier):

    3cf878be-9207-4713-9435-bdf4f391a82f

    根据拉格朗日对偶性,原始问题的对偶问题是拉格朗日函数的极大极小问题

    b35ebd22-8c2c-4efa-a0a6-ea6322ad102a

    定理7.2:设a*是对偶最优化问题的解,则存在下标j使得aj* >0,并可按下式求得原始最优化问题的解:

    dfa4474b-0d55-49ee-a714-8bb02d82b4d5

    算法7.2(线性可分支持向量机学习算法)

    bbabfe7c-8095-4104-b626-7124e9c43652

    定义7.4(支持向量):将训练数据集中对应于ai*>0的样本点(xi, yi)的实例xi称为支持向量。支持向量一定在间隔边界上。

    ab4f71eb-e428-4309-997f-17c83ee892cb8e95762d-483f-4c6a-a122-43c53f392100

    7.2 线性支持向量机与软间隔最大化

    针对线性不可分训练数据:

    线性不可分意味着某些样本点不能满足函数间隔大于等于1的约束条件,为了解决这个问题,可以对每个样本点引进一个松弛变量,约束条件变为:

    3916fdda-1a67-432d-9af5-cf231acc2485

    线性不可分的线性支持向量机的学习问题变成凸二次规划(convex quadratic progamming )问题(原始问题):

    1d5a8c54-3d25-4e42-aecb-d1d12df0a6f8

    定义7.5(线性支持向量机):对于给定的线性不可分的训练数据集,通过求解凸二次规划问题,即软间隔最大化问题。得到的分离超平面为

    09cbb788-31ce-4e1d-b261-cbca4903c811

    以及相应的分类决策函数

    1784da58-1611-4c9f-9358-d9e3aa6956e8

    称为线性支持向量机.

    学习的对偶算法(dual algorithn) :拉格朗日函数

    通过求解对偶问题得到

    定理7.3:设a*是对偶最优化问题的一个解,则存在一个分量0<aj* <C,可得原始最优化问题的解:

    5e3d3502-6e29-411c-88f1-1644e90a50d9

    算法7.3(线性支持向量机学习算法)

    96ffadce-18a0-420e-a472-f9e1cb5fb138

    支持向量

    线性不可分的情况下,将对偶问题的解a*中对应于aj* > 0的样本点(xi,yi)的实例xi称为支持向量(软间隔的支持向量)。

    a38fbe6a-3a58-4a36-a37f-4ab85c9b9d9c

    软间隔的支持向量xi或者在间隔边界上,或者在间隔边界与分离超平面之间,或者在分离超平面误分一侧。

    若a*<C,则约束401120af-9701-4bc1-8bf4-6286b6352e2a,支持向量xi恰好落在间隔边界上;

    若a*<C,0<约束<1,则分类正确,xi在间隔边界与分离超平面之间;

    若a*<C,约束=1,则xi在分离超平面上:

    若a*<C,约束>1,则xi位于分离超平面误分一侧.

    合页损失函数

    线性支持向量机学习还有另外一种解释,就是最小化以下目标函数

    c3715bf8-b810-4c9a-b9c9-26a41affd59c

    目标函数的第1项是经验损失或经验风险,函数

    d1cf6309-84fc-4122-bf0f-0d464a4b338a

    称为合页损失函数(hinge loss ftmction)

    定理7.4 线性支持向量机原始最优化问题等价于最优化问题:

    bb231fd3-26a4-43fb-8e81-fece5f494659

    9cb75fb7-253b-40af-8c1d-a4da7cce8840

    合页损失函数不仅要分类正确,而且确信度足够高时损失才是0。

    7.3 非线性支持向量机与核函数

    核技巧
    非线性分类问题:如果能用Rn中的一个超曲面将正负例正确分开,则称这个问题为非线性可分问题.

    求解方法:进行非线性变换,将非线性问题变成线性问题。

    核技巧应用到支持向量机,其基本想法就是通过一个非线性变换将输入空间(欧氏空间Rn或离散集合)对应于一个特征空间(希尔伯特空间H),使得在输入空间Rn中的超曲面模型对应于特征空间H中的超平面模型(支持向量机)。

    定义7.6(核函数)设X是输入空间,H为特征空间,如果存在一个映射映射函数

    e96165e1-009b-48a1-832a-607bf056c2ed

    使得对所有属于X的x,z,函数K(x,z)满足条件

    a3a2eaf9-c2c8-4649-a322-767cfcb7b4f2

    则称K(x,z)为核函数。

    核技巧的想法是,在学习与预测中只定义核函数K(x,z),而不显式地定义映射函数。对于给定的核K(x,z),特征空间x和映射函数的取法并不唯一,可以取不同的特征空间,即便是在同一特征空间里也可以取不同的映射。

    核技巧在支持向量机中的应用

    在对偶问题的目标函数中的内积(xi*xj)可以用核函数K(xi, xj)来代替:

    a7ed2e79-2ffb-4aef-b12f-828b5e3fdaf0

    分类决策函数也可用核函数代替,变为:

    308a9c5e-7cbc-48b6-ba00-0dfd119761d8

    这等价于经过映射函数将原来的输入空间变换到一个新的特征空间,将输入空间中的内积(xi*xj)变换为特征空间中的内积4889bcf4-3647-410f-8563-d853c839ee59。在新的特征空间里从训练样本中学习线性支持向量机。当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性分类模型。

    在核函数给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行的,不需要显式地定义特征空间和映射函数。这样的技巧称为核技巧。

    正定核(positive definite kernel function)的充要条件

    定理7.5(正定核的充要条件) 设K:X*X->R是对称函数,则K(x,z)为正定核函数的充要条件是对任意xi属于X,i=1,2,... ,m,  K(x,z)对应的Gram矩阵

    9483c4e5-ab6a-43f0-ae46-5033351f68c3

    是半正定矩阵.

    定义7.7 (正定核的等价定义)

    设X包含于Rn,K(x,z)为定义在X*X上的对称函数,如果对任意xi属于X,i=1,2,... ,m,  K(x,z)对应的Gram矩阵

    9483c4e5-ab6a-43f0-ae46-5033351f68c3[1]

    是半正定矩阵,则称K(x,z)是正定核。

    常用核函数

    (1) 多项式核函数(polynomial kernel function)

    386f8dbe-1efc-46b2-90a6-92eb2f6c95ad

    对应的支持向量机是一个P次多项式分类器.在此情形下,分类决策函数成为

    094d6867-f16b-452b-8d17-8650b50ef909

    (2)高斯核函数(Gaussian kernel  function)

    78560be6-5204-4516-ba36-f19c1f0f32f9

    对应的支持向量机是一个高斯径向基函数( radial basis function )分类器.在此情形下,分类决策函数成为

    959f717c-d0d0-4ed7-b854-62c834829492

    (3)字符串核函数(string kernel function)

        核函数不仅可以定义在欧氏空间上,还可以定义在离散数据的集合上。比如,字符串核是定义在字符串集合上的核函数。

    两个字符串s和t上的字符串核函数是基于映射

    db5778ec-3034-4188-bdce-d0968a028a32

    的特征空间中的内积

    0d26b91e-31a7-4559-ada6-dccb2144f0c3

    字符串核函数气kn(s, t)给出了字符串s和t中长度等于n的所有子串组成的特征向量的余弦相似度(cosine similuity)。直观上,两个字符串相同的子串越多,它们就越相似,字符串核函数的值就越大。字符串核函数可以由动态规划快速地计算。

    非线性支持向量分类机

    定义7.8 (非线性支持向量机) 从非线性分类训练集,通过核函数与软间隔最大化,或凸二次规划,学习得到的分类决策函数

    1bf4bdb2-0a6b-4687-816b-d748ef1d94ff

    称为非线性支持向量,K(x,z)是正定核函数

    63f233fd-392d-4a3b-814d-a0a3f268ac3e

    7.4 序列最小最优化算法(sequential minimal opfimization,SMO)

    SMO算法要解如下凸二次规划的对偶问题:

    e22bbdde-cd11-48e2-b92f-04dcfe7de6e0

    SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件(Karush-Kuhn-Tucker conditions),那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。

    整个SMO算法包括两个部分:求解两个变量二次规划的解析方法和选择变量的启发式方法.

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

    不失一般性,假设选择的两个变量是a1,a2,其他变量ai (i=3,4, ..., N)是固定的。SMO的最优化问题的子问题可以写成:

    53256721-f2fe-4103-8707-d1873957b25e

    假设初始可行解为a1old和a2old,最优解为a1new和a2new,满足

    51a1329f-7585-4ede-92fa-bf98def0ca60

    L与H是a2new所在的对角线段端点的界

    5d8507e3-9131-4e5f-865f-673cfbc04b12

    如果y1 != y2,

    d76bf7c0-b460-4f02-8be1-377822320277

    如果y1 = y2,

    995549ce-76ee-4e56-bb49-af928b3ad403

    根据约束条件,有

    2165530b-ecc7-428d-b82b-829b09783204

    引入记号,

    2c761f00-ffe9-43fa-b492-bfd052794656

    d11d09c5-723b-49a9-9219-5deb98e2a8a9

    fcb1841c-ba4f-44ee-8dc2-6812702a9d83

    代入到最优化问题中,有

    987fcd02-6219-489a-b33a-7f4062aacde9

    这样,通过对W进行求导可以得到

    定理7.6 最优化问题沿着约束方向未经剪辑时的解是

    e2398718-ed70-44df-bf9f-493f36548cde  56ef3e48-6ffc-4f67-bfc5-53574b3780b9经剪辑后的解是

    e4666783-775c-4041-b21e-09b561c78740bef7ab4f-0351-423a-ad7a-2f491a9c1a0e

    变量的选择方法

    第1个变量的选择

        SMO称选择第1个变量的过程为外层循环。外层循环在训练样本中选取违

    反KKT条件最严重的样本点,并将其对应的变量作为第1个变量。具体地,检

    验训练样本点(xi,yi)是否满足KKT条件,即

    b5a726f5-08e4-4d70-9b14-4815811e7196

    该检验是在3753c0ab-830f-483b-84ba-396c63ba9ef5范围内进行的。在检验过程中,外层循环首先遍历所有满足条件47fe6e3c-dc5d-4c53-9763-707a3e2c3468的样本点,即在间隔边界上的支持向量点,检验它们是否满足KKT条件。如果这些样本点都满足KKT条件,那么遍历整个训练集,检验它们是否满足KKT条件。

    第2个变量的选择

    SMO称选择第2个变量的过程为内层循环。假设在外层循环中已经找到第1个变量a1,现在要在内层循环中找第2个变量a2。第2个变量选择的标准是希望使a2有足够大的变化.

    由定理7.6可知a2是依赖于|E1-E2|的,为了加快计算速度,一种简单的做法是选择a2使其对应的|E1-E2|最大。因为a1已定,E1也确定了。如果E1是正的,那么选择最小的Ei作为E2;如果E1是负的,那么选择最大的Ei作为E2。在特殊情况下,如果内层循环通过以上方法选择的a2不能使目标函数有足够的下降,那么采用以下启发式规则继续选择a2。遍历在间隔边界上的支持向量点,依次将其对应的变量作为a2试用,直到目标函数有足够的下降。若找不到合适的a2,那么遍历训练数据集;若仍找不到合适的a2,则放弃第1个a1,再通过外层循环寻求另外的a1

    计算阈值b和差值Ei

    由变量选择的检验条件可得,

    如果89be1833-04ec-4f63-a170-e1fcbc48d645

    ab193a8d-861f-496d-98e7-e84b8d8a51b2

    如果fafc9cbb-7e5b-45a3-9d8b-77409441a436

    4e1047e6-1e03-4f25-9cea-65be0fc396f4

        如果a1new和a2new同时满足条件ebdbcc26-b2f3-4721-8dcd-e4dfec1344e4那么1fe6805a-d6c9-47ed-a9db-1c47483cfbd2。如果a1new和a2new是0或者C,那么b1new和b2new以及它们之间的数都是符合KKT条件的阈值,这时选择它们的中点作为bnew

    Ei值的更新要用到bnew值,以及所有支持向量对应的aj

    9a44009b-9251-4908-8161-141a76e901e3

    其中S是所有支持向量xj的集合

    3e39303e-5179-49b3-a446-d575403daed4

  • 相关阅读:
    LeetCode Find Duplicate File in System
    LeetCode 681. Next Closest Time
    LeetCode 678. Valid Parenthesis String
    LeetCode 616. Add Bold Tag in String
    LeetCode 639. Decode Ways II
    LeetCode 536. Construct Binary Tree from String
    LeetCode 539. Minimum Time Difference
    LeetCode 635. Design Log Storage System
    LeetCode Split Concatenated Strings
    LeetCode 696. Count Binary Substrings
  • 原文地址:https://www.cnblogs.com/YongSun/p/4767130.html
Copyright © 2011-2022 走看看