从Loagistic 到 SVM算法

SVM(支持向量机),一种二类分类器,之所以称之为向量机,是因为它本身就产生一个二值决策结果,即使一种决策“机”,支持向量机的泛化错误低(具有结构风险最小),具有很强的学习能力,因此很多人认为它是最好的监督学习算法。

SVM与Logistic回归的联系:

logistic回归的目的就是从特征值中学习出一个0/1分类模型。而这个模型的输入是将特征的线性组合作为自变量,由于sigmod函数的自变量具有从负无穷到正无穷的输入范围,因此它可以把任何一个输入映射到0/1

sigmod函数的形式化表示: Hθ(x) = g(θTx) = 1/(1 +
e-θTx  ),x代表n为特征向量,函数g就是logistic函数

假设函数就是特征属于y = 1 的概率

P(y=1|x;θ)
= Hθ(x) ;

p(y =0|x;θ) = 1
-  Hθ(x)

当需要判断一个输入特征向量输入那个类时,只需要求θTx,如果θTx>
0,P(y=1|x;θ)  >
0.5 ,则表示属于类1.否则就是类0,所以logistic也可以看做一个概率估计问题。

因此在logistic回归求解过程中,关键是通过训练样本求解出θ,

          假设 θ = θ0
* x0+ θ1*x1 + θ2 * x2.......+ θn * xn

对于θ的求解,可以使用梯度上升法,梯度上升法基于的思想就是要找到某函数的最大值,最好的方法就是沿着函数梯度方向探寻。(求解最大值使用梯度上升法,而梯度下降法用来求解函数的最小值)

梯度上升法的伪代码如下:

每个回归系数初始化为1

重复R次:

  计算整个数据集的梯度

  使用alpha * gradient更新回归系数的向量

返回回归系数。

使用logistic回归判决时,决定权在意θTx,当θTx
>>0使,则H(θTx) = 1,反正H(θTx) =
0,如果我们只是从θT出发

希望模型的达到的目的无非就是让训练样本数据中y = 1 的特征θTx >> 0,而y = 0
的的特征

θTx <<0,logistic的目标就是学习θ,使得y = 1 的特征远大于1, y =
0的特征远小于0,

强调在全部的训练实例上达到这个目标。

假设中间就是那条曲线θTx =
0,logistic回归就是强调所有点尽可能的远离中间那条线,学习出的结过也是θTx = 0 这条曲线

考虑上面3个点A,B,C,从图中可以看到A是确定的X类,然而C是不大确定的,这样就可以得到一个结论,我们应该找到那么一条直接,使得靠近曲线

的分割点,让他们尽可能的远离中间的那条线,而不是所有的点都必须远离中间的曲线。因为那样的话,就等于使得一部分的点靠近中间的曲线,

而另一部分的点,更加远离分割线,这需要权衡两部分的点。这也是logistic回归和SVM的一个重要的区别,SVM考虑的是应该使得那些靠近分割线的点(支持向量)

远离分割面,所以可以这么说,logistic是全局考虑所有的点距离最大化,而SVM则是局部考虑支持向量的距离最大化。

SVM

SVM
的目的就是找出一个超平面尽可能的把两类数据分开,希望找到离分割面的距离最近的点,确保它们离超平面尽可能的远,这里把点到分割面的距离称为间隔,所以把SVM称为最大间隔法。支持向量就是指离超平面最近的那些点。所以,SVM的目标就是最大化支持向量到分割面的距离,

假设超平面的形式可以写成 WTx +
b ,要计算点A到分割面的距离,必须先找出点到分割面的法线或垂线的距离,根据点到直线的距离公式

有 |WTA +
b/|W||。这里的b理解为截距。把向量W和常数b一起描述了所给数据的分割线。

现在的目标就是要找到W和b,为此,我们必须找到具有最小间隔的数据点,而这些点就是支持向量。一旦找到这些支持向量,就需要对该间隔进行最大化,所以

方程可以写成

        arg maxw,b {minn(yi
*(wTx + b)}/||w||}  (1)

令r = yi *(wTx +
b),定义几何距离,假设令所有支持向量的距离等于1.那么就可以求解||w||-1最大值得到最终的结果,但是,本非所以的点到超平面的距离都等于1,只要那些

