支持向量机(Support Vector Machines)是广泛应用于工业界和学术界的一种监督学习算法,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。下面从SVM的优化目标开始,通过对逻辑回归一点一点的修改来得到本质上的支持向量机。逻辑回归部分参考文章 机器学习——逻辑回归算法
1. 优化目标
在逻辑回归中我们已经熟悉了这里的假设函数形式,和右边的S型激励函数,用 z z z 表示 θ T x \theta^Tx θTx。
在逻辑回归中,如果有一个 y = 1 y=1 y=1的样本,我们希望 h θ ( x ) {
{h}_{\theta }}\left( x \right) hθ(x) 趋近1,因为我们想要正确地将此样本分类,这就意味着 θ T x \theta^Tx θTx 应当远大于0,这里的 > > >> >>意思是远远大于0。这是因为由于 z z z 表示 θ T x \theta^Tx θTx,当 z z z远大于0时,即到了该图的右边,此时逻辑回归的输出将趋近于1。相反地,如果我们有另一个样本,即 y = 0 y=0 y=0。我们希望假设函数的输出值将趋近于0,这对应于 θ T x \theta^Tx θTx,或者就是 z z z 会远小于0。
我们已经知道逻辑回归的代价函数表达式为:
C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right) Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
= − y × l o g ( 1 1 + e − θ T x ) − ( 1 − y ) × l o g ( 1 − 1 1 + e − θ T x ) =-y\times log\left(\frac{1}{1+{ {e}^{-\theta^Tx}}}\right)-(1-y)\times log\left(1-\frac{1}{1+{ {e}^{-\theta^Tx}}}\right) =−y×log(1+e−θTx1)−(1−y)×log(1−1+e−θTx1)
这里的 c o s t cost cost函数是一个训练样本所对应的表达式。现在我们考虑两种情况:一种是 y y y等于1的情况;另一种是 y y y 等于0的情况。
在第一种情况中,假设 y = 1 y=1 y=1 ,此时在目标函数中只需有第一项起作用,因为 y = 1 y=1 y=1时, ( 1 − y ) (1-y) (1−y)项将等于0。因此,当在 y = 1 y=1 y=1 的样本中时,即在 ( x , y ) (x, y) (x,y)中 ,我们得到 c o s t = − log ( 1 1 + e − z ) cost=-\log(\frac{1}{1+e^{-z}}) cost=−log(1+e−z1)这样一项。
用 z z z 表示 θ T x \theta^Tx θTx,即: z = θ T x z= \theta^Tx z=θTx。如果画出关于 z z z 的函数,会看到左下角的这条曲线,我们可以看到,当 z z z 增大时,也就是相当于 θ T x \theta^Tx θTx增大时, z z z 对应的值会变的非常小。这也就解释了,为什么逻辑回归在观察到正样本 y = 1 y=1 y=1时,试图将 θ T x \theta^Tx θTx设置得非常大。因为,在代价函数中的这一项会变的非常小。
第二种情况,如果 y = 0 y=0 y=0,此时在目标函数中只需有第二项起作用。因此,当在 y = 0 y=0 y=0 的样本中时,我们得到 c o s t = − log ( 1 − 1 1 + e − z ) cost=-\log(1-\frac{1}{1+e^{-z}}) cost=−log(1−1+e−z1),得到右上的图像。
现在开始建立支持向量机,我们会从得到的代价函数开始,对 c o s t = − log ( 1 1 + e − z ) cost=-\log(\frac{1}{1+e^{-z}}) cost=−log(1+e−z1)做一点修改,取 z = 1 z=1 z=1 点,画出将要用的新的代价函数,左下图。新的代价函数将是同逻辑回归非常相似的直线,也就是用紫红色画的线,由两条线段组成,即位于右边的水平部分和位于左边的直线部分。在SVM中我们将使用这个新的代价函数,我们把这个函数命名为 cos t 1 ( z ) {\cos}t_1{(z)} cost1(z),对应着 y = 1 y=1 y=1的情况。
另外一种情况是当 y = 0 y=0 y=0时,我们用同样的方法产生新的代价函数,如右上图,我们命名为 cos t 0 ( z ) {\cos}t_0{(z)} cost0(z)
拥有了上面两个新的代价函数定义之后,下面开始构造支持向量机。
对于逻辑回归的代价函数:
J ( θ ) = 1 m ∑ i = 1 m [ y ( i ) log ( − h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) ( ( − log ( 1 − h θ ( x ( i ) ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[{
{y}^{(i)}}\log \left( -{h_\theta}\left( {
{x}^{(i)}} \right) \right)+\left( 1-{
{y}^{(i)}} \right)((-\log \left( 1-{h_\theta}\left( {
{x}^{(i)}} \right) \right))]}+\frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}} J(θ)=m1i=1∑m[y(i)log(−hθ(x(i)))+(1−y(i))((−log(1−hθ(x(i))))]+2mλj=1∑nθj2
对于支持向量机而言,实质上我们要将中括号内的前一项 l o g ( h θ ( x ( i ) ) ) log\left( {h_\theta}\left( x^{(i)} \right) \right) log(hθ(x(i)))替换为 cos t 1 ( z ) {\cos}t_1{(z)} cost1(z),也就是 cos t 1 ( θ T x ) {\cos}t_1{(\theta^Tx)} cost1(θTx),同样地,将后一项 − l o g ( 1 − h θ ( x ( i ) ) ) -log\left(1- {h_\theta}\left( x^{(i)} \right) \right) −log(1−hθ(x(i)))替换为 cos t 0 ( z ) {\cos}t_0{(z)} cost0(z),也就是 cos t 0 ( θ T x ) {\cos}t_0{(\theta^Tx)} cost0(θTx)。这里的代价函数 cos t 1 {\cos}t_1 cost1, cos t 0 {\cos}t_0 cost0,就是之前所提到的那两条线。因此,对于支持向量机,我们得到了这里的最小化问题,即:
现在,按照支持向量机的惯例,事实上,我们的书写会稍微有些不同,代价函数的参数表示也会稍微有些不同。
首先,我们要除去 1 / m 1/m 1/m这一项,因为 1 / m 1/m 1/m 仅是个常量,因此在这个最小化问题中,无论前面是否有 1 / m 1/m 1/m 这一项,最终我所得到的最优值 θ { {\theta }} θ都是一样的。
第二点概念上的变化,是在正则化方面的变化。对于逻辑回归,在目标函数中,我们有两项:第一个是训练样本的代价,第二个是我们的正则化项,通过正则参数 λ \lambda λ来权衡这两项。但对于支持向量机,按照惯例,我们将使用一个不同的参数替换这里的 λ \lambda λ,这个参数称为 C C C。可以把这里的参数 C C C 考虑成 1 / λ 1/\lambda 1/λ。
因此,这就得到了在支持向量机中的整个优化目标函数。然后最小化这个目标函数,得到SVM 学习到的参数 θ {
{\theta}} θ。
m i n C ∑ i = 1 m [ y ( i ) cos t 1 ( θ T x ( i ) ) + ( 1 − y ( i ) ) cos t 0 ( θ T x ( i ) ) ] + 1 2 ∑ j = 1 n θ j 2 min C\sum\limits_{i=1}^{m}{[{
{y}^{(i)}}{\cos}t_1{(\theta^Tx^{(i)})}+\left( 1-{
{y}^{(i)}} \right){\cos}t_0{(\theta^Tx^{(i)})}]}+\frac{1}{2}\sum\limits_{j=1}^{n}{\theta _{j}^{2}} minCi=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21j=1∑nθj2
有别于逻辑回归输出的概率。在这里,当最小化代价函数,获得参数 θ {
{\theta }} θ时,支持向量机所做的是它来直接预测 y y y的值等于1,还是等于0。
2. 大间距的直观理解
人们有时将支持向量机看作是大间距分类器。在这一部分,将介绍其中的含义,这有助于我们直观理解SVM模型的假设是什么样的。
最小化代价函数的必要条件是,如果你有一个正样本, y = 1 y=1 y=1,则只有在 z > = 1 z>=1 z>=1时,代价函数 cos t 1 ( z ) {\cos}t_1{(z)} cost1(z)才等于0。换句话说,如果你有一个正样本,我们会希望 θ T x > = 1 \theta^Tx>=1 θTx>=1,反之,如果 y = 0 y=0 y=0,函数 cos t 0 ( z ) {\cos}t_0{(z)} cost0(z),它只有在 z < = − 1 z<=-1 z<=−1的区间里函数值为0。
事实上,如果你有一个正样本 y = 1 y=1 y=1,则其实我们仅仅要求 θ T x \theta^Tx θTx大于等于0,就能将该样本恰当分出,这是因为如果 θ T x \theta^Tx θTx>0大的话,我们的模型代价函数值为0,但是,支持向量机的要求更高,不仅仅要能正确分开输入的样本,即不仅仅要求 θ T x \theta^Tx θTx>0,我们需要的是比0值大很多,比如大于等于1, y = 1 y=1 y=1的情况类似。这就相当于在支持向量机中嵌入了一个额外的安全因子,或者说安全的间距因子。
具体而言,接下来会考虑一个特例。我们将这个常数 C C C设置成一个非常大的值。比如100000或者其它非常大的数,然后来观察支持向量机会给出什么结果?
如果 C C C非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为0的最优解。因此,让我们尝试在代价项的第一项为0的情形下理解该优化问题。这将给我们一些关于支持向量机模型的直观感受。
当输入一个训练样本标签为 y = 1 y=1 y=1,需要找到一个 θ { {\theta }} θ,使得 θ T x > = 1 \theta^Tx>=1 θTx>=1,类似地,标签为 y = 0 y=0 y=0,需要 θ T x < = − 1 \theta^Tx<=-1 θTx<=−1。这里第一项是 C C C乘以0,因此可以将其删去,得到代价函数表达式 m i n 1 2 ∑ j = 1 n θ j 2 min \frac{1}{2}\sum\limits_{j=1}^{n}{\theta _{j}^{2}} min21j=1∑nθj2。这样当求解这个优化问题,最小化这个关于变量 θ { {\theta }} θ的函数的时候,会得到一个非常有趣的决策边界。
给出下图一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分的。有多条不同的直线,可以把正样本和负样本完全分开。
支持向量机将会选择这个黑色的决策边界,相较于粉色或者绿色画的决策界,这条黑线看起来是更稳健的决策界。在分离正样本和负样本上它显得的更好。这条黑线有更大的距离,这个距离叫做间距(margin)。
黑色的决策界和训练样本之间有更大的最短距离。粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器。
3. 大间距分类背后的数学
这部分在吴恩达视频课程中作为选修,但是我听了之后感觉会对SVM的大间距分类器产生更好的理解。
首先,复习一下关于向量内积的知识。假设有两个向量, u u u和 v v v, u = [ u 1 , u 2 ] u=[u_1,u_2] u=[u1,u2], v = [ v 1 , v 2 ] v=[v_1,v_2] v=[v1,v2]。 u T v u^T v uTv也叫做向量 u u u和 v v v之间的内积。由于是二维向量,可以将它们画在这个图上。
向量 u u u,在横轴上,取值为某个 u 1 {
{u}_{1}} u1,而在纵轴上,高度是某个 u 2 {
{u}_{2}} u2作为 u u u的第二个分量。很容易向量 u u u的范数, ∥ u ∥ \left\| u \right\| ∥u∥表示 u u u的范数,即 u u u的长度,即向量 u u u的欧几里得长度。根据毕达哥拉斯定理, ∥ u ∥ = u 1 2 + u 2 2 \left\| u \right\|=\sqrt{u_{1}^{2}+u_{2}^{2}} ∥u∥=u12+u22,这是向量 u u u的长度,是一个实数。
我们来看看如何计算 u u u和 v v v之间的内积。我们将向量 v v v投影到向量 u u u上,做一个直角投影,设这条红线的长度为 p p p,因此 p p p是 v v v投影到向量 u u u上的长度,因此可以得到 u T v = p ⋅ ∥ u ∥ {
{u}^{T}}v=p\centerdot \left\| u \right\| uTv=p⋅∥u∥。
需要注意的就是 p p p值, p p p事实上是有符号的,即它可能是正值,也可能是负值。在内积计算中,如果 u u u和 v v v之间的夹角小于90度,那么那条红线的长度 p p p是正值。然而如果这个夹角大于90度,则 p p p将会是负的。
内积的另一个计算公式是: u T v = u 1 × v 1 + u 2 × v 2 u^T v={
{u}_{1}}\times {
{v}_{1}}+{
{u}_{2}}\times {
{v}_{2}} uTv=u1×v1+u2×v2。
上面的公式是先前给出的支持向量机模型中的目标函数。为了讲解方便,做一点简化,仅仅是为了让目标函数更容易被分析。
首先,忽略掉截距,令 θ 0 = 0 {
{\theta }_{0}}=0 θ0=0,这样更容易画示意图。
然后,将特征数 n n n置为2,因此我们仅有两个特征 x 1 , x 2 {
{x}_{1}},{
{x}_{2}} x1,x2,目标函数可以写作: 1 2 ( θ 1 2 + θ 2 2 ) = 1 2 ( θ 1 2 + θ 2 2 ) 2 \frac{1}{2}\left({\theta_1^2+\theta_2^2}\right)=\frac{1}{2}\left(\sqrt{\theta_1^2+\theta_2^2}\right)^2 21(θ12+θ22)=21(θ12+θ22)2,只有两个参数 θ 1 , θ 2 {
{\theta }_{1}},{
{\theta }_{2}} θ1,θ2。因为忽略了 θ 0 {
{\theta }_{0}} θ0,注意到括号里面的这一项是向量 θ {
{\theta }} θ的范数,或者说是向量 θ {
{\theta }} θ的长度,得到我们的目标函数是等于 1 2 ∥ θ ∥ 2 \frac{1}{2}\left\| \theta \right\|^2 21∥θ∥2。因此支持向量机做的全部事情,就是极小化参数向量 θ {
{\theta }} θ范数的平方,或者说长度的平方。
我们考察一个单一的训练样本,在下图中用一个叉来表示这个样本 x ( i ) x^{(i)} x(i),意思是在水平轴上取值为 x 1 ( i ) x_1^{(i)} x1(i),在竖直轴上取值为 x 2 ( i ) x_2^{(i)} x2(i)。现在,把一个参数向量也画成向量,那么内积 θ T x ( i ) θ^T x^{(i)} θTx(i) 将会是什么呢?
使用我们之前的方法,我们计算的方式就是将训练样本投影到参数向量 θ {
{\theta }} θ,将它称为 p ( i ) p^{(i)} p(i)用来表示这是第 i i i个训练样本在参数向量 θ {
{\theta }} θ上的投影。根据之前的内容,我们知道的是 θ T x ( i ) θ^Tx^{(i)} θTx(i)将会等于 p p p 乘以向量 θ θ θ 的长度或范数,即 θ T x ( i ) = p ( i ) ⋅ ∥ θ ∥ θ^Tx^{(i)}=p^{(i)}\cdot{\left\| \theta \right\|} θTx(i)=p(i)⋅∥θ∥ 。这就等于 θ 1 ⋅ x 1 ( i ) + θ 2 ⋅ x 2 ( i ) \theta_1\cdot{x_1^{(i)}}+\theta_2\cdot{x_2^{(i)}} θ1⋅x1(i)+θ2⋅x2(i)。这两种方式是等价的,都可以用来计算 θ θ θ和 x ( i ) x^{(i)} x(i)之间的内积。
这里表达的意思是:这个 θ T x ( i ) > = 1 θ^Tx^{(i)}>=1 θTx(i)>=1 或者 θ T x ( i ) < − 1 θ^Tx^{(i)}<-1 θTx(i)<−1的约束,是可以被 p ( i ) ⋅ ∥ θ ∥ > = 1 p^{(i)}\cdot{\left\| \theta \right\|} >=1 p(i)⋅∥θ∥>=1这个约束所代替的。
现在让我们考虑下面这里的训练样本,我们使用上面得到的优化目标函数等于 1 2 ∥ θ ∥ 2 \frac{1}{2}\left\| \theta \right\|^2 21∥θ∥2。
现在,继续使用之前的简化,即 θ 0 = 0 {
{\theta }_{0}}=0 θ0=0,我们来看一下支持向量机会选择什么样的决策界。如左下图中的绿色边界是一种选择,这不是一个非常好的选择,因为它的间距很小。这个决策界离训练样本的距离很近。支持向量机不会选择它作为边界。
对于绿色边界这种选择,其对应的的参数 θ {
{\theta }} θ事实上是和决策界是90度正交的,因为作为边界,其分类的结果为正样本和负样本,所以就有边界上的 θ T x ( i ) = 0 θ^Tx^{(i)}=0 θTx(i)=0,因此两个向量是正交的。又因为 θ 0 = 0 {
{\theta }_{0}}=0 θ0=0的简化意味着决策界必须通过原点 ( 0 , 0 ) (0,0) (0,0)。现在让我们看一下这对于优化目标函数意味着什么。
如上右图蓝色标记的样本点,假设第一个样本是 x ( 1 ) x^{(1)} x(1),如果考察这个样本到参数 θ {
{\theta }} θ的投影,投影是短的红线段,等于 p ( 1 ) p^{(1)} p(1),它非常短。类似地,第二个样本点是 x ( 2 ) x^{(2)} x(2),把它到 θ {
{\theta }} θ的投影画成粉色,等于 p ( 2 ) p^{(2)} p(2)这个投影也非常短。 p ( 2 ) p^{(2)} p(2)事实上是一个负值,因为这个向量和参数向量 θ {
{\theta }} θ的夹角大于90度。
我们会发现这些 p ( i ) p^{(i)} p(i)将会是非常小的数,因此当我们考察优化目标函数的时候,对于正样本而言,我们需要 p ( i ) ⋅ ∥ θ ∥ > = 1 p^{(i)}\cdot{\left\| \theta \right\|}>=1 p(i)⋅∥θ∥>=1,但是如果 p ( i ) p^{(i)} p(i)在这里非常小,那就意味着我们需要 θ {
{\theta }} θ的范数非常大。类似地,对于负样本而言我们需要 p ( 2 ) ⋅ ∥ θ ∥ < = − 1 p^{(2)}\cdot{\left\|\theta \right\|}<=-1 p(2)⋅∥θ∥<=−1,我们已经在上面的样本中得到 p ( 2 ) p^{(2)} p(2)会是一个非常小的数,因此唯一的办法就是 θ {
{\theta }} θ的范数变大。但是我们的目标函数是希望找到一个参数 θ {
{\theta }} θ,它的范数是小的。因此,这看起来不像是一个好的参数向量 θ {
{\theta }} θ的选择。
相反的,来看一个不同的决策边界。如上图所示的绿色边界,这个绿色的决策界有一个垂直于它的向量 θ {
{\theta }} θ。现在如果考察样本 x ( 1 ) x^{(1)} x(1),将它投影到 θ {
{\theta }} θ上,就会得到这样 p ( 1 ) p^{(1)} p(1)。另一个样本 x ( 2 ) x^{(2)} x(2)做同样的投影。注意到现在 p ( 1 ) p^{(1)} p(1) 和 p ( 2 ) p^{(2)} p(2)这些投影长度是长多了。这时,当我们满足约束 P ( i ) ⋅ ∥ θ ∥ > 1 P^{(i)}\cdot{\left\| \theta \right\|}>1 P(i)⋅∥θ∥>1时,则因为 p ( i ) p^{(i)} p(i)变大了, θ {
{\theta }} θ的范数就可以变小了。因此这意味着通过选择这种决策界,支持向量机可以使参数 θ {
{\theta }} θ的范数变小很多。因此,如果我们想令 θ {
{\theta }} θ的范数变小,从而令 θ {
{\theta }} θ范数的平方变小,就能让支持向量机选择上面这种决策界。这就是支持向量机如何能有效地产生大间距分类的原因。
通过让间距变大,即通过增大这些 p ( 1 ) , p ( 2 ) , p ( 3 ) p^{(1)},p^{(2)},p^{(3)} p(1),p(2),p(3)等等的值,支持向量机最终可以找到一个较小的 θ { {\theta }} θ范数。这正是支持向量机中最小化目标函数的目的。
最后一点,我们的推导自始至终使用了这个简化假设,就是参数 θ 0 = 0 θ_0=0 θ0=0,作用是让决策界通过原点。但是可以说明的是,即便 θ 0 θ_0 θ0不等于0,支持向量机仍然会找到正样本和负样本之间的大间距分隔,在这里就不再做解释了。
以上就解释了为什么支持向量机是一个大间距分类器。
转载:https://blog.csdn.net/Luo_LA/article/details/128208272