zoukankan      html  css  js  c++  java
  • 支持向量机

    来源:http://www.hankcs.com/ml/support-vector-machine.html

    一、概述

    支持向量机(support vector machines,SVM)是一种二类分类模型。

    支持向量机的学习算法是求解凸二次规划的最优化算法。

     分类:

    线性可分支持向量机(linear support vector machine in linearly separable case)

    线性支持向量机(linear support vector machine)

    非线性支持向量机(non-linear support vector machine)。

     

    假设输入空间与特征空间为两个不同的空间。输入空间为欧氏空间或离散集合,特征空间为欧氏空间或希尔伯特空间。

    线性可分支持向量机、线性支持向量机假设这两个空间的元素一一对应,并将输入空间中的输入映射为特征空间中的特征向量。

    非线性支持向量机利用一个从输入空间到特 征空间的非线性映射将输入映射为特征向量。

    由输入空间转换到特征空间,支持向量机的学习是在特征空间进行的。

     

    给定一个特征空间上的训练数据集,xi为第i个特征向量,也称为实例,yi为xi的类标记,正负时分别称xi为正例或负例,学习的目标是在特征空间中找到一个分离超平面,能将实例分到不同的类。

    二、线性可分支持向量机

    当训练数据集线性可分时,存在无穷个分离超平面可将两类数据正确分开。感知机利用误分类最小的策略,求得分离超平面,不过这时的解有无穷多个。线性可分支持向量机利用间隔最大化求最优分离超平面,这时,解是唯一的。

     

    支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。

    最大间隔算法

    线性可分支持向量机学习算法——最大间隔法

    支持向量

    支持向量是使约束条件式等号成立的点

    在H1和H2上的点就是支持向量。

    H1和H2平行,并且没有实例点落在它们中间。在H1和H2之间形成一条长带,分离超平面与它们平行且位于它们中央。

    长带的宽度,即H1和H2之间的距离称为间隔(margin)。间隔等于

    H1和H2称为间隔边界。

    支持向量在确定分离超平面中起着决定性作用,所以将这种分类模型称为支持向量机。

     对偶算法

    提出:

    为了求解线性可分支持向量机的最优化问题

    ,将它作为原始最优化问题,应用拉格朗日对偶性通过求解对偶问题得到原始问题的最优解。

    思路:

    给定的线性可分训练数据集,可以首先求对偶问题

    的解再利用式和式求得原始问题的解;从而得到分离超平面及分类决策函数。

     算法:

    (1)构造并求解约束最优化问题

    求得最优解

    (2)计算

    并选择的一个正分量,计算

    (3)求得分离超平面

    分类决策函数:

     三、线性支持向量机

    修改硬间隔最大化,成为软间隔最大化, 扩展到线性不可分问题。

    假设训练数据集不是线性可分的。训练数据中有一些特异点,将这些特异点除去后,剩下大部分的样本点组成的集合是线性可分的。

    对每个样本点引进一个松池变量,使函数间隔加上松弛变量大于等于1。

    约束条件变为

     

    定义

    对于给定的线性不可分的训练数据集,通过求解凸二次规划问题

    得到的分离超平面为

    及相应的分类决策函数

    称为线性支持向量机。

     

     线性支持向量机算法

    (1)选择惩罚参数C>0,构造并求解凸二次规划问题

    求得最优解

    (2)计算

    选择的一个分量适合条件,计算

    (3)求得分离超平面

    分类决策函数:

    注:b的解并不唯一,实际计算时可以取在所有符合条件的样本点上的平均值

    支持向量

    在线性不可分的情况下,将对偶问题

    的解中对应于的样本点的实例,称为支持向量(软间隔的支持向量)。

     

     四、非线性支持向量机

    思想

     对于非线性问题,进行一个非线性变换,将非线性问题变换为线性问题,通过解变换后的线性问题的方法求解原来的非线性问题。

    在对偶问题的目标函数中的内积用核函数来代替

    对偶问题的目标函数成为 

    分类决策函数中的内积也用核函数代替,分类决策函数式成为

     

    定义

    从非线性分类训练集,通过核函数与软间隔最大化,或凸二次规划,学习得到的分类决策函数 

    称为非线性支持向量,正定核函数

     算法

    选取适当的核函数和适当的参数C,构造并求解最优化问题

    五、序列最小最优化SMO

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

    SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。

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

    基本思路

    如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。

    否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。

    子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。

    由于等式约束,子问題的两个变量中只有一个是自由变量。

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

    假设选择的两个变量是,其他变量是固定的。

    于是SMO的最优化问题

    的子问题可以写成:

    其中,是常数。

    公式解:

     最优化问题

    沿着约束方向未经剪辑时的解是

    其中,

    是输入空间到特征空间的映射,由式

    给出。

    变量的选择

    SMO称选择第1个变量的过程为外层循环。外层循环在训练样本中选取违反KKT条件最严重的样本点。

    首先遍历所有满足条件支持向量机341.png的样本点,即在间隔边界上的支持向量点,如果这些样本点都满足KKT条件,则遍历整个训练集。

    SMO称选择第2个变量的过程为内层循环。选择支持向量机324.png,使其对应的支持向量机345.png最大。

    每次完成两个变量的优化后,都要重新计算阈值支持向量机348.png

    如果支持向量机359.png同时满足条件支持向量机360.png,那么支持向量机361.png。如果支持向量机362.png是0或者C,那么支持向量机363.png支持向量机364.png以及它们之间的数都是符合KKT条件的阈值,这时选择它们的中点作为支持向量机365.png

    更新对应的支持向量机366.png值:

    支持向量机369.png

    SMO算法

    (1)取初始值支持向量机373.png

    (2)选取优化变量支持向量机374.png,解析求解两个变量的最优化问题

    求得最优解支持向量机375.png,更新支持向量机376.png支持向量机377.png

    (3)若在精度支持向量机371.png范围内满足停机条件

    支持向量机378.png

    其中,

    支持向量机379.png

    则转(4>;否则令支持向量机380.png,转(2);

    (4)取支持向量机381.png

    朝闻道
  • 相关阅读:
    Java实现 LeetCode 735 行星碰撞(栈)
    Java实现 LeetCode 735 行星碰撞(栈)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 蓝桥杯算法提高 求最大值
    Java实现 蓝桥杯算法提高 求最大值
    Java实现 蓝桥杯算法提高 求最大值
    Python eval() 函数
    Python repr() 函数
  • 原文地址:https://www.cnblogs.com/wander-clouds/p/8744004.html
Copyright © 2011-2022 走看看