支持向量机(SVM)

2024-05-12 23:59

1. 支持向量机(SVM)

  参考Jerrylead 和 july-支持向量机通俗导论 
   再回忆一下逻辑回归:Logistic回归目的是从特征学习出一个0/1分类模型,而 这个模型是将特征的线性组合作为自变量 ,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数) 将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率 。
                                           中间那条线是θ T x=0,logistic回归强调 所有点 尽可能地远离中间那条线。学习出的结果也就中间那条线。   但是:   考虑上面3个点A、B和C。从图中我们可以确定A是×类别的, 然而C我们是不太确定的 ,B还算能够确定。这样我们可以得出结论, 我们更应该关心靠近中间分割线的点,让他们尽可能地远离中间线,而不是在所有点上达到最优(引出了下面的函数间隔与几何间隔) 。
   我想这就是支持向量机的思路和logistic回归的不同点:   支持向量机考虑局部(不关心已经确定远离的点),   逻辑回归一个考虑全局(已经远离的点可能通过调整中间线使其能够更加远离,但是也可能使一部分点靠近中间线来换取另外一部分点更加远离中间线。)
   上面已经知道,θ T x=0是分类的线,在svm中,只考虑局部,只考虑θ T x的正负问题,而不用关心g(z)。因此,在这里,用w T x+b代替θ T x,并 对g(z)做一个简化 ,将其简单映射到类别标签y=1和y=-1上。
                                           这里的y取值为1和-1(在svm中,只考虑局部,只考虑θ T x的正负问题),是为了方便定义:在分类正确的情况下,函数间隔(确信度 )的大小
   比如,在分类正确的情况下,y等于1,wx+b应该为正数越大,则情况越好,是正例的确定度就越大。就如上图的A点。y等于-1,wx+b应该为负数越大,则情况越好是负例的确信度就越大。
   所以, 函数间隔越大,说明分类正确的置信度越大。函数间隔越小 ,比如上图c点,说明越不能确定c点属于哪一类。 
   可以为 别的值,只是为了方便。这一点在参考的第二个博客上也已经说明了。
   由上面解释,已知可以用y(wT x + b) 的正负性来判定(或表示)分类的正确性。
   定义函数间隔如下:
                                           也就是,这个样本点x与超平面之间的间隔(但是现在有些不准确,所以有下面的几何间隔)。
                                           此时,若根据SVM的思想,最大化这个间隔,就能提高分类正确的确信度了吗?
   答案是否定的,因为,如果成比例的改变w 和b(如将它们改成2w 和2b),则函数间隔的值f(x) 却变成了原来的2 倍( 虽然函数值增大了,达到了目标,但是此时超平面没有改变 ),所以只有函数间隔还远远不够。
    我们真正关心的,其实是“几何上”的点到平面的距离,于是可以用几何知识推理出来的几何间隔。 而不是一开始人们想当然定义的函数间隔。
   事实上,我们可以对法向量w 加些约束条件( 这就是调优问题的思考了 ),从而引出真正定义点到超平面的距离——几何间隔(geometrical margin)的概念。
                                           又因为x 0 是超平面w T x + b=0上的点,利用向量之间的运算
                                                                                   再令上式乘上对应的类别y,即可得出几何间隔
                                           从上述函数间隔和几何间隔的定义可以看出:几何间隔就是函数间隔除以∥w∥,而 函数间隔实际上就是,只是人为定义的一个间隔度量,而几何间隔才是直观上的点到超平面的距离。 
   接下来就是我们的目标:寻找一个超平面, 使得离超平面比较近的点能有更大的间距。 也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。也就是找到最大的几何间隔。
                                           由上一小节可以知道,我们这里要找的最大间隔分类超平面中的“间隔”指的是几何间隔。
                                           上面两个式子的意思是( 注意,函数间距上面是折线,几何间距上面是波浪线 ):   最大化几何间隔   约束条件是,每个样例的函数间隔都要大于全局的那一个函数间隔(也就是所有训练集里的最小的那个)
   用函数间隔表示几何间隔
                                           于是得到了这个式子:
                                           然而这个时候目标函数不是凸函数,约束条件也不是线性的,没法直接代入优化软件里计算。我们还要改写。前面说到 同时扩大w和b对结果没有影响 ,因此,我们将全局的函数间隔值定义为1。于是,上述的函数转变成了
                                           由于求1/||w||的最大值,相当于求||w||²的最小值,因此结果为:
                                           因为现在的 目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题 。这个问题可以用现成的QP (Quadratic Programming) 5优化包进行求解。一言以蔽之:在一定的约束条件下,目标最优,损失最小。
    根据前面几个文章的话,SVM作为判别模型,它的的模型,就是  w T x i  + b 。参数就是w和b。学习完参数以后,新来的样例作为x i ,得到结果大于1,说明在超平面上面,所以是正例。反之亦然。 
    根据SVM的思想,SVM的初步目标函数,就是所有样例的几何间隔尽可能的大 
    至此,得到了SVM的目标函数,算是初步解决了SVM的这个问题,用优化包求解得到wb,即可得到具有最大几何间距的超平面,提高分类每个点的确信度,分类目标完成。 
   接下来介绍的是手工求解w和b的方法了,一种更优的求解方法。
                                           从上可以看出 ,就同时扩大w和b就相当于等式两边同时除以函数间隔 γ,而新的w和b仍然是旧的wb的函数,所以最大化仍然可以进行。
    效果等价于,令函数间隔γ=1,综上所述,零γ=1是合理的,而且也方便了原优化问题的计算 。
   由拉格朗日对偶(线性可分条件下SVM的对偶算法)引入核函数(非线性可分条件下SVM的算法)
   上一篇说到,得到了 如下的线性可分的SVM的目标函数 ,可以利用优化包进行求解。
                                           此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量(dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法。
    引入对偶的优点: 
   因为 引入拉格朗日算子可以求出极值。 (参考最优化方法的解释)
   这种极值问题怎么求
                                           首先,同样定义拉格朗日公式,希望可以利用拉格朗日算子法求得最优解,得到:
                                           但是,出现问题了,此时加入的约束条件g已经不再等于0了,所以,此时可以调整算子alpha变成很大很大的 值,使结果负无穷, 这显然是不合理的。 
   所以,我们需要 排除在满足条件下,也会无解的情况。 
   因此,我们定义下面的函数
                                           要看这个函数有什么优点,就要看看这个函数相比于L(ω,α,b)有什么变化: 加了max,加了α I 大于等于零。 
   所以,当g和h不满足约束时,总可以调整α i 和β i 来使thetap具最大值为正无穷。
   只有当g和h满足约束时,此时g<0,我们可以调整α i 和β i (使α i 等于0,β i 任意),得到最大值,即θ p =f(w)。
   于是函数等价于这样
                                           于是原来的极值问题min f(w)  就等价于求min θ p 了,   即:
                                           也就是说,最小化 θ p ,就是为了得到最小的 f(w),而能有f(w)就说明了满足约束条件。所以这个等价于原来的极值问题。
   至此, 相比于拉格朗日公式L(ω,α,b),现在即加入了拉格朗日算子,又排除了纯粹的拉格朗日公式中出现无穷的情况。 
   但是,又出现了新的问题,也就是,如果直接求解,首先面对的就是两个参数(最里面的是max,这个max问题有两个参数),而且alpha也是不等式约束,再在w上求最小值,这个过程并不容易做。那么应该怎么办呢?
    在最优化课程里,当遇到不好解的优化问题时,可以转化为原问题的对偶问题试试。    此处,d代表对偶。D--dual
   我们定义函数
                                           θ D  将问题转化为先求L(ω,α,b)关于 ω 的最小值(此时α和β是固定值),之后再求θ D  的最大值。 上来面对的是一个参数,相对简单些。 
   相对于原问题,更换了min和max的顺序,得到了它的对偶问题。
                                            --------------------------------------------------------------------------------------------------------------    一般的更换顺序的结果是MaxMin(X) <= MinMax(X)。也就是,此时有
                                           对偶问题已经表示出来了,这个对偶问题也相对原问题好求,那么,这两个问题等价吗?或者说,对偶问题的解是不是原问题的解呢?
   需要用KKT条件来判断了。
    对于拉格朗日算子的深入理解可以看看《最优化方法》,讲义的最后一页。 
   含有不等式约束的问题,常常 用KKT条件求得候选最优解 
   对于一般化的拉格朗日公式:
                                           最优值 w 必须满足以下三个条件:
   ----------1、L对 w 求导为零   ----------2、h(w)=0   ----------3、α i g i =0 ,i = 1,...,k
   注意此时
                                            第三个条件表明了KKT的思想:极值会在可行域边界取得。 ----解释:   -----对于一个特定的自变量w1,当自变量w1在 第 i 个 可行域边界(g i (w1)=0)时,说明此时这个约束是起到了作用的。 这个约束是w1被g i 约束了。此时只能到g i 的平面上(即边界),再多就出界了。。。 而对于最优解来说,就是f(w)达到最优,所以L中,除了f(w)部分,其余应该都等于0,所以此时α>0(或许等于零也可以?疑问)
   ----而此时,w1在其他的约束条件g 非i 下,有g 非i (w1)<0),说明W1可以随意些,说明此时这个约束并没有起到作用,但是作为最优解,为了 除了f(w)部分,其余应该都等于0 ,所以其系数α应该等于零。
    ---------------------------------------------------------------------------------------- 
    注意:这个是传统最优化问题的一般式,这个问题有k个不等式约束方程,所有的点都要满足这k个不等式约束。 。假设有一百个样本点,只有有三个极值N1,N2,N3,那么说明其余97个点带入这k个方程中去都会小于零。  另外对于这三个极值点,可能会有g i (N1) = 0,除了第i个g以外,g(N1)都小于0 。然后对于极值N2,g j (N2)=0,除了第j个约束以外,其余的g(N2)都小于0。
    而本节一开始讨论的问题,只有一个约束方程(因为参数只有w和b)即:y(w T x+b)>=1,所有的点(一共m个)都要满足这个约束方程。 而关于为什么非支持向量的系数alpha会等于零呢?也就是相当于前面的,k=1(有k个约束条件)的情况下,m个样本点中,非支持向量的约束g<0,为了最优解,除了f(w)应该都等于零,所以alpha应该等于零。
   另外可以参考这段话:
                                           即,若d* = p*   x * 满足KKT条件
   由上面那句话可以知道,
   折腾这么长时间,也就是为了说明,已经知道原问题
                                           是凸优化问题,所以,只要对偶问题的自变量w满足了KKT条件,那么它就是对偶问题的最优解w * ,同时也是原问题的最优解了。
   所以,由上可知,只要解出了2.1.3中的问题的参数w和b,也就是原问题的解了。
   重新回到SVM的优化问题(其中每个约束式实际就是一个训练样本):
                                           我们将约束条件改写为拉格朗日的形式:
                                           由KKT条件可知,只有当函数间隔是1(g=0)的时候,α i >0。此时,这个样例 w i  在约束平面上受到约束 。对于其它的不在线上的样例点(g<0),极值不会在其范围内去的,所以这些样例点前面的系数α i =0.
                                           实线是最大间隔超平面,假设×号的是正例,圆圈的是负例。在虚线上的点就是函数间隔是1的点,他们前面的系数α i >0, 这三个点被称作 支持向量。 
   由上面问题,构造拉格朗日函数如下(没有等式约束,所以没有β):
                                            ———————————————————————————————— 
   下面我们按照对偶问题的求解步骤来一步步进行,由2.1.3可知,对偶问题的形式为:
                                           首先求解L的最小值(最里面的先求),此时αi是固定的,L的最小值只与w和b有关。对w和b分别求偏导数。
                                           得到
                                           将上式带回到拉格朗日函数中得到,此时得到的是该函数的最小值(目标函数是凸函数), 即里面的min L已经求出,接下来就是求max了    代入后,化简过程如下:
                                           最后得到
                                           由于最后一项是0,因此简化为
                                           这里,上式中左右边的向量内积,用方括号表示。
   到这一步,拉格朗日函数只包含了一个变量α i 。接着进行下一步 ,最大化的过程,求得α i 。
                                           假设求得了α i  就能根据求导得到的结果
                                           求得w,然后就能得到b。
                                           b 就是  距离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔。  (其实,由前面的那个x和圈的图,可以认为b就是截距,这个截距b等于上下两条虚线的截距的平均值。)
    注意,这里的w,b,alpha都是 向量,都是m维的向量 
   至于这里的α怎么求得,即上面的最大化问题怎么求解,将留给下一篇中的SMO算法来阐明。
   也就是说,手动解的话,还是需要利用SMO算法,求得α才行。
    ———————————————————————————————— 
   这里考虑另外一个问题,由于前面求解中得到
                                           用α i 代替w带入判别模型w T x+b,得到:
                                           也就是说, 利用判别模型对新来样本进行判别时 ,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于1还是小于1来判断正例还是负例。大于1,说明在超平面的上面,说明是正例。同理,小于1说明在超平面的下面,说明是负例。
    约束条件是wx+b-1小于等于零,所以判断就是wx+b与1进行大小比较 
    现在有了alpha,不需要求出w (那b呢,b怎么求呢,前面已经解释,b是由离超平面最近的间隔和负的函数间隔相等。。。得到的。所以,将新来的样本与训练数据中 支持向量 做内积以后,再确定最大的正数函数间隔以及最小的负数函数间隔,即可。)
    就冲上面这段话,支持向量的系数alpha,也不能等于0。 
   另外,那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的α i >0 (不等于零)其他情况α i 是等于零的。 比如,像前面那个x和圈的图,新来的样本只需要和三个支持向量做运算即可 。
    由此可以看到,求出α i 以后,只需要利用支持向量,就可以来判断新来的样例是正例还是负例了。也许这也是是为什么叫支持向量机吧。 
                                           上面这个公式,为下面要提到的核函数(kernel)做了很好的铺垫。
   下面,先把没求得的alpha放一放,趁着刚刚得到的这个公式的热乎劲,再去看看核函数。

