• (笔记)斯坦福机器学习第七讲--最优间隔分类器


    本讲内容

    1.Optional margin classifier(最优间隔分类器)

    2.primal/dual optimization(原始优化问题和对偶优化问题)KKT conditions(KKT条件)

    3.SVM dual (SVM的对偶问题)

    4.kernels (核方法)

    1.最优间隔分类器

    对于一个线性可分的训练集合,最优间隔分类器的任务是寻找到一个超平面(w,b), 使得该超平面到训练样本的几何间隔最大。

    你可以任意地成比例地缩放w和b的值,这并不会改变几何间隔的大小。

    例如,我可以添加这样的约束:

    这意味着我可以先解出w的值,然后缩放w的值,使得 

    我们可以自由地选择缩放因子来添加一些约束条件,但不会改变几何间隔的大小。

    考虑最优间隔分类器的优化问题:

    添加   这个条件,可以使几何间隔等于函数间隔。但是这个条件是一个非常糟糕的非凸性约束,所以需要改变优化问题:

     

     实际上这依然是一个糟糕的非凸性优化目标,很难找到参数的全局最优解。之前说过我们可以自由地选择缩放因子来添加一些奇怪的约束条件,这里我们选择添加  .很明显这是一个缩放约束,当解出w,b的值后,你可以对他们进行任意地缩放,使得函数间隔等于1.因此优化问题变为:

    这就是最终的凸优化问题。

    2.原始问题和对偶问题

    拉格朗日乘数法

    假设有一个优化问题

    首先创建一个拉格朗日算子

    其中  称为拉格朗日乘数。

    令参数的偏导数为0:

         

    解方程组,求得w为最优解。

    拉格朗日乘数法的扩展形式 

    假设有一个优化问题,称为原始问题p

    首先创建一个拉格朗日算子

    接着定义

     

    当约束条件满足的时候,即 

    否则,任一约束不满足

    考虑这样的优化问题

    实际上等价于原始问题p

    对偶问题:

    定义

    考虑这样的优化问题

    这就是对偶问题。注意到对偶问题和原始问题的区别是,对偶问题的求最大值和求最小值的顺序刚好和原始问题相反。

    一个事实是  .即最大值的最小值一定大于最小值的最大值。

    在特定条件下,原始问题和对偶问题会得到相同的解。因此满足某些条件时,可以用对偶问题的解代替原始问题的解。

    通常来说,对偶问题会比原始问题简单,并且具有一些有用的性质。

    使原始问题和对偶问题等价的条件:

    令f为凸函数 (Hessian H>=0)

    假设  是仿射函数  

    接着假设  严格可执行  (注意是小于,而不是小于等于)

    所以,, 使得  是原始问题的解, 是对偶问题的解,并且  

    KKT(Karush-kuhn-Tucker)互补条件:

    (1)  

    (2)  

    (3)  

    (4)  

    (5)  

    根据条件(3),一般情况下

    这不是绝对成立的,因为可能两个值都为0.

    当  成立时,我们称 是一个active constraint(活动约束)。

    3.最优间隔分类器 对偶问题

     原始问题 

    约束为

     

     这是一个活动约束

    当  意味着训练样本  的函数间隔等于1.

    从上图可以看出,通常情况下,一个最优化问题的解只和特别少的样本有关。例如,上图的所有点中,只有离超平面分隔线最近的三个点,他们的函数间隔为1,拉格朗日乘数不为0,这三个样本我们称之为支持向量(support vectors)

    拉格朗日算子

    对偶问题为

    为了求解对偶问题,我们需要对w,b求偏导数,并令偏导数为0 得到拉格朗日算子取极小值时的w,b。

                

          

    将上述两条约束代入拉格朗日算子

                     

           

    因此对偶问题可以描述为

    求解上述对偶问题,解出 ,那么

      

    我们可以将整个算法表示成内积的形式

    4.核方法

    在SVM的特征向量空间中,有时候训练样本的维数非常高,甚至是无限维的向量。但是你可以使用  来高效地计算内积,而不必把x显式的表示出来。

    这个结论仅对一些特定的特征空间成立。

    第七讲完。

               

  • 相关阅读:
    Java面向对象
    Java方法
    Java控制语句
    Java接收用户键盘输入
    Java运算符
    Java类型转换
    Java的加载与执行
    Java关键字
    Java常见的DOS命令及JDK
    nginx学习要点记录
  • 原文地址:https://www.cnblogs.com/madrabbit/p/6964838.html
Copyright © 2020-2023  润新知