Machine Learning - XII. Support Vector Machines支持向量机(Week 7)

http://blog.csdn.net/pipisorry/article/details/44522881

机器学习Machine Learning - Andrew NG courses学习笔记

Support Vector Machines支持向量机

{学习复杂非线性函数的有力方法}

优化目标Optimization Objective

逻辑回归

SVM的Cost function

另一个角度看待单个样本的cost:SVM与逻辑回归的不同

从θ'x出发看待而不是hθ(x)

Note: 蓝色线代表logistic regression, 紫洋红色线代表SVM;

紫洋红色线代表的cost函数给了SVM计算的优势computational advantage, that will give us later on an easier optimization problem, that will be easier for stock trades.

逻辑回归H函数预测错就会有很大的惩罚,y = 1,H预测接近1(不能达到)或者θ'x接近正无穷,-log(H)惩罚就会接近0;H预测接近0(不能达到)或者θ'x接近负无穷,-log(H) cost就会接近无穷大。    同理SVM中,y = 1,如果θ'x >1(也就是远离分界边缘)时无惩罚,而如果θ'x<0(or 1)时惩罚很大,且θ'x越<0时惩罚越大


SVM中使用新规格化参数C代替规格化参数λ,这样C就相当于1/λ。

Hypothesis for SVM

θ已经得到后,θ'x >= 0 时预测y = 1;否则预测y=0。

Note: SVM doesn't output the probability. y predict 1, if θ'x >= 0.

这个hypothesis和在学习θ的值时想要θ'x >= 1(最小化cost fun) 没有太大关系, 尤其是参数C设置相当大的时候,更要θ'x >= 1使得cos1() = 0。

皮皮blog



大边缘分类器Large Margin Classifier

如果有一个negative example,可能 θ'x < 0就足够了(这样就认为它是正确的,不用去惩罚它),that will make sure we got the example right.但是svm不会 just barely 认为这个样本正确,我们想要的是θ'x < -1。And so this builds in an extra safety factor or safety margin factor into the support vector machine.

Note: 在logistic回归中,negative example,θ'x < -1都不够(都要去惩罚,只是惩罚力度不一样),这样可能导致关注的点并不是分界面附近的点,而是远离分界面的点(因为远离分界面分对的点[虽然都是小惩罚]加起来的惩罚可能还超过分界面附近分错的点)。


SVM会选择 black decision boundary. this black decision boundary has a larger distance called the   margin,gives the SVM a certain robustness, because it tries to separate the data with as a large a margin as possible.

SVM是一个large margin classifier。
decision boundary是能够将所有数据点进行很好地分类的h(x)边界。如图所示,我们可以把绿线、粉线、蓝线或者黑线中的任意一条线当做decision boundary,但是哪一条最好呢?绿色、粉色、蓝色这三类boundary离数据非常近,再加进去几个数据点,很有可能这个boundary就能很好的进行分类了,而黑色的decision boundary距离两个类都相对较远,我们希望获得的就是这样的一个decision boundary。什么是margin?margin就是将该boundary进行平移所得到的两条蓝线的距离,如图所指。

regularization concept C的取值大小的影响

对C的取值应该在分类是否犯错和margin的大小上做一个平衡。那么C取较大的值会带来什么效果呢?对outliers敏感。

如上图中,加一个额外的红x,如果c太大(拼命拟合数据防止cost func A部分太大)的话,SVM就会将 decision boundary从黑线改变成紫红线。And in particular, if use a large margin classifier then your learning algorithms can be sensitive to outliers。
当C不是很大时,不仅可以消去outliers的影响(防止过拟合),在数据线性不可分时也表现良好。

大边缘分类背后的数学

{解释了为什么SVM是一个large margin classifier}

向量内积

Note: u'v = ||u||*||v||*cos(u,v) = p*||u||

SVM决策边界

SVM优化问题

修改SVM最小化问题为:

几点说明:

1 s.t.约束条件:来自min(cost fun)的第一项,参数C设置很大时,第一项要为0;在参数C很大时,cost fun第一项要为0(cost fun才会小)就有了s.t.的约束条件pi * θ >= 1,这时cost function只剩下后面的那项。

2 简化说明问题,设θ0=0,只剩下θ1和θ2,其实加不加θ0对后面的derivation没有影响。θ0 = 0也正意味着decision boundary必须通过原点(0,0)。
3 parameter vector θ垂直于决策边界decision boundary。如边界线θ'x >= 0为θ1*x1 + θ2*x2 >= 0时,θ垂直于θ1*x1 + θ2*x2 = 0这条边界。(平面几何基础)