支持向量机(SVM)

2. 支持向量机(SVM)

        支持向量机(support vector machine),故一般简称SVM,通俗来讲,它是一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,这族分类器的特点是他们能够同时最小化经验误差与最大化几何边缘区,因此支持向量机也被称为最大边缘区分类器。其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。SVM在很多诸如文本分类,图像分类,生物序列分析和生物数据挖掘,手写字符识别等领域有很多的应用。
  
         支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面,分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。
  
         假设给定一些分属于两类的2维点,这些点可以通过直线分割, 我们要找到一条最优的分割线,如何来界定一个超平面是不是最优的呢?
  
         如图:
                                          
         在上面的图中,a和b都可以作为分类超平面,但最优超平面只有一个,最优分类平面使间隔最大化。 那是不是某条直线比其他的更加合适呢? 我们可以凭直觉来定义一条评价直线好坏的标准:
  
         距离样本太近的直线不是最优的,因为这样的直线对噪声敏感度高,泛化性较差。 因此我们的目标是找到一条直线(图中的最优超平面),离所有点的距离最远。 由此, SVM算法的实质是找出一个能够将某个值最大化的超平面,这个值就是超平面离所有训练样本的最小距离。这个最小距离用SVM术语来说叫做间隔(margin) 。
  
         描述:给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类),一个线性分类器的学习目标便是要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以表示为( wT中的T代表转置):
                                          
         例如:现在有一个二维平面,平面上有两种不同的数据,分别用圈和叉表示。由于这些数据是线性可分的,所以可以用一条直线将这两类数据分开,这条直线就相当于一个超平面,超平面一边的数据点所对应的y全是-1 ,另一边所对应的y全是1。
                                          
         我们令分类函数为:
                                          
         当f(x) 等于0的时候,x便是位于超平面上的点,而f(x)大于0的点对应 y=1 的数据点,f(x)小于0的点对应y=-1的点,如下图所示:
                                          
         一个点距离超平面的远近可以表示分类预测的确信或准确程度,如何确定这个超平面呢?从直观上而言,这个超平面应该是最适合分开两类数据的直线。而判定“最适合”的标准就是这条直线离直线两边的数据的间隔最大。所以,得寻找有着最大间隔的超平面。
                                                                                                                                                                                                                                                  
 补充知识点: 点到平面的距离 
                                          
          支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面.。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面是唯一的。这里的间隔最大化又称为硬间隔最大化。
  
         间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。
  
       按照我们前面的分析,对一个数据点进行分类,  当它的margin越大的时候,分类的confidence越大。  对于一个包含n个点的数据集,我们可以很自然地定义它的margin为所有这n个点的margin值中最小的那个。于是,为了使得分类的confidence高,我们希望所选择的超平面hyper plane能够最大化这个margin值。让所选择的超平面能够最大化这个“间隔”值,这个间隔就是下图中的Gap的一半:
                                                                                  
  为什么用几何间隔求最大的分离超平面而不用函数间隔? 
                                                                                                                                                                  
  例题: 
                                                                                                                          
 我们构造了约束最优化问题,就是下面这个:
                                          
         此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。
  
 补充知识点: 拉格朗日乘子法学习 
  
                      拉格朗日KKT条件 
  
                      KKT条件介绍 
  
                      拉格朗日对偶 
  
          通过给每一个约束条件加上一个拉格朗日乘子(Lagrange multiplier)α,定义拉格朗日函数(通过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式便能清楚的表达出我们的问题):
                                                                                  
  求解这个式子的过程需要拉格朗日对偶性的相关知识。
                                                                                                                                                                                                                                                  
  例题: 
                                          
          接下来谈谈线性不可分的情况,因为 线性可分这种假设实在是太有局限性 了。下图就是一个典型的线性不可分的分类图,我们没有办法用一条直线去将其分成两个区域,每个区域只包含一种颜色的点。
                                          
          要想在这种情况下的分类器,有两种方式, 一种是用曲线 去将其完全分开,曲线就是一种 非线性 的情况,跟之后将谈到的 核函数 有一定的关系:
                                          
          另外一种还是用直线,不过不用去保证可分性 ,就是包容那些分错的情况,不过我们得加入惩罚函数,使得点分错的情况越合理越好。其实在很多时候,不是在训练的时候分类函数越完美越好,因为训练函数中有些数据本来就是噪声,可能就是在人工加上分类标签的时候加错了,如果我们在训练(学习)的时候把这些错误的点学习到了,那么模型在下次碰到这些错误情况的时候就难免出错了。这种学习的时候学到了“噪声”的过程就是一个过拟合(over-fitting),这在机器学习中是一个大忌。
  
 我们可以为分错的点加上一点惩罚,对一个分错的点的 惩罚函数 就是 这个点到其正确位置的距离: 
                                                                                                                                                                                                                                                                                                                                                                          
          对于线性不可分的情况,我们可以用核函数让空间从原本的线性空间变成一个更高维的空间 , 在这个高维的线性空间下,再用一个超平面进行划分 。 这儿举个例子,来理解一下如何利用空间的维度变得更高来帮助我们分类的: 
                                          
         上图是一个线性不可分的图,当我们把这两个类似于椭圆形的点映射到一个高维空间后,映射函数为:
                                          
         用这个函数可以将上图的平面中的点映射到一个三维空间(z1,z2,z3),并且对映射后的坐标加以旋转之后就可以得到一个线性可分的点集了。
                                          
         形象说明:例如世界上本来没有两个完全一样的物体,对于所有的两个物体,我们可以通过增加维度来让他们最终有所区别,比如说两本书,从(颜色,内容)两个维度来说,可能是一样的,我们可以加上作者这个维度,是在不行我们还可以加入页码,可以加入拥有者,可以加入购买地点,可以加入笔记内容等等。当维度增加到无限维的时候,一定可以让任意的两个物体可分了。
  
  核函数定义: 
                                                                                  
  核技巧在支持向量机中的应用: 
                                                                                  
  常用核函数: 
                                          
  非线性支持向量机学习算法: 
                                          
         支持向量机的学习问题可以形式化为求解凸二次规划问题。这样的凸二次规划问题具有全局最优解,并且有许多最优化算法可以用于这一一问题的求解。但是当训练样本容量很大时,这些算法往往变得非常低效,以致无法使用。所以,如何高效地实现支持向量机学习就成为一一个重要的问题。目前人们已提出许多快速实现算法.本节讲述其中的序列最小最优化(sequential minimal optimization, SMO)算法。
                                          
         上述问题是要求解N个参数(α1,α2,α3,...,αN),其他参数均为已知,序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数,方法类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。
  
         整个SMO算法包括两部分,求解两个变量的 二次规划 问题和选择这两个变量的 启发式 方法。
                                                                                                                                                                                                                                                                                                                                  
  上面求得的(α1)new和(α2)new是在η>0的情况下求得的:
                                          
         当时为了推导公式我们直接默认它是大于0了,现在我们需要重新审视这一项(η)。这一项是原来关于的二次项的系数。我们可以分下面三种情况讨论:
                                          
  (1)当η>0时 :这个二次函数开口向上,所以要求这个二次函数的最小值,如果说极值点不在计算出的可行域的范围内,就要根据这个极值点和可行域边界值的关系来得到取最小值的地方:
  
 ①如果这个极值点在可行域左边,那么我们可以得到这个可行域内二次函数一定在单增,所以此时L应该是那个取最小值的地方。就如大括号的第三种情况。
  
 ②如果这个极值点在可行域右边,那么此时可行域内一定单减,所以此时H就是那个取最小值的地方,就是大括号里的第一种情况。
  
  (2)当η=0时: 这个二次函数就变成了一个一次函数,那么不管这个一次函数的单调性怎样,最小值一定是在边界处取到。所以到时候计算可行域的两个边界的值,看哪个小就用哪个。
  
  (3)当η<0时: 这个二次函数开口向下,那么此时怎么得到取最小值的点呢?很容易就能想到:最小值也是在可行域的边界处取到。很容易理解,此时开口向下,当极值点在区间内时,最小值只能在端点处取,因为极值点处是最大的。而当极值点在区间外时,区间内一定是单调的,此时最小值也只能在端点处取。通过计算比较边界处的目标函数值,哪个小取哪个。
  
 通过以上判断求出(α2)new以后,再根据公式求出(α1)new,然后带入目标函数(1)中。即如下过程:
                                          
         上述分析是在从N个变量中已经选出两个变量进行优化的方法,下面分析如何高效地选择两个变量进行优化,使得目标函数下降的最快。

