机器学习之支持向量机SVM

#Support Vector Machine(支持向量机SVM)

与logistic回归和神经网络相比,SVM在学习复杂的非线性方程时能够提供一种更为清晰和更加强大的方式。

【监督学习算法】

 

#Optimization objective(优化目标)

支持向量机(SVM)的总体优化目标:

如果优化了这个函数(下图最后一个式子),就得到了SVM学习得到的参数。

变化一)去掉常数m,不会改变使式子最小化的θ值;

变化二)在logistic回归中,目标函数有两项,前一项是训练样本的代价函数,后一项是正则化项;我们考虑的不是计算A+λB,而是通过设定不同的正则化参数λ以便能够权衡我们想在多大程度上去适应训练集,即最小化A,还是更多地去保持正则化参数足够小即更多地注重B项。

对于SVM,我们通常会用不同的参数C,要最小化C*A+B。因此在logistic回归中,如果把λ设为一个很大的值,意味着B有很高的权重,而在SVM,如果把C设为一个非常小的值,则会给B比A大得多的权重。

所以这只是一种不同的参数设置方法,来决定我们是更关心第一项的优化,还是更关心第二项的优化。可以把C类似看成1/λ的作用,但不是等于。

与logistic回归相比,SVM不会输出概率。它进行了一个直接的预测,预测y是等于1还是0.

 

#Large Margin Intuition(直观上对大间隔的理解)

人们有时候把SVM叫做large margin classifiers(大间距分类器):

SVM有更高的要求,不是恰好能正确分类就行了,θTX不是略大于0就可以了,我们需要的是比0大很多,比如大于等于1。这相等于在SVM中构建了一个安全因子,一个安全间距。

如果把C设为一个很大的数,比如100,000,SVM会做些什么:

  • 如果C很大,第一项就要最小化为0

  • 这条黑色的决策边界拥有更大的距离,这个距离叫做margin(距离);相比红色和绿色,黑色的决策边界和训练样本的最小距离要更大一些,在划分样本的时候表现更好。
  • margin of the support vector machine(支持向量机的间距):使SVM有robustness(鲁棒性),因为它在分离数据时,会尽量用大的间距去分离。

当只使用大间距分类器的时候,学习算法会对异常点很敏感:

  • 如果正则化常数C被设得很大,那么SVM会将决策边界从黑线变成紫红线;
  • 如果C比较小,最后得到的还是黑线;

如果数据不是线性可分的,SVM依然能够正确地进行分类:

 

#Mathematics behind large margin classification(大间距分类器的数学原理)【optional】

SVM优化问题与大间距分类器的联系。

先复习vector inner products(向量内积)的性质:

  • 对优化目标函数来说,支持向量机做的是最小化参数向量θ的范数的平方或者说是长度的平方。

  • 令θ_0=0意味着决策边界必须通过原点(0,0),然而如果≠0,SVM也可以找出正样本和负样本之间的大间距分隔;
  • 这些间距其实就是P_(i);
  • 通过选择右边的决策边界而不是左边的,SVM可以使参数θ的范数变小很多,这就是为什么SVM会产生大间距分类现象。

 

#Kernels(核函数)

  • similarity function(相似度函数):用数学家的术语就是kernel function(核函数),图中的kernel function实际上是Gaussian kernel(高斯核函数),之后会见到别的核函数;
  • 下面几张图暂时先不管截距项x_0

  • 这些features(特征)做的是衡量x到landmark(标记)l的相似度;
  • 每一个landmark(标记)会定义一个新的特征f_i;

  • σ^2是高斯核函数的参数

所以通过landmark(标记点)和similarity/kernel function(相似性/核函数)来定义新的特征变量,可以训练出非常复杂的非线性决策边界。

 

从哪里得到landmark(标记点)?

直接将训练样本作为标记点:

SVM的学习算法:

  • 为了计算效率,在实现的时候,其实是用θ^T*M*θ替换掉θ^Tθ,M为某个矩阵,这依赖于你采用的核函数。这是另一种略有区别的距离度量方法,意味着我们最小化了一种类似的度量,这是参数向量θ的缩放版本,并且取决于核函数。这使它可以应用更大的训练集。
  • 确实可以将核函数这个想法应用于定义特征向量,将标记点之类的技术用于逻辑回归算法,但是用于支持向量机的计算技巧不能较好地推广到其他算法诸如逻辑回归上。

