提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
支持向量机 (suppot vector machine , SVM) 算法是常用的经典的分类机器学习算法。本文将详细地,由浅入深地介绍一下支持向量机的原理和推导,以及SVM 核函数解决问题的思想,以及 SMO 算法的python实现。 本文先简单介绍下入门的超平面和点到超平面距离的”向量投影”理解,图形理解等,作为SVM的入门知识。
一、点到直线与超平面
- 点 ( x 0 , y 0 ) 到 直 线 A x + B y + C = 0 距 离 : d = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 点\begin{array}{c} (x_0,y_0)到直线Ax+By+C = 0距离: \end{array}\begin{array}{c} d = {\color{Blue} } \frac{\left|A x_{0}+B y_{0}+C\right|}{\sqrt{A^{2}+B^{2}}} \end{array} 点(x0,y0)到直线Ax+By+C=0距离:d=A2+B2∣Ax0+By0+C∣
- 点 ( x 1 , y 1 , z 1 ) 到 平 面 A x + B y + C z + D = 0 的 距 离 : d = ∣ A x 1 + B y 1 + C z 1 + D ∣ A 2 + B 2 + C 2 \begin{array}{c} 点 (x_1,y_1,z_1)到平面Ax+By+Cz+D = 0的距离: d=\frac{\left|A x_{1}+B y_{1}+C z_{1}+D\right|}{\sqrt{A^{2}+B^{2}+C^{2}}} \end{array} 点(x1,y1,z1)到平面Ax+By+Cz+D=0的距离:d=A2+B2+C2∣Ax1+By1+Cz1+D∣
有没有想过这个推导过程?我们看这个距离公式可以简单地理解为,将这个点代入到距离的方程中,然后取绝对值,再除以一个方程参数的 根号系数平方和。如果这样理解的话,那是背公式。在过去的考试里面背熟会考试就行,但如果继续往下做有关AI 的东西,那么数学是必须多点理解的。
我们仔细看以上这个两个公式:
d = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 d = ∣ A x 1 + B y 1 + C z 1 + D ∣ A 2 + B 2 + C 2 \begin{array}{c} \begin{array}{c} d=\frac{\left|A x_{0}+B y_{0}+C\right|}{\sqrt{A^{2}+B^{2}}} & &d=\frac{\left|A x_{1}+B y_{1}+C z_{1}+D\right|}{\sqrt{A^{2}+B^{2}+C^{2}}} \end{array}{\normalsize } {\LARGE } \end{array} d=A2+B2∣Ax0+By0+C∣d=A2+B2+C2∣Ax1+By1+Cz1+D∣
分子是一个点和一个直线相乘,分母则好像是在除以一个向量的模。
这不难想到一个投影公式:
- 以上可以说是高中学的知识。学过矩阵论我们知道这个向量的模可以用二范数表示 也就是 ||a||。以上的线,面只是一个二维,三维的方程。如果是一个多维的呢?那么我就将它描述为超平面。
- 很简单,就是数据的维度增大了,我们发现平面坐标系喜欢用字母,x,y,表示2维,三维的时候喜欢用下,xyz,如果按照这个多维的概念就用一个字母表示的话那,肯定是不够用的。所以,现在都用向量的形式表示超平面。注意这里的单个向量都是表示列向量。x 用 ( x 1 , x 2 , . . . , x m ) T \begin{array}{c} (x_1,x_2,...,x_m)^T \end{array} (x1,x2,...,xm)T表示,那么权重系数,如二维的直线 A,B,三维的A B C,现在用 w = ( w 1 , w 2 , . . . , w k ) T \begin{array}{c} w = (w_1,w_2,...,w_k)^T \end{array} w=(w1,w2,...,wk)T表示,注意到还有一个偏差bias ,b ,因此超平面公式为:
w T x + b = 0 \begin{array}{c} w^Tx+b = 0 \end{array} wTx+b=0
例子 原来的直线 2x+y-3=0,
w = ( 2 , 1 ) T , w T = [ 2 1 ] , x = ( x , y ) T = ( x 1 , x 2 ) T = [ x y ] \begin{array}{c} w = (2,1)^T,w^T = \begin{bmatrix} 2 &1 \end{bmatrix},x = (x,y)^T=(x_1,x_2)^T \end{array} = \begin{bmatrix} x\\y \end{bmatrix} w=(2,1)T,wT=[21],x=(x,y)T=(x1,x2)T=[xy]
因此直线表示为:
[ 2 1 ] ⋅ [ x y ] + b = 2 x + y + b = 0 \begin{array}{c} \begin{bmatrix} 2 &1 \end{bmatrix}\cdot \begin{bmatrix} x\\y \end{bmatrix} + b = 2x+y+b = 0 \end{array} [21]⋅[xy]+b=2x+y+b=0
或更严格地:
[ 2 1 ] ⋅ [ x 1 x 2 ] + b = 2 x 1 + x 2 + b = 0 \begin{array}{c} \begin{bmatrix} 2 &1 \end{bmatrix}\cdot \begin{bmatrix} x_1\\x_2 \end{bmatrix} + b = 2x_1+x_2+b = 0 \end{array} [21]⋅[x1x2]+b=2x1+x2+b=0
二、用图形理解距离是向量到法向量的投影
如下图所示:途中的红色直线是目标直线,P点为R2中任意一点,要求求出该点到直线(超平面的)L距离d, ,在图中知道有坐标点(2,1),连接坐标原点(0,0)得到法向量 w T \begin{array}{c} w^T \end{array} wT与直线的 斜率向量 w \begin{array}{c} w \end{array} w垂直。如图所示,依据几何关系可以证明出点P 到直线L的距离可以分为两部分,一部分是向量OP到向量 w T \begin{array}{c} w^T \end{array} wT的投影,称为 d 1 \begin{array}{c} d_1 \end{array} d1; 另一部分则是直线 L : 2 x + y + 3 = 0 \begin{array}{c} L:2x+y+3 = 0 \end{array} L:2x+y+3=0,到直线,(图中紫色线): L 0 : 2 x + y = 0 \begin{array}{c} L_0:2x+y = 0 \end{array} L0:2x+y=0的距离 d 2 \begin{array}{c} d_2 \end{array} d2,显然 d = d 1 + d 2 \begin{array}{c} d = d_1+d_2 \end{array} d=d1+d2.
由上述的公式得到:
- d1可以直接向量乘法得到,但是这里注意是距离因此分子要加个绝对值符号,分母为二范数必然大于0。
d 1 = w T x ∥ w ∥ \begin{array}{c} d_1 = \frac{w^Tx }{\left \| w\right \| } \end{array} d1=∥w∥wTx - 由两个平行直线的距离公式: d 2 = C 1 − C 2 A 2 + B 2 = b ∥ w ∥ \begin{array}{c} d_2 = \frac{ C1-C2 }{\sqrt{A^2+B^2} } = \frac{ b }{ \left \| w \right \| } \end{array} d2=A2+B2C1−C2=∥w∥b
注意以上的距离d1,d2 是一个可正可负的数值.
如图当不同的情况d = d1+ d2 仍成立但是d1,d2 是正负不一定。
d = d 1 + d 2 = w T x ∥ w ∥ + b ∥ w ∥ = w T x + b ∥ w ∥ \begin{array}{c} d = d_1+d_2 = \frac{w^Tx }{\left \| w\right \| } +\frac{ b }{ \left \| w \right \| }= \frac{w^Tx+b}{\left \| w \right \| } \end{array} d=d1+d2=∥w∥wTx+∥w∥b=∥w∥wTx+b.
由于d 实际中需要计算的是距离,因此取绝对值,
得到任一点到超平面的距离
d i s t a n c e = ∣ d ∣ = ∣ w T x + b ∣ ∥ w ∥ \begin{array}{c} distance = \left |d \right | = \frac{\left |w^Tx+b\right | }{\left \| w \right \| } \end{array} distance=∣d∣=∥w∥∣wTx+b∣
- d1 描述的是一个向量到超平面过原点时的平行超平面距离,这里说的平行即有相同的 w \begin{array}{c} w \end{array} w。
- d2 表示的是超平面到其过原点的平行超平面距离。
再看看之前的二维、三维情况,只是w的维度不一样: - 点 ( x 0 , y 0 ) 到 直 线 A x + B y + C = 0 距 离 : d = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 点\begin{array}{c} (x_0,y_0)到直线Ax+By+C = 0距离: \end{array}\begin{array}{c} d = {\color{Blue} } \frac{\left|A x_{0}+B y_{0}+C\right|}{\sqrt{A^{2}+B^{2}}} \end{array} 点(x0,y0)到直线Ax+By+C=0距离:d=A2+B2∣Ax0+By0+C∣
- 点 ( x 1 , y 1 , z 1 ) 到 平 面 A x + B y + C z + D = 0 的 距 离 : d = ∣ A x 1 + B y 1 + C z 1 + D ∣ A 2 + B 2 + C 2 \begin{array}{c} 点 (x_1,y_1,z_1)到平面Ax+By+Cz+D = 0的距离: d=\frac{\left|A x_{1}+B y_{1}+C z_{1}+D\right|}{\sqrt{A^{2}+B^{2}+C^{2}}} \end{array} 点(x1,y1,z1)到平面Ax+By+Cz+D=0的距离:d=A2+B2+C2∣Ax1+By1+Cz1+D∣
以上就是用向量的相乘–投影来表示向量到超平面的欧式距离计算公式推导。