SVM做的是最小化squared norm of the square length of the parameter vector θ(cost fun第一项为0就要后面的规格化项θ项要小(这样cost fun才会小),这就要θ小). 因为要最小化θ,而根据约束条件p*||θ||又要>=1,所以就要p足够大,,pi大就导致large margin(这就是SVM为什么是large margin classifier的原因),这样SVM就选择了右边的decision boundary而不是左边的(图中左边是随便给出的边界线,右边是svm的large margin边界线)。this machine ends up with enlarge margin classifiers because its trying to maximize the norm of these P1 which is the distance from the training examples to the decision boundary.

[SVM数学分析 part1+part2]

皮皮blog



Kernels核

kernel内核之前都是线性内核,即θ'x是线性的。kernel的目的就是使用landmarks和kernel function定义额外的features来学习更复杂的非线性分类器nonlinear classifiers。

非线性决策边界

由于有好多高阶多项式项,所以使用high order polynomials 会变得计算昂贵computationally expensive。

Kernel定义

kernel其实就是similarity fun between x and landmark l.这里landmark l是手动选择的,在后面会讲到怎么选择。首先手动选择三个点l来定义新的features,这里feature f measures how close X is to the landmark.

红色标注为点 x 和 landmark l间的欧式距离,上面使用高斯函数刻画数据x与landmark l间的距离,所以此相似性函数就称作Gaussian kernel。从高斯函数[概率论:高斯/正态分布]的特性上看,可知,如果x与landmark l很近时,f接近1;相反,如果x与landmark l很远时,f接近0。

这样给定3个landmarks,就可以给每个给定的数据样本x计算3个新的features:  f1, f2, and f3。

示例:假设已经定义好了features,可以学习到的source of hypothesis。假设已经得到了参数θ的值。对于接近l1 和 l2的点我们预测为正,远离的预测为0。

landmarks的选择

对于复杂的学习问题,我们可能需要很多landmarks。一种方法是将训练样本当作 landmarks ,有多少个training example就选择多少个landmarks。

SVM with Kernels

给出数据后,我们根据高斯kernel可以将数据n维度x转换成m维度的新features f,不过这里我们使用了所有的数据当作landmarks,所以m=n。

lz: kernels为什么能够非线性分类?这有点像KDE非参数估计的方法了,svm with kernels就相当于将线性距离转换成了高斯分布定义的距离了。因为之前直接使用θ'x肯定是不能区分的,但是加入核后,我们要区分的是新数据x和哪个xi(有新features)最相似,即找到和新x模式最像的那一类,模式就是通过核控制的,是非线性的,所以kernels能够非线性分类。或者这么说?核实际上定义了一个概率密度,新x到哪个类的核概率密度越大,新x就分到哪个类中。

Hypothsis 及参数θ的推断



Note: what most svm implementations do is actually replace this θ'θ,will instead, θ' times some matrix inside, that depends on the kernel you use, times θ.That allows the support vector machine software to run much more efficiently.It allows it to scale to much bigger training sets.
Whereas, logistic regression with kernels, you can do it, but this would run very slowly. And it won't be able to take advantage of advanced optimization techniques that people have figured out for the particular case of running a support vector machine with a kernel.

参数选择:Bias vs. Variance trade-off in svm

(how do you choose the parameters(C & σ for gaussian kernel) of the svm?)

sigma大小对模型的影响

if sigma squared is large,the Gaussian kernel would tend to fall off relatively slowly and so this would be my feature f(i), and so this would be smoother function that varies more smoothly, and so this will give you a hypothesis with higher bias and lower variance, because the Gaussian kernel that falls off smoothly,you tend to get a hypothesis that varies slowly, or varies smoothly as you change the input x.(高斯内核平滑时,x改变时转换后的f变化不大,更大范围内fi相近,hypothesis变化不大。这样就更可能预测错误,导致high bias;但是h变化不大正好更适应x的变化,所以variance很小)。

kernel内核的其它选择

所有kernel都要满足Mercer定理。 because svm algorithms or implementations of the SVM have lots of clever numerical optimization tricks to solve for the parameter's theta efficiently.


Note:
1 The polynomial kernel almost always or usually performs worse.Usually it is used only for data where X and l are all strictly non negative,to ensures these inner products are never negative.And this captures the intuition that X and l are very similar to each other, then maybe the inter product between them will be large.
2 string kernel: sometimes used if your input data is text strings or other types of strings.do text classification problem, where the input x is a string ,to find the similarity between two strings using the string kernel.