距离最近的点才是1,那些远离超平面的点的距离大于。公式中的最小值就是找出那些支持向量,最大值就是使得那些支持向量离超平面的距离最大化,所以求||w||-1最大值,是在约束条件 yi
*(wTx + b)  >= 1的条件,这是一个极值优化问题,可以利用拉格朗日乘子去求解

所以 minn(yi *(wTx + b)}/||w||  
 => 等价于  {   min{1/2
* ||w||},   ( yi *(wTx +
b)  >= 1)

 (2)

转为极值问题之后,对w求导 dL/dw = 0. 有 w = sumi αi  * yi * xi。
  且 sumi αi  * yi = 0;

对公式1的最小问题可以 转换为  (3)

公式3中的内

这里得到最大化相对于 求解
max{L(w,b,a)},所以求解w和b相对于求解alphas的值,求最大化L(w,b,a),这是一个二次规划的问题,使用SMO(sequential
Minimal Optimization)算法来快速的求解alpha的值。

  SMO算法的目标就是求解出一系列的alpha值和b,一旦求解这些alpha,就很容易求解w,从而构造出超平面。SMO算法的原理:每次循环中选择两个alpha进行优化处理,一点找到一对合适的alpha,那么就会有其中一个增大,例外一个减少,这里所谓的合适,就是指两个alpha必须符合条件,条件满足KKT条件。就是这两个alpha必须都在间隔边界之外,而第二个条件就是这两个alpha还咩有进行过区间化处理或者不在边界上。

  从公式3
可以到,有个两个特征向量的内积形式,这里用到了核技巧。因为我们知道不是所有的数据都是线性可分的,当数据在低维不可分或者分割面不明显时,可以把低维特征值映射到高维,核函数的作用就是把一个特征空间映射到另一个特征空间,通常情况下都是低维映射到高维空间。通常应用最广泛的就是径向基函数(radial
basis function)
,核函数的选择必须满足核函数矩阵式半正定的。那么任意一个核函数就会对于一个特征映函数Φ(x)TΦ(y)相乘。

核函数的而一个优势在于不需要知道具体的空间变化函数Φ(x),当计算两个Φ(x)TΦ(y)相乘时,可以直接利用核函数求解,SVM
优化中一个特别好的地方就是可以把所以的运算都可以写成内积形式,这样我们就可以把内积运算转换为核函数的方法,称为核技巧(kernel
trick)。这样,一般在低维不可分的数据在映射到高维上,都具有较好的分割效果。

支持向量的数目存在一个最优值,SVM的优点就是它能对数据进行高效分类,如果支持向量太少,就可能得到一个很差的决策边界,如果支持向量过多,也就相当于每次都利用整个数据集来进行分类,这种方法称为K邻近。

本质上来说,SVM是一个两类分类器,其分类结果不是1就是-1,可以使用SVM两类分类器扩展到多类分类器(参考:A Comparison
of Methods for Muticlass Support Vector Machines)。

SVM
算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。

a.一对多法(one-versus-rest,简称OVR
SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

假如我有四类要划分(也就是4个Label),他们是A、B、C、D。于是我在抽取训练集的时候,分别抽取A所对应的向量作为正集,B,C,D所对应的向量作为负集;B所对应的向量作为正集,A,C,D所对应的向量作为负集;C所对应的向量作为正集,
A,B,D所对应的向量作为负集;D所对应的向量作为正集,A,B,C所对应的向量作为负集,这四个训练集分别进行训练,然后的得到四个训练结果文件,在测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试,最后每个测试都有一个结果f1(x),f2(x),f3(x),f4(x).于是最终的结果便是这四个值中最大的一个。

note:这种方法有种缺陷,因为训练集是1:M,这种情况下存在biased.因而不是很实用.

b.一对一法(one-versus-one,简称OVO
SVMs或者pairwise)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。

还是假设有四类A,B,C,D四类。在训练的时候我选择A,B; A,C; A,D;
B,C;
B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结果。

投票是这样的.
A=B=C=D=0;
(A,
B)-classifier 如果是A win,则A=A+1;otherwise,B=B+1;
(A,C)-classifer
如果是A win,则A=A+1;otherwise, C=C+1;
...
(C,D)-classifer 如果是A
win,则C=C+1;otherwise,D=D+1;
The decision is the
Max(A,B,C,D)

notw:这种方法虽然好,但是当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的.

c.层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。

从Loagistic 到 SVM算法

时间: 2024-10-07 19:18:58

从Loagistic 到 SVM算法的相关文章

SVM算法

摘要:SVM(支持向量机)算法是一种典型的监督式学习算法.介绍SVM算法的思想和应用. 关键词:机器学习   SVM    支持向量机 SVM(Support Vector Machine)支持向量机,简称SV机,一种监督式学习算法,广泛地应用于统计分类和回归分析中. SVM算法的思想可以概括为两点. 第一点:SVM是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本映射到高维特征空间使其线性可分,从而使得高维特征空间采用采用线性算法对样本的非线

SVM算法推导

1,SVM算法的思考出发点 SVM算法是一种经典的分类方法.对于线性可分问题,找到那个分界面就万事大吉了.这个分界面可以有很多,怎么找呢?SVM是要找到最近点距离最远的那个分界面.有点绕,看下面的图就明白了 为了推导简单,我们先假设样本集是完全线性可分的,也就一个分界面能达到100%的正确率. 2,线性可分的情况 (1)优化目标的建立 最近点距离最远的分界面,这句话得用数学式子表示出来,这样才能用数学工具进行求解. 首先,假设分界面是y=wx+b,点\(x_i\)距离平面的距离用数学表达是\(\

机器学习笔记—svm算法(上)

本文申明:本文原创,如转载请注明原文出处. 引言:上一篇我们讲到了logistic回归,今天我们来说一说与其很相似的svm算法,当然问题的讨论还是在线性可分的基础下讨论的. 很多人说svm是目前最好的分类器,那我们就来看看我们的svm好在哪里. 一:初识svm 问题:用一条直线把下图的圆球和五角星分离开来. 解答:有N种分法,如下图: 附加题:找出最佳分类? 解答:如图: Exe me?鬼知道哪一条是最佳?? 等等这个最佳分类是不是等价于,地主让管家给两个儿子分地,是不是只要让两家之间一样多就可

程序员训练机器学习 SVM算法分享

http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine 摘要:支持向量机(SVM)已经成为一种非常受欢迎的算法.本文主要阐述了SVM是如何进行工作的,同时也给出了使用Python Scikits库的几个示例.SVM作为一种训练机器学习的算法,可以用于解决分类和回归问题,还使用了kernel trick技术进行数据的转换,再根据转换信息在可能的输出之中找到一个最优的边界. [CSDN报道]支持向量机(Support

python 实现 svm算法

svm算法,说到底就是二次优化问题. 带有约束的二次优化问题. 1.线性优化问题,课件Leture5-QP 参考 https://www.coin-or.org/PuLP/CaseStudies/a_blending_problem.html python代码: # problemdef qp_test1(): prob = LpProblem("qp_test1", LpMinimize) x1 = LpVariable("x1", 0, None, LpInte

SVM算法入门

转自:http://blog.csdn.net/yangliuy/article/details/7316496SVM入门(一)至(三)Refresh 按:之前的文章重新汇编一下,修改了一些错误和不当的说法,一起复习,然后继续SVM之旅. (一)SVM的简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]. 支持向量机方法

转载:scikit-learn学习之SVM算法

转载,http://blog.csdn.net/gamer_gyt 目录(?)[+] ====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正 转载请注明出处,谢谢 =====================================================================

Spark MLlib SVM算法

1.1 SVM支持向量机算法 支持向量机理论知识参照以下文档: 支持向量机SVM(一) http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html 支持向量机SVM(二) http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982684.html 支持向量机(三)核函数 http://www.cnblogs.com/jerrylead/archive/2011/03/18/

scikit-learn学习之SVM算法

====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正 转载请注明出处,谢谢 ====================================================================== 机器学习中的算法(2)-支持向量机(SVM)基础 关于SVM一篇比较全介绍的博文