3. SVM在matlab中怎么实现

  SVM在matlab中实现:首先需要MATLABSVMToolbox,将其中的文件解压并命名为svm。将文件拷到E:\matlab\toolbox。打开matlab点击setpath---->addfolder,然后把工具箱文件夹添加进去就可以了。路径加进去后在file→Preferences→General的ToolboxPathCaching里点击updateToolboxPathCache更新一下。最后在matlab的命令栏中输入whichsvcoutput可以查看路径E:\matlab\toolbox\svm\svcoutput.m就可以了。

SVM在matlab中怎么实现

4. 支持向量机基本原理 matlab程序及其应用

支持向量机
1 简介
支持向量机基本上是最好的有监督学习算法了。最开始接触SVM是去年暑假的时候,老师要求交《统计学习理论》的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相关概念。这次斯坦福提供的学习材料,让我重新学习了一些SVM知识。我看很多正统的讲法都是从VC 维理论和结构风险最小原理出发,然后引出SVM什么的,还有些资料上来就讲分类超平面什么的。这份材料从前几节讲的logistic回归出发,引出了SVM,既揭示了模型间的联系,也让人觉得过渡更自然。
2 重新审视logistic回归
Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。
形式化表示就是
假设函数
 
其中x是n维特征向量,函数g就是logistic函数。
 的图像是
 