其它需要注意的点

1 SVM总能找到全局最优值,不会是局部最优。SVM has is a convex optimization problem and so the good SVM optimization software packages will always find the global minimum or close to it.

2 使用svm前要feature scaling,防止某个feature主导 dominate距离计算。

逻辑规划和SVM的选择


数据集特别特别大时,Gaussian Kernel will be somewhat slow to run.So try to manually create more features and use logistic regression or an SVM without the Kernel.

logistic regression 和 SVM without a kernel基本差不多。they will usually do pretty similar things and give pretty similar performance, but depending on your implementational details, one may be more efficient than the other.But, where one of these algorithms applies,the other one is to likely to work pretty well as well.

SVM和LR的比较

LR适合需要得到一个分类概率的应用场景,SVM不会产生分类概率,直接产生分类类别。

SVM采用核函数而LR不采用核函数的原因:SVM训练时只有少数的支持向量样本参与计算,也就是只有支持向量才参与核函数计算,而LR中,所有数据样本都参与计算,如果使用核函数,所有样本都参与核函数计算,时间复杂度很高。

LR模型更简单,更适用于处理大规模数据集,但是需要在模型训练前做复杂的特征工程,而SVM适用于小规模数据集,时间复杂度高,参数比较多,模型优化更复杂。

LR一般用于解决线性分类,对非线性问题LR往往先通过复杂的特征工程映射到高维稀疏的可分特征空间中,而SVM通过对偶形式自然引入了核函数。

SVM的损失函数中自带L2正则项,因此达到结构风险最小化,而LR必须自己在损失函数上加入L1或L2正则。

[LR与SVM的区别 ]

[逻辑回归(logistic regression)和支持向量机(SVM)的比较]

这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重,两者的根本目的都是一样的。即支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)。

两个模型对数据和参数的敏感程度不同:

1 异常点来说:

1)两者对异常的敏感度也不一样。同样的线性分类情况下,如果异常点较多的话,无法剔除,首先LR,LR中每个样本都是有贡献的,最大似然后会自动压制异常的贡献,SVM+软间隔对异常还是比较敏感,因为其训练只需要支持向量,有效样本本来就不高,一旦被干扰,预测结果难以预料。

[机器学习算法系列(12):SVM(6)—SVM与LR的异同]

2)不同观点。LR是全局模型,对异常值敏感,对极度样本不平衡的数据集敏感,而SVM是局部模型,只考虑支持向量,对异常值不敏感(lz认为这里说的对异常值不敏感肯定是错误的,去掉这几个字还可以)。

[LR与SVM的区别 ]

3) 当然从作者的角度来看,两者对于异常的敏感对于分类严重错误时应该是同等量级的,从下图看出分类严重错误的话,两者对异常点误分类的惩罚都是同等线性的。


而对于分类正确但是远离本类点的异常点来说,lr更敏感,因为svm并不会考虑分类正确的这些点,而lr把这些点都考虑进来了,这样的点越多,敏感度越大。

综上,lz认为lr模型相对svm对异常点更敏感。

2 数据维度来说:Linear SVM比较依赖penalty的系数和数据表达空间的测度,而(带正则项的)LR比较依赖对参数做L1 regularization的系数。但是由于他们或多或少都是线性分类器,所以实际上对低维度数据overfitting的能力都比较有限,相比之下对高维度数据,LR的表现会更加稳定,为什么呢? 因为Linear SVM在计算margin有多“宽”的时候是依赖数据表达上的距离测度的,换句话说如果这个测度不好(badly scaled,这种情况在高维数据尤为显著),所求得的所谓Large margin就没有意义了,这个问题即使换用kernel trick(比如用Gaussian kernel)也无法完全避免。所以使用Linear SVM之前一般都需要先对数据做normalization,而求解LR(without regularization)时则不需要或者结果不敏感。

[Linear SVM 和 LR 有什么异同?]

皮皮blog


使用支持向量机

使用SVM软件包

1. 使用软件包时还要自己设定参数:1.  parameter C   2. kernel function
2. 使用线性内核的情景:很多的features 但是training set小。只需要拟合一个线性决策边界,而不是拟合一个非常复杂的非线性函数,否则数据不够可能会overfit。

多类分类


θ k  is trying to distinguish class y = k from all of the other classes.

皮皮blog



Reviews




from:http://blog.csdn.net/pipisorry/article/details/44522881

ref: 支持向量机(SVM)是什么? - 知乎


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值