不建议自己写矩阵求逆函数、平方根函数、最小化代价函数,而是应该用人们开发的成熟软件包。

 

怎么选择支持向量机SVM中的参数?

  • 如果σ^2较大,则高斯核函数倾向于变得相对平滑,模型会是较高的bias(偏差)和较低的variance(方差)的分类器;
  • 如果σ^2很小,则高斯核函数会变化很剧烈,模型是低bias(偏差)和高variance(方差)的分类器。

 

#Using SVM(使用SVM)

  • 强烈建议使用高度优化好的软件库中的一个,而不是自己去实现。
  • 好的软件库:liblinear、libsvm...

1、参数C的选择

2、选择内核参数或者想要使用的相似函数:

1)选择不需要任何内核参数,即linear kernel(线性核函数)。是SVM的一个版本,只是给你一个标准的线性分类器;

如果你有大量的特征,而训练的样本数很小,也许只想拟合一个线性的决策边界,而不去拟合一个非常复杂的非线性函数,因为没有足够的数据,可能会过度拟合。

2)Gaussian kernel(高斯内核函数),则需要选择一个参数σ^2;

特征少,训练集大的时候,想要拟合复杂的非线性决策边界。

 

根据使用的支持向量机SVM软件包,可能需要你实现一个kernel function(核函数)或者实现similarity function(相似函数):

  • 一些SVM包需要用户提供一个核函数,能够输入x1,x2并返回一个实数,它将自动地生成所有特征变量,并从这开始训练向量机。
  • 如果使用高斯核函数,一些SVM的函数实现也会包括高斯核函数,以及其他的核函数,因为目前高斯核函数和线性核函数可能是最常见的核函数。
  • 一个实现函数的注意事项:如果你有大小不一的特征向量,很重要的一件事是在使用高斯函数之前将这些特征变量的大小按比例归一化
    • 为了让算法更好地实现,需要进一步缩放比例,这会保证SVM能考虑到所有不同的特征变量。

 

不是所有可能提出来的相似函数都是有效的核函数,有效的相似函数需要满足一个技术条件,叫Mercer's Theorem(默塞尔定理);

因为为了有效地求解参数θ,支持向量机算法SVM的实现函数有许多熟练的数值优化技巧,在最初的设想里,这些决策都用以将我们的注意力仅仅限制在可以满足默塞尔定理的核函数上,这个定理是确保所有的SVM包能够用许多优化方法从而迅速得到参数θ。

  • polynomial kernel(多项式核函数)(不怎么常用,效果差,通常用在x和l都是严格的非负数时):实际上有两个参数,一个是你需要在这里加上一个什么样的数字,另一个是多项式的次数;
  • esoteric(难懂的)
  • string kernel(字符串核函数):输入的数据是文本字符串或者其他类型的字符串;
  • chi-square kernel(卡方核函数)、histogram intersection kernel(直方相交核函数);

 

在multiclass(多类分类)中如何输出多个类别间的恰当的decision boundary(判定边界):

  • 很多SVM的包已经内置了多分类的函数;
  • 另一个做多分类的方法是使用one-vs-all方法,在之前讲解逻辑回归的时候讨论过。

 

#Logistic regression(逻辑回归) VS. SVMs(支持向量机)

  • 当特征数量n比训练样本个数m多,用逻辑回归或用不带核函数的svm,即线性核函数;
  • 当n小而m大小适中,线性核函数的SVM会工作得很好;
  • n很小而m很大,高斯核函数的SVM运算速度会很慢,尝试手动创建更多的特征变量,然后用逻辑回归或者不带核函数的支持向量机;
  • 对所有的这些问题,对于不同的设计,设计良好的神经网络可能会非常有效,但有时候神经网络训练起来可能会特别慢,但是如果你有一个非常好的SVM实现包,可能会运行得比神经网络更快。
  • SVM具有的优化问题是一种convex optimization(凸优化)问题,所以好的SVM优化软件包总是会找到全局最小值,或者接近它的值。所以对于SVM不需要担心局部最优;
  • 而在实际应用中,对于神经网络而言局部最优是一个不大不小的问题。

最重要的是你有多少数据、有多熟练、是否擅长做error analysis(误差分析)和debugging learning(排除学习)算法、指出如何设定新的特征变量、弄明白为你的学习算法输入哪些值,通常这些比你考虑是使用逻辑回归还是SVM更加重要。

 


PS.内容为学习吴恩达老师机器学习的笔记【https://study.163.com/course/introduction/1004570029.htm

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值