可以看到,将无穷映射到了(0,1)。
而假设函数就是特征属于y=1的概率。
 
当我们要判别一个新来的特征属于哪个类时,只需求 ,若大于0.5就是y=1的类,反之属于y=0类。
再审视一下 ,发现 只和 有关, >0,那么 ,g(z)只不过是用来映射,真实的类别决定权还在 。还有当 时, =1,反之 =0。如果我们只从 出发,希望模型达到的目标无非就是让训练数据中y=1的特征 ,而是y=0的特征 。Logistic回归就是要学习得到 ,使得正例的特征远大于0,负例的特征远小于0,强调在全部训练实例上达到这个目标。
图形化表示如下:
 
中间那条线是 ,logistic回顾强调所有点尽可能地远离中间那条线。学习出的结果也就中间那条线。考虑上面3个点A、B和C。从图中我们可以确定A是×类别的,然而C我们是不太确定的,B还算能够确定。这样我们可以得出结论,我们更应该关心靠近中间分割线的点,让他们尽可能地远离中间线,而不是在所有点上达到最优。因为那样的话,要使得一部分点靠近中间线来换取另外一部分点更加远离中间线。我想这就是支持向量机的思路和logistic回归的不同点,一个考虑局部(不关心已经确定远离的点),一个考虑全局(已经远离的点可能通过调整中间线使其能够更加远离)。这是我的个人直观理解。
3 形式化表示
我们这次使用的结果标签是y=-1,y=1,替换在logistic回归中使用的y=0和y=1。同时将 替换成w和b。以前的 ,其中认为 。现在我们替换 为b,后面替换 为 (即 )。这样,我们让 ,进一步 。也就是说除了y由y=0变为y=-1,只是标记不同外,与logistic回归的形式化表示没区别。再明确下假设函数
 
上一节提到过我们只需考虑 的正负问题,而不用关心g(z),因此我们这里将g(z)做一个简化,将其简单映射到y=-1和y=1上。映射关系如下:
 
4 函数间隔(functional margin)和几何间隔(geometric margin)
给定一个训练样本 ,x是特征,y是结果标签。i表示第i个样本。我们定义函数间隔如下:
 
可想而知,当 时,在我们的g(z)定义中, , 的值实际上就是 。反之亦然。为了使函数间隔最大(更大的信心确定该例是正例还是反例),当 时, 应该是个大正数,反之是个大负数。因此函数间隔代表了我们认为特征是正例还是反例的确信度。
继续考虑w和b,如果同时加大w和b,比如在 前面乘个系数比如2,那么所有点的函数间隔都会增大二倍,这个对求解问题来说不应该有影响,因为我们要求解的是 ,同时扩大w和b对结果是无影响的。这样,我们为了限制w和b,可能需要加入归一化条件,毕竟求解的目标是确定唯一一个w和b,而不是多组线性相关的向量。这个归一化一会再考虑。
刚刚我们定义的函数间隔是针对某一个样本的,现在我们定义全局样本上的函数间隔
 
说白了就是在训练样本上分类正例和负例确信度最小那个函数间隔。
接下来定义几何间隔,先看图
 
假设我们有了B点所在的 分割面。任何其他一点,比如A到该面的距离以 表示,假设B就是A在分割面上的投影。我们知道向量BA的方向是 (分割面的梯度),单位向量是 。A点是 ,所以B点是x= (利用初中的几何知识),带入 得,
 
进一步得到
 
 实际上就是点到平面距离。
再换种更加优雅的写法:
 
当 时,不就是函数间隔吗?是的,前面提到的函数间隔归一化结果就是几何间隔。他们为什么会一样呢?因为函数间隔是我们定义的,在定义的时候就有几何间隔的色彩。同样,同时扩大w和b,w扩大几倍, 就扩大几倍,结果无影响。同样定义全局的几何间隔 
5 最优间隔分类器(optimal margin classifier)
回想前面我们提到我们的目标是寻找一个超平面,使得离超平面比较近的点能有更大的间距。也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。形象的说,我们将上面的图看作是一张纸,我们要找一条折线,按照这条折线折叠后,离折线最近的点的间距比其他折线都要大。形式化表示为:
 
