今天给大家带来的主要内容包括:硬间隔支持向量机算法,软间隔支持向量机算法,非线性支持向量机算法。废话不多说,下面就是本文的全部内容了!
如果现在有一些数据分布在一条数轴上,我们可以尝试找到一个点来把两类样本分开:
如果这些数据分布在一个平面上,我们可以尝试找到一条直线来把两类样本分开:
如果这些数据分布在三维空间中,我们也可以找到一个平面来把两类样本分开:
根据以上的分析,我们可以得到结论:当待分类样本所处的维度等于 n n n的时候,我们可以找到一个 n − 1 n-1 n−1维的超平面对待分类样本进行分类。
现在我们只考虑二维的情况,如果我们想把两类样本分开,可以画出两条直线(超平面),都可以对样本进行有效的分类:
既然两条直线都可以对样本进行分类,那么究竟哪条直线是最好的呢?
今天我们聊的支持向量机,就可以解决以上问题,帮助我们找到最好的分类超平面。更具体地说,对于以上例子,支持向量机就是要找到这样一条直线,让直线两边的点与此条直线的距离是最大的:
对于以上示例,我们假设平面上任意一点 x x x的横坐标是 x 1 x^{1} x1,纵坐标是 x 2 x^{2} x2,此点 x x x的类别为1或者-1:
x = ( x 1 , x 2 ) y = 1 y = − 1 x=(x^{1},x^{2}) \quad\quad y = 1 \quad\quad y = -1 x=(x1,x2)y=1y=−1
此时,超平面的方程为:
w 1 x 1 + w 2 x 2 + b = 0 w = ( w 1 , w 2 ) w^{1}x^{1}+w^{2}x^{2}+b=0 \quad w=(w^{1},w^{2}) w1x1+w2x2+b=0w=(w1,w2)
因为之前我们分析过,需要保证直线两边的点到此超平面的距离最大,所以我们需要计算点 x x x到超平面的距离 d d d:
d = ∣ w 1 x 1 + w 2 x 2 + b ∣ ( w 1 ) 2 + ( w 2 ) 2 d=\frac{|w^{1}x^{1}+w^{2}x^{2}+b|}{\sqrt{(w^{1})^{2} + (w^{2})^{2}}} d=(w1)2+(w2)2∣w1x1+w2x2+b∣
我们来观察上式中的分子,如果分子的绝对值里面是正数,说明类别为1;如果分子的绝对值里面是负数,说明类别为-1。所以我们可以把绝对值拿开,用 y y y来代替:
d = y ( w 1 x 1 + w 2 x 2 + b ) ( w 1 ) 2 + ( w 2 ) 2 d=\frac{y(w^{1}x^{1}+w^{2}x^{2}+b)}{\sqrt{(w^{1})^{2} + (w^{2})^{2}}} d=(w1)2+(w2)2y(w1x1+w2x2+b)
上式中的分子 y ( w 1 x 1 + w 2 x 2 + b ) y(w^{1}x^{1}+w^{2}x^{2}+b) y(w1x1+w2x2+b)被称为函数间隔;而上式中的分母 ( w 1 ) 2 + ( w 2 ) 2 \sqrt{(w^{1})^{2} + (w^{2})^{2}} (w1)2+(w2)2,是参数 w i ( 1 ≤ i ≤ 2 ) w^{i}(1≤i≤2) wi(1≤i≤2)的范数 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣。我们可以使用$\gamma 来代表函数间隔,使用参数 来代表函数间隔,使用参数 来代表函数间隔,使用参数w^{i}(1≤i≤2) 的范数 的范数 的范数||w|| 来表示上式中的分母,所以点到直线的距离 来表示上式中的分母,所以点到直线的距离 来表示上式中的分母,所以点到直线的距离d$就可以更新为:
d = γ ∣ ∣ w ∣ ∣ d=\frac{\gamma}{||w||} d=∣∣w∣∣γ
还记得我们一开始的目的么?我们想要找到距离所有点间隔都是最大的直线,为了达成目的,首先我们要找到距离直线间隔最小的那些点:
可以使用 d ^ \widehat{d} d 来表示距离直线间隔最小的那些点:
d ^ = m i n ( γ 1 , γ 2 , … , γ N ) ∣ ∣ w ∣ ∣ \widehat{d}=\frac{min( \gamma_{1},\gamma_{2},\dots,\gamma_{N} )}{||w||} d =∣∣w∣∣min(γ1,γ2,…,γN)
当我们找到与直线距离最小的那些点之后,让最终的直线距离它们最大就可以了。还需要注意,因为函数间隔是最小的,所以对于任何一个样本,函数间隔都要大于等于这个最小的函数间隔,所以可以得到:
m a x γ ^ ∣ ∣ w ∣ ∣ γ ^ = m i n ( γ 1 , γ 2 , … , γ N ) s . t . y i ( w 1 x i 1 + w 2 x i 2 + b ) − γ ^ ≥ 0 max\frac{\widehat{\gamma}}{||w||} \quad \widehat{\gamma}=min( \gamma_{1},\gamma_{2},\dots,\gamma_{N} ) \\s.t. \quad y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) - \widehat{\gamma} \ge 0 max∣∣w∣∣γ γ =min(γ1,γ2,…,γN)s.t.yi(w1xi1+w2xi2+b)−γ ≥0
另外,我们需要注意到函数间隔的性质。如果我们把 w 1 x 1 + w 2 x 2 + b = 0 w^{1}x^{1}+w^{2}x^{2}+b=0 w1x1+w2x2+b=0中的 w 1 , w 2 , b w^{1},w^{2},b w1,w2,b同时乘以2:
2 w 1 x 1 + 2 w 2 x 2 + 2 b = 0 2w^{1}x^{1}+2w^{2}x^{2}+2b=0 2w1x1+2w2x2+2b=0
那么这两个函数仍然代表的是同一个超平面,但是函数间隔却变成了2倍:
y ( 2 w 1 x 1 + 2 w 2 x 2 + 2 b ) = 2 γ y(2w^{1}x^{1}+2w^{2}x^{2}+2b)=2\gamma y(2w1x1+2w2x2+2b)=2γ
所以函数间隔的性质就是:函数间隔是可以任意缩放的。我们在计算的时候一般取1这个值。这样将函数间隔 γ ^ \widehat{\gamma} γ 的值取1后代入原式中就可以得到:
m a x 1 ∣ ∣ w ∣ ∣ s . t . y i ( w 1 x i 1 + w 2 x i 2 + b ) − 1 ≥ 0 max\frac{1}{||w||} \quad s.t. \quad y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) - 1 \ge 0 max∣∣w∣∣1s.t.yi(w1xi1+w2xi2+b)−1≥0
此外,我们还需要注意两点:
下面我们的目标就很明确了,我们需要计算下面的优化问题:
m a x w , b 1 ∣ ∣ w ∣ ∣ s . t . y i ( w 1 x i 1 + w 2 x i 2 + b ) − 1 ≥ 0 max_{w,b}\frac{1}{||w||} \quad s.t. \quad y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) - 1 \ge 0 maxw,b∣∣w∣∣1s.t.yi(w1xi1+w2xi2+b)−1≥0
有一个细节我们需要注意,就是 m a x w , b 1 ∣ ∣ w ∣ ∣ max_{w,b}\frac{1}{||w||} maxw,b∣∣w∣∣1等价于 m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 min_{w,b}\frac{1}{2}||w||^{2} minw,b21∣∣w∣∣2,所以原始的优化问题就可以更新为:
m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w 1 x i 1 + w 2 x i 2 + b ) − 1 ≥ 0 min_{w,b}\frac{1}{2}||w||^{2} \quad s.t. \quad y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) - 1 \ge 0 minw,b21∣∣w∣∣2s.t.yi(w1xi1+w2xi2+b)−1≥0
根据拉格朗日乘子法,我们可以构建它的对偶问题:
min α 1 2 ∑ i N ∑ j N α i α j y i y j ( x i ⋅ x j ) − ∑ i N α i s.t. ∑ i N α i y i = 0 α i ≥ 0 \begin{aligned}\min_{\alpha} & \frac{1}{2} \sum_{i}^{N} \sum_{j}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(\boldsymbol{x}_{\boldsymbol{i}} \cdot \boldsymbol{x}_{\boldsymbol{j}}\right)-\sum_{i}^{N} \alpha_{i} \\\text { s.t. } & \sum_{i}^{N} \alpha_{i} y_{i}=0 \quad \alpha_{i} \geq 0\end{aligned} αmin s.t. 21i∑Nj∑Nαiαjyiyj(xi⋅xj)−i∑Nαii∑Nαiyi=0αi≥0
上式的计算过程不在此赘述,总之,可以通过对偶问题得到一系列的 α \alpha α值,而 w w w和 b b b的解析解可以使用这些 α \alpha α值计算出来:
w ∗ = ∑ i N α i ∗ y i x i b ∗ = y j − ∑ i N α i ∗ y i ( x i ⋅ x j ) \begin{array}{l} \boldsymbol{w}^{*}=\sum_{i}^{N} \alpha_{i}^{*} y_{i} \boldsymbol{x}_{i} \\b^{*}=y_{j}-\sum_{i}^{N} \alpha_{i}^{*} y_{i}\left(\boldsymbol{x}_{\boldsymbol{i}} \cdot \boldsymbol{x}_{\boldsymbol{j}}\right)\end{array} w∗=∑iNαi∗yixib∗=yj−∑iNαi∗yi(xi⋅xj)
通过上面的计算,我们就可以得到直线的表达形式了,另外需要注意的是,以上讨论的内容都是基于线性可分的数据,所以此方法也被称为硬间隔支持向量机算法。
刚才我们讨论的是可以被线性可分的例子,现在我们来看这样一个不能被线性可分的例子:
可以注意到,因为两个红框内的点的存在,我们不可能找到一条直线,把两类数据完全分开:
虽然由于红框内的两个点导致无法用一条直线正确的将所有点分开,但是大多数的点仍然可以,此时我们称这些样本是弱线性可分的,这个时候我们仍然可以通过支持向量机找到一个次优解,不过需要允许有错误的点处于这个间隔之内:
也就是说,对于任何一个样本,其函数间隔不再大于等于1,而是放宽了距离限制,下式中的 ξ \xi ξ就是一个松弛变量:
y i ( w 1 x i 1 + w 2 x i 2 + b ) ≥ 1 − ξ i y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) ≥ 1 - \xi_{i} yi(w1xi1+w2xi2+b)≥1−ξi
同样的,在优化过程中,我们也增加了一个惩罚项 C ∑ i N ξ i C\sum_{i}^{N} \xi_{i} C∑iNξi:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i N ξ i C ≥ 0 s.t. y i ( w 1 x i 1 + w 2 x i 2 + b ) ≥ 1 − ξ i ξ i ≥ 0 \begin{aligned}\min_{w,b} & \frac{1}{2}||w||^{2} + C\sum_{i}^{N} \xi_{i} \quad C \ge 0 \\\text { s.t. } & y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) ≥ 1 - \xi_{i} \quad \xi_{i} \ge 0\end{aligned} w,bmin s.t. 21∣∣w∣∣2+Ci∑NξiC≥0yi(w1xi1+w2xi2+b)≥1−ξiξi≥0
同样,为了得到满足要求的直线方程,我们仍可根据拉格朗日乘子法,构建它的对偶问题:
min α 1 2 ∑ i N ∑ j N α i α j y i y j ( x i ⋅ x j ) − ∑ i N α i s.t. ∑ i N α i y i = 0 C ≥ α i ≥ 0 \begin{aligned}\min_{\alpha} & \frac{1}{2} \sum_{i}^{N} \sum_{j}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(\boldsymbol{x}_{\boldsymbol{i}} \cdot \boldsymbol{x}_{\boldsymbol{j}}\right)-\sum_{i}^{N} \alpha_{i} \\\text { s.t. } & \sum_{i}^{N} \alpha_{i} y_{i}=0 \quad C \ge \alpha_{i} \geq 0\end{aligned} αmin s.t. 21i∑Nj∑Nαiαjyiyj(xi⋅xj)−i∑Nαii∑Nαiyi=0C≥αi≥0
经过计算,我们仍可以得到满足要求的 w w w和 b b b的解析解:
w ∗ = ∑ i N α i ∗ y i x i b ∗ = y j − ∑ i N α i ∗ y i ( x i ⋅ x j ) \begin{array}{l} \boldsymbol{w}^{*}=\sum_{i}^{N} \alpha_{i}^{*} y_{i} \boldsymbol{x}_{i} \\b^{*}=y_{j}-\sum_{i}^{N} \alpha_{i}^{*} y_{i}\left(\boldsymbol{x}_{\boldsymbol{i}} \cdot \boldsymbol{x}_{\boldsymbol{j}}\right)\end{array} w∗=∑iNαi∗yixib∗=yj−∑iNαi∗yi(xi⋅xj)
可以看到,此种方法与硬间隔支持向量机算法的结论基本一致,最终仍可以得到满足要求的直线方程,这种拓展方法也被称为软间隔支持向量机算法。
我们再来看一个例子,在下图的直线上,无论我们使用什么方法,都不可能将两类数据完全分开:
不过我们可以换一个思路,将数据增加一个维度,使用 ( x 1 ) 2 (x^{1})^{2} (x1)2来构建第二个维度,这样我们又可以只用一条直线就把它们分开了:
我们再来考虑另外一种情况,如果待分类的点是类似于椭圆的方式分布的:
基于上面讨论过的思路,我们可以使用 ( x 1 ) 2 (x^{1})^{2} (x1)2和 ( x 2 ) 2 (x^{2})^{2} (x2)2作为数轴,把所有的数据点重新映射到平面上,这样它们又转化为线性可分的问题了:
这种通过升维或者空间映射的方法,我们称为非线性支持向量机算法。我们继续探讨,让我们继续看刚才待分类的点是类似于椭圆形分布的情况:
其中任何一个样本点由 x 1 x^{1} x1和 x 2 x^{2} x2两个坐标构成:
x = ( x 1 , x 2 ) x=(x^{1},x^{2}) x=(x1,x2)
为了让它们变得线性可分,我们通过一个 ϕ \phi ϕ函数把 x 1 x^{1} x1映射为 ( x 1 ) 2 (x^{1})^2 (x1)2, x 2 x^{2} x2映射为 ( x 2 ) 2 (x^2)^{2} (x2)2:
x ∼ ϕ ( x ) = ( ( x 1 ) 2 , ( x 2 ) 2 ) x \sim \phi(x) = ((x^1)^{2},(x^2)^2) x∼ϕ(x)=((x1)2,(x2)2)
这样我们可以定义另一个函数 K \boldsymbol{K} K,这个函数 K \boldsymbol{K} K代表着变换之后两个样本点积的结果:
K ( x 1 , x 2 ) = ϕ ( x 1 ) ϕ ( x 2 ) \boldsymbol{K}(\boldsymbol{x}_{\boldsymbol{1}} , \boldsymbol{x}_{\boldsymbol{2}})=\phi(x_{1})\phi(x_{2}) K(x1,x2)=ϕ(x1)ϕ(x2)
这个定义两个样本点积过程的函数 K \boldsymbol{K} K,又被称为核函数。我们仍可以根据拉格朗日乘子法构建其对偶问题:
min α 1 2 ∑ i N ∑ j N α i α j y i y j K ( x i ⋅ x j ) − ∑ i N α i s.t. ∑ i N α i y i = 0 C ≥ α i ≥ 0 \begin{aligned}\min_{\alpha} & \frac{1}{2} \sum_{i}^{N} \sum_{j}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j} \boldsymbol{K} \left(\boldsymbol{x}_{\boldsymbol{i}} \cdot \boldsymbol{x}_{\boldsymbol{j}}\right)-\sum_{i}^{N} \alpha_{i} \\\text { s.t. } & \sum_{i}^{N} \alpha_{i} y_{i}=0 \quad C \ge \alpha_{i} \geq 0\end{aligned} αmin s.t. 21i∑Nj∑NαiαjyiyjK(xi⋅xj)−i∑Nαii∑Nαiyi=0C≥αi≥0
最后,仍可计算出满足要求的 w w w和 b b b的解析解:
w ∗ x = ∑ i N α i ∗ y i K ( x , x i ) b ∗ = y j − ∑ i N α i ∗ y i K ( x i ⋅ x j ) \begin{array}{l} \boldsymbol{w}^{*}x=\sum_{i}^{N} \alpha_{i}^{*} y_{i} \boldsymbol{K} (\boldsymbol{x},\boldsymbol{x}_{\boldsymbol{i}}) \\b^{*}=y_{j}-\sum_{i}^{N} \alpha_{i}^{*} y_{i}\boldsymbol{K} (\boldsymbol{x}_{\boldsymbol{i}} \cdot \boldsymbol{x}_{\boldsymbol{j}})\end{array} w∗x=∑iNαi∗yiK(x,xi)b∗=yj−∑iNαi∗yiK(xi⋅xj)
通过上面的计算我们可以看到,非线性支持向量机算法与软间隔支持向量机算法的计算过程非常相似,只是使用了核函数 K \boldsymbol{K} K来代替原本样本的点积操作而已。
以上就是本文的全部内容了,这个系列还会继续更新,给大家带来更多的关于机器学习方面的算法和知识,下篇博客见!