这里用 =1规约w,使得 是几何间隔。
到此,我们已经将模型定义出来了。如果求得了w和b,那么来一个特征x,我们就能够分类了,称为最优间隔分类器。接下的问题就是如何求解w和b的问题了。
由于 不是凸函数,我们想先处理转化一下,考虑几何间隔和函数间隔的关系, ,我们改写一下上面的式子:
 
这时候其实我们求的最大值仍然是几何间隔,只不过此时的w不受 的约束了。然而这个时候目标函数仍然不是凸函数,没法直接代入优化软件里计算。我们还要改写。前面说到同时扩大w和b对结果没有影响,但我们最后要求的仍然是w和b的确定值,不是他们的一组倍数值,因此,我们需要对 做一些限制,以保证我们解是唯一的。这里为了简便我们取 。这样的意义是将全局的函数间隔定义为1,也即是将离超平面最近的点的距离定义为 。由于求 的最大值相当于求 的最小值,因此改写后结果为:
 
这下好了,只有线性约束了,而且是个典型的二次规划问题(目标函数是自变量的二次函数)。代入优化软件可解。
到这里发现,这个讲义虽然没有像其他讲义一样先画好图,画好分类超平面,在图上标示出间隔那么直观,但每一步推导有理有据,依靠思路的流畅性来推导出目标函数和约束。
接下来介绍的是手工求解的方法了,一种更优的求解方法。
6 拉格朗日对偶(Lagrange duality)
     先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法,比如下面的最优化问题:
         
    目标函数是f(w),下面是等式约束。通常解法是引入拉格朗日算子,这里使用 来表示算子,得到拉格朗日公式为
         
    L是等式约束的个数。
    然后分别对w和 求偏导,使得偏导数等于0,然后解出w和 。至于为什么引入拉格朗日算子可以求出极值,原因是f(w)的dw变化方向受其他不等式的约束,dw的变化方向与f(w)的梯度垂直时才能获得极值,而且在极值处,f(w)的梯度与其他等式梯度的线性组合平行,因此他们之间存在线性关系。(参考《最优化与KKT条件》)
然后我们探讨有不等式约束的极值问题求法,问题如下:
         
    我们定义一般化的拉格朗日公式
 
    这里的 和 都是拉格朗日算子。如果按这个公式求解,会出现问题,因为我们求解的是最小值,而这里的 已经不是0了,我们可以将 调整成很大的正值,来使最后的函数结果是负无穷。因此我们需要排除这种情况,我们定义下面的函数:
     
    这里的P代表primal。假设 或者 ,那么我们总是可以调整 和 来使得 有最大值为正无穷。而只有g和h满足约束时, 为f(w)。这个函数的精妙之处在于 ,而且求极大值。
    因此我们可以写作
     
    这样我们原来要求的min f(w)可以转换成求 了。    
     
    我们使用 来表示 。如果直接求解,首先面对的是两个参数,而 也是不等式约束,然后再在w上求最小值。这个过程不容易做,那么怎么办呢?
    我们先考虑另外一个问题 
    D的意思是对偶, 将问题转化为先求拉格朗日关于w的最小值,将 和 看作是固定值。之后在 求最大值的话:
 
    这个问题是原问题的对偶问题,相对于原问题只是更换了min和max的顺序,而一般更换顺序的结果是Max Min(X) <= MinMax(X)。然而在这里两者相等。用 来表示对偶问题如下:
     
    下面解释在什么条件下两者会等价。假设f和g都是凸函数,h是仿射的(affine, )。并且存在w使得对于所有的i, 。在这种假设下,一定存在 使得 是原问题的解, 是对偶问题的解。还有 另外, 满足库恩-塔克条件(Karush-Kuhn-Tucker, KKT condition),该条件如下:
     
    所以如果 满足了库恩-塔克条件,那么他们就是原问题和对偶问题的解。让我们再次审视公式(5),这个条件称作是KKT dual complementarity条件。这个条件隐含了如果 ,那么 。也就是说, 时,w处于可行域的边界上,这时才是起作用的约束。而其他位于可行域内部( 的)点都是不起作用的约束,其 。这个KKT双重补足条件会用来解释支持向量和SMO的收敛测试。
    这部分内容思路比较凌乱,还需要先研究下《非线性规划》中的约束极值问题,再回头看看。KKT的总体思想是将极值会在可行域边界上取得,也就是不等式为0或等式约束里取得,而最优下降方向一般是这些等式的线性组合,其中每个元素要么是不等式为0的约束,要么是等式约束。对于在可行域边界内的点,对最优解不起作用,因此前面的系数为0。
7 最优间隔分类器(optimal margin classifier)
    重新回到SVM的优化问题:
     
    我们将约束条件改写为:
     
    从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数 ,也就是说这些约束式 ,对于其他的不在线上的点( ),极值不会在他们所在的范围内取得,因此前面的系数 .注意每一个约束式实际就是一个训练样本。
    看下面的图:
     
    实线是最大间隔超平面,假设×号的是正例,圆圈的是负例。在虚线上的点就是函数间隔是1的点,那么他们前面的系数 ,其他点都是 。这三个点称作支持向量。构造拉格朗日函数如下:    
     
    注意到这里只有 没有 是因为原问题中没有等式约束,只有不等式约束。
    下面我们按照对偶问题的求解步骤来一步步进行,
     
    首先求解 的最小值,对于固定的 , 的最小值只与w和b有关。对w和b分别求偏导数。
     
     
    并得到
     
    将上式带回到拉格朗日函数中得到,此时得到的是该函数的最小值(目标函数是凸函数)
    代入后,化简过程如下:
 
      
  最后得到
 
     由于最后一项是0,因此简化为
     
    这里我们将向量内积 表示为 
    此时的拉格朗日函数只包含了变量 。然而我们求出了 才能得到w和b。
    接着是极大化的过程 ,
 
    前面提到过对偶问题和原问题满足的几个条件,首先由于目标函数和线性约束都是凸函数,而且这里不存在等式约束h。存在w使得对于所有的i, 。因此,一定存在 使得 是原问题的解, 是对偶问题的解。在这里,求 就是求 了。
    如果求出了 ,根据 即可求出w(也是 ,原问题的解)。然后
     
    即可求出b。即离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔。
    关于上面的对偶问题如何求解,将留给下一篇中的SMO算法来阐明。
    这里考虑另外一个问题,由于前面求解中得到
     
    我们通篇考虑问题的出发点是 ,根据求解得到的 ,我们代入前式得到
     
    也就是说,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0,来判断正例还是负例。现在有了 ,我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的 ,其他情况 。因此,我们只需求新来的样本和支持向量的内积,然后运算即可。这种写法为下面要提到的核函数(kernel)做了很好的铺垫。这是上篇,先写这么多了。
7 核函数(Kernels)
考虑我们最初在“线性回归”中提出的问题,特征是房子的面积x,这里的x是实数,结果y是房子的价格。假设我们从样本点的分布中看到x和y符合3次曲线,那么我们希望使用x的三次多项式来逼近这些样本点。那么首先需要将特征x扩展到三维 ,然后寻找特征和结果之间的模型。我们将这种特征变换称作特征映射(feature mapping)。映射函数称作 ,在这个例子中
 
我们希望将得到的特征映射后的特征应用于SVM分类,而不是最初的特征。这样,我们需要将前面 公式中的内积从 ,映射到 。
至于为什么需要映射后的特征而不是最初的特征来参与计算,上面提到的(为了更好地拟合)是其中一个原因,另外的一个重要原因是样例可能存在线性不可分的情况,而将特征映射到高维空间后,往往就可分了。(在《数据挖掘导论》Pang-Ning Tan等人著的《支持向量机》那一章有个很好的例子说明)
将核函数形式化定义,如果原始特征内积是 ,映射后为 ,那么定义核函数(Kernel)为
 
到这里,我们可以得出结论,如果要实现该节开头的效果,只需先计算 ,然后计算 即可,然而这种计算方式是非常低效的。比如最初的特征是n维的,我们将其映射到 维,然后再计算,这样需要 的时间。那么我们能不能想办法减少计算时间呢?
先看一个例子,假设x和z都是n维的,
 
展开后,得
 
这个时候发现我们可以只计算原始特征x和z内积的平方(时间复杂度是O(n)),就等价与计算映射后特征的内积。也就是说我们不需要花 时间了。
现在看一下映射函数(n=3时),根据上面的公式,得到
 
也就是说核函数 只能在选择这样的 作为映射函数时才能够等价于映射后特征的内积。
再看一个核函数
 
对应的映射函数(n=3时)是
 
更一般地,核函数 对应的映射后特征维度为 。(这个我一直没有理解)。
由于计算的是内积,我们可以想到IR中的余弦相似度,如果x和z向量夹角越小,那么核函数值越大,反之,越小。因此,核函数值是 和 的相似度。
再看另外一个核函数
 
这时,如果x和z很相近( ),那么核函数值为1,如果x和z相差很大( ),那么核函数值约等于0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。它能够把原始特征映射到无穷维。
既然高斯核函数能够比较x和z的相似度,并映射到0到1,回想logistic回归,sigmoid函数可以,因此还有sigmoid核函数等等。
下面有张图说明在低维线性不可分时,映射到高维后就可分了,使用高斯核函数。
 
来自Eric Xing的slides
注意,使用核函数后,怎么分类新来的样本呢?线性的时候我们使用SVM学习出w和b,新来样本x的话,我们使用 来判断,如果值大于等于1,那么是正类,小于等于是负类。在两者之间,认为无法确定。如果使用了核函数后, 就变成了 ,是否先要找到 ,然后再预测?答案肯定不是了,找 很麻烦,回想我们之前说过的
 
只需将 替换成 ,然后值的判断同上。

5. svm支持向量机原理

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

SVM算法原理
SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如下图所示, w⋅x+b=0 即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个,但是几何间隔最大的分离超平面却是唯一的。

svm支持向量机原理

6. 支持向量机(SVM)基本原理

 看了很多关于SVM的博客,但是常常只能保存书签之后看,有时候有的博客就突然没了,这里就作为搬运工总结一下之后自己看吧。主要内容来自于:    支持向量机通俗导论(理解SVM的三层境界) 
    线性回归    给定数据集  , 其中,   ,线性回归试图学习到一个线性模型,尽可能地输出正确标记.
   如果我们要用线性回归算法来解决一个分类问题,(对于分类,y 取值为 0 或者 1),但如果你使用的是线性回归,那么假设函数的输出值可能远大于 1,或者远小于 0,就算所有训练样本的标签 y 都是 0 或 1但是如果算法得到的值远大于 1 或者远小于 0 的话,就会感觉很奇怪。所以我们在接下来的要研究的算法就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在 0 到 1 之间。
    所以逻辑回归就是一个分类算法,这个算法的输出值永远在 0 到 1 之间.    我们先看二分类的LR,具体做法是:利用sigmoid 函数,将每一个点的回归值映射到0,1之间.sigmoid函数特性如下:   
                                           
   如图所示,令  , 当 z > 0  , z 越大, sigmoid 返回值越接近1(但永远不会超过1). 反之,当z < 0时,z 越小, sigmoid 返回值越接近0(但永远不会小于0).   
                                           
    支持向量机 ,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为 特征空间 上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
    线性分类器    给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类),一个线性分类器的学习目标便是要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以表示为( wT中的T代表转置):     
   logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。   假设函数:        其中x是n维特征向量,函数g就是logistic函数。        图像为:   
                                           
   在超平面w x+b=0确定的情况下,|w x+b|能够表示点x到距离超平面的远近,而通过观察w x+b的符号与类标记y的符号是否一致可判断分类是否正确,所以,可以用(y (w*x+b))的正负性来判定或表示分类的正确性。于此,我们便引出了函数间隔(functional margin)的概念。   定义函数间隔  (用表示)为     
   而超平面(w,b)关于T中所有样本点(xi,yi)的函数间隔最小值(其中,x是特征,y是结果标签,i表示第i个样本),便为超平面(w, b)关于训练数据集T的函数间隔:        但这样定义的函数间隔有问题,即如果成比例的改变w和b(如将它们改成2w和2b),则函数间隔的值f(x)却变成了原来的2倍(虽然此时超平面没有改变),所以只有函数间隔还远远不够。
   事实上,我们可以对法向量w加些约束条件,从而引出真正定义点到超平面的距离--几何间隔(geometrical margin)的概念。
   假定对于一个点 x ,令其垂直投影到超平面上的对应点为 x0 ,w 是垂直于超平面的一个向量,  为样本x到超平面的距离,如下图所示:   
                                           
   根据平面几何知识,有        其中||w||为w的二阶范数(范数是一个类似于模的表示长度的概念),  是单位向量(一个向量除以它的模称之为单位向量)。
   又由于x0 是超平面上的点,满足 f(x0)=0,代入超平面的方程  ,可得  ,即  
   随即让此式  的两边同时乘以  ,再根据  和  ,即可算出  :        为了得到  的绝对值,令  乘上对应的类别 y,即可得出几何间隔(用  表示)的定义:        从上述函数间隔和几何间隔的定义可以看出:几何间隔就是函数间隔除以||w||,而且函数间隔y (wx+b) = y f(x)实际上就是|f(x)|,只是人为定义的一个间隔度量,而几何间隔|f(x)|/||w||才是直观上的点到超平面的距离。
   对一个数据点进行分类,当超平面离数据点的“间隔”越大,分类的确信度(confidence)也越大。所以,为了使得分类的确信度尽量高,需要让所选择的超平面能够最大化这个“间隔”值。这个间隔就是下图中的Gap的一半。
                                           通过由前面的分析可知:函数间隔不适合用来最大化间隔值,因为在超平面固定以后,可以等比例地缩放w的长度和b的值,这样可以使得  的值任意大,亦即函数间隔  可以在超平面保持不变的情况下被取得任意大。但几何间隔因为除上了  ,使得在缩放w和b的时候几何间隔的值  是不会改变的,它只随着超平面的变动而变动,因此,这是更加合适的一个间隔。换言之,这里要找的最大间隔分类超平面中的“间隔”指的是几何间隔。
   于是最大间隔分类器(maximum margin classifier)的目标函数可以定义为        同时需满足一些条件,根据间隔的定义,有        回顾下几何间隔的定义  ,可知:如果令函数间隔  等于1(之所以令等于1,是为了方便推导和优化,且这样做对目标函数的优化没有影响),则有   = 1 / ||w||且  ,从而上述目标函数转化成了:        相当于在相应的约束条件  下,最大化这个1/||w||值,而1/||w||便是几何间隔。
   据了解,
   由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。
   那什么是拉格朗日对偶性呢?简单来讲,通过给每一个约束条件加上一个拉格朗日乘子  ,(Lagrange multiplier),定义拉格朗日函数(通过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式便能清楚的表达出我们的问题)     
   然后令:        容易验证,当某个约束条件不满足时,例如  ,那么显然有  (只要令  即可)。而当所有约束条件都满足时,则最优值为  ,亦即最初要最小化的量。
   因此,在要求约束条件得到满足的情况下最小化  ,实际上等价于直接最小化  (当然,这里也有约束条件,就是   ≥0,i=1,…,n)   ,因为如果约束条件没有得到满足,  会等于无穷大,自然不会是我们所要求的最小值。
   具体写出来,目标函数变成了:
     
   这里用  表示这个问题的最优值,且和最初的问题是等价的。如果直接求解,那么一上来便得面对w和b两个参数,而  又是不等式约束,这个求解过程不好做。不妨把最小和最大的位置交换一下,变成:     
   交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用  来表示。而且有  ≤  ,在满足某些条件的情况下,这两者相等,这个时候就可以通过求解对偶问题来间接地求解原始问题。
   换言之,之所以从minmax  的原始问题,转化为maxmin  的对偶问题,一者因为  是  的近似解,二者,转化为对偶问题后,更容易求解。
   下面可以先求L 对w、b的极小,再求L对  的极大。
    KKT条件      ≤  在满足某些条件的情况下,两者等价,这所谓的“满足某些条件”就是要满足KKT条件。
   要让两者等价需满足strong duality (强对偶),而后有学者在强对偶下提出了KKT条件,且KKT条件的成立要满足constraint qualifications,而constraint qualifications之一就是Slater条件。所谓Slater 条件,即指:凸优化问题,如果存在一个点x,使得所有等式约束都成立,并且所有不等式约束都严格成立(即取严格不等号,而非等号),则满足Slater 条件。对于此处,Slater 条件成立,所以  ≤  可以取等号。
   一般地,一个最优化数学模型能够表示成下列标准形式:        其中,f(x)是需要最小化的函数,h(x)是等式约束,g(x)是不等式约束,p和q分别为等式约束和不等式约束的数量。   KKT条件的意义:它是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件。
   而KKT条件就是指上面最优化数学模型的标准形式中的最小点 x* 必须满足下面的条件:
   我们这里的问题是满足 KKT 条件的(首先已经满足Slater条件,再者f和gi也都是可微的,即L对w和b都可导),因此现在我们便转化为求解第二个问题。
   也就是说,原始问题通过满足KKT条件,已经转化成了对偶问题。而求解这个对偶学习问题,分为3个步骤:首先要让L(w,b,a) 关于 w 和 b 最小化,然后求对  的极大,最后利用SMO算法求解对偶问题中的拉格朗日乘子。
   对偶问题求解的3个步骤
   将以上结果代入之前的L:     
   得到:     
   具体推导过程是比较复杂的,如下所示:
                                           最后,得到:
     
   “倒数第4步”推导到“倒数第3步”使用了线性代数的转置运算,由于ai和yi都是实数,因此转置后与自身一样。“倒数第3步”推导到“倒数第2步”使用了(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…的乘法运算法则。最后一步是上一步的顺序调整。
   从上面的最后一个式子,我们可以看出,此时的拉格朗日函数只包含了一个变量,那就是  (求出了  便能求出w,和b,由此可见,则核心问题:分类函数  也就可以轻而易举的求出来了)。
   上述式子要解决的是在参数上  求最大值W的问题,至于  和  都是已知数。要了解这个SMO算法是如何推导的,请跳到下文第3.5节、SMO算法。
    总结    让我们再来看看上述推导过程中得到的一些有趣的形式。首先就是关于我们的 hyper plane ,对于一个数据点 x 进行分类,实际上是通过把 x 带入到  算出结果然后根据其正负号来进行类别划分的。而前面的推导中我们得到:        因此分类函数为:     
   这里的形式的有趣之处在于,对于新点 x的预测,只需要计算它与训练数据点的内积即可(表示向量内积),这一点至关重要,是之后使用 Kernel 进行非线性推广的基本前提。此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有非Supporting Vector 所对应的系数  都是等于零的,因此对于新点的内积计算实际上只要针对少量的“支持向量”而不是所有的训练数据即可。
   为什么非支持向量对应的  等于零呢?直观上来理解的话,就是这些“后方”的点——正如我们之前分析过的一样,对超平面是没有影响的,由于分类完全有超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。
   回忆一下我们通过 Lagrange multiplier得到的目标函数:
                                           注意到如果 xi 是支持向量的话,上式中红颜色的部分是等于 0 的(因为支持向量的 functional margin 等于 1 ),而对于非支持向量来说,functional margin 会大于 1 ,因此红颜色部分是大于零的,而  又是非负的,为了满足最大化,  必须等于 0 。这也就是这些非Supporting Vector 的点的局限性。
   至此,我们便得到了一个maximum margin hyper plane classifier,这就是所谓的支持向量机(Support Vector Machine)。当然,到目前为止,我们的 SVM 还比较弱,只能处理线性的情况,不过,在得到了对偶dual 形式之后,通过 Kernel 推广到非线性的情况就变成了一件非常容易的事情了(通过求解对偶问题得到最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题”)。
   事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。在上文中,我们已经了解到了SVM处理线性可分的情况,那对于非线性的数据SVM咋处理呢?对于非线性的情况,SVM 的处理方法是选择一个核函数 κ(⋅,⋅) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
   具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:
                                           而在我们遇到核函数之前,如果用原始的方法,那么在用线性学习器学习一个非线性关系,需要选择一个非线性特征集,并且将数据写成新的表达形式,这等价于应用一个固定的非线性映射,将数据映射到特征空间,在特征空间中使用线性学习器,因此,考虑的假设集是这种类型的函数:        这里ϕ:X->F是从输入空间到某个特征空间的映射,这意味着建立非线性学习器分为两步:
   首先使用一个非线性映射将数据变换到一个特征空间F,   然后在特征空间使用线性学习器分类。
   而由于对偶形式就是线性学习器的一个重要性质,这意味着假设可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:        如果有一种方式可以在特征空间中直接计算内积〈φ(xi · φ(x)〉,就像在原始输入点的函数中一样,就有可能将两个步骤融合到一起建立一个非线性的学习器,这样直接计算法的方法称为核函数方法:   核是一个函数K,对所有x,z,满足  ,这里φ是从X到内积特征空间F的映射。
   来看个核函数的例子。如下图所示的两类数据,分别分布为两个圆圈的形状,这样的数据本身就是线性不可分的,此时咱们该如何把这两类数据分开呢(下文将会有一个相应的三维空间图)?
                                           事实上,上图所述的这个数据集,是用两个半径不同的圆圈加上了少量的噪音生成得到的,所以,一个理想的分界应该是一个“圆圈”而不是一条线(超平面)。如果用  和  来表示这个二维平面的两个坐标的话,我们知道一条二次曲线(圆圈是二次曲线的一种特殊情况)的方程可以写作这样的形式:        注意上面的形式,如果我们构造另外一个五维的空间,其中五个坐标的值分别为  ,那么显然,上面的方程在新的坐标系下可以写作:        关于新的坐标  ,这正是一个 hyper plane 的方程!也就是说,如果我们做一个映射  ,将   按照上面的规则映射为  ,那么在新的空间中原来的数据将变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了。这正是 Kernel 方法处理非线性问题的基本思想。
   再进一步描述 Kernel 的细节之前,不妨再来看看上述例子在映射过后的直观形态。当然,你我可能无法把 5 维空间画出来,不过由于我这里生成数据的时候用了特殊的情形,所以这里的超平面实际的方程是这个样子的(圆心在  轴上的一个正圆)        因此我只需要把它映射到  ,这样一个三维空间中即可,下图即是映射之后的结果,将坐标轴经过适当的旋转,就可以很明显地看出,数据是可以通过一个平面来分开的
                                           核函数相当于把原来的分类函数:     
   映射成:     
   而其中的  可以通过求解如下 dual 问题而得到的:     
   这样一来问题就解决了吗?似乎是的:拿到非线性数据,就找一个映射

7. svm支持向量机怎么构建

支持向量机(support vector machines, SVM)是二分类算法,所谓二分类即把具有多个特性(属性)的数据分为两类,目前主流机器学习算法中,神经网络等其他机器学习模型已经能很好完成二分类、多分类,学习和研究SVM,理解SVM背后丰富算法知识,对以后研究其他算法大有裨益;在实现SVM过程中,会综合利用之前介绍的一维搜索、KKT条件、惩罚函数等相关知识。本篇首先通过详解SVM原理,后介绍如何利用python从零实现SVM算法。

    为便于理解,假设样本有两个属性,可以把属性值分别对应到二维空间轴的x,y轴上【摘要】
svm支持向量机怎么构建【提问】
支持向量机(support vector machines, SVM)是二分类算法,所谓二分类即把具有多个特性(属性)的数据分为两类,目前主流机器学习算法中,神经网络等其他机器学习模型已经能很好完成二分类、多分类,学习和研究SVM,理解SVM背后丰富算法知识,对以后研究其他算法大有裨益;在实现SVM过程中,会综合利用之前介绍的一维搜索、KKT条件、惩罚函数等相关知识。本篇首先通过详解SVM原理,后介绍如何利用python从零实现SVM算法。

    为便于理解,假设样本有两个属性,可以把属性值分别对应到二维空间轴的x,y轴上【回答】
没说完吧,我想知道构建过程【提问】
实例中样本明显的分为两类,黑色实心点不妨为类别一,空心圆点可命名为类别二,在实际应用中会把类别数值化,比如类别一用1表示,类别二用-1表示,称数值化后的类别为标签。每个类别分别对应于标签1、还是-1表示没有硬性规定,可以根据自己喜好即可,需要注意的是,由于SVM算法标签也会参与数学运算,这里不能把类别标签设为0。

    还是对应于上图,如果能需要找到一条直线,将上述的实心点与空心点分为两个部分,当下次还有其他样本点时,将其属性值作为坐标绘制到坐标轴上后,根据新样本点与直线位置关系,就可以判断出其类别。满足这样直线有无数条,SVM是要找到最合适一条:观察上图,绿线肯定不行,该条分类直线在没有验证集前提下已经错了;而蓝色线和红色都可以实现分类,蓝色线与实心黑点靠的太近,相比而言,红色线更‘公允’些。红色线就是SVM需要找出的分类直线,数学语言描述红线的‘公允’特性可表述为:将黑点和空心点视为两个集合,如果找到一个直线,使得黑点集合中的一些点离直线最近,这些点到该直线距离为d;空心点集合中也能找到一系列的点,离直线最近,距离同样也是d,则该直线就是我们要找到线性分类器,同时称两个集合中离直线最近的点为支持向量,SVM支持向量机就是由此得名的。

    一些算法书籍中这样描述SVM算法,找出一个直线,使得直线与两边集合最近的点的间隔空间最大,从上图也可以看出来,黑色点离蓝线最近的点,其距离小于到红线距离(直角的斜边)。能找到支持向量就一定找到分类直线,反之亦然,以上是针对两个属性值,通过观察二维平面即可以引出SVM的算法的特点,如果样本属性非常多呢,如何归纳算法的规律性?首先说下凸集可分离定理,该定理不仅是SVM的核心理论支持,更是机器学习算法的基石。【回答】

svm支持向量机怎么构建

8. 什么是支持向量机(SVM)以及它的用途?

SVM - support vector machine, 俗称支持向量机,为一种supervised learning算法,属于classification的范畴。在数据挖掘的应用中,与unsupervised的Clustering相对应和区别。
广泛应用于机器学习(Machine Learning), 计算机视觉(Computer Vision) 和数据挖掘(Data Mining)当中。
假设要通过三八线把实心圈和空心圈分成两类,那么有无数多条线可以完成这个任务。在SVM中,寻找一条最优的分界线使得它到两边的margin都最大。

扩展资料:
SVM 的优点
1、高维度:SVM 可以高效的处理高维度特征空间的分类问题。这在实际应用中意义深远。比如,在文章分类问题中,单词或是词组组成了特征空间,特征空间的维度高达 10 的 6 次方以上。
2、节省内存:尽管训练样本点可能有很多,但 SVM 做决策时,仅仅依赖有限个样本(即支持向量),因此计算机内存仅仅需要储存这些支持向量。这大大降低了内存占用率。
3、应用广泛:实际应用中的分类问题往往需要非线性的决策边界。通过灵活运用核函数,SVM 可以容易的生成不同的非线性决策边界,这保证它在不同问题上都可以有出色的表现(当然,对于不同的问题,如何选择最适合的核函数是一个需要使用者解决的问题)。
参考资料来源:百度百科-支持向量机