python学智能算法(二十二)|SVM-点与超平面的距离

引言

前序学习进程中,了解了向量向量点积运算超平面感知机等知识点。

SVM算法最核心的目标是通过规划租号的分割超平面,来使得超平面附近的点到超平面的距离和达到最大值。

那点和超平面的距离如何计算,就是今天学习的重点。

点与超平面的距离

前述学习进程中,已知超平面的常规表达为: w ⋅ x + b = 0 w\cdot x+b=0 w⋅x+b=0

对于任何一个点(x,y),实际上可以直接带入上式,定义: β = w ⋅ x + b \beta=w\cdot x+b β=w⋅x+b

当点(x,y)位于平面上时,显然会有β=0,其余情况β≠0。

当超平面确定,对于数据集中的每个点,都要计算β,并且取最小的β为点到超平面的距离,也就是取最近的点

对于多个超平面,会获得多个β,取最大β对应的超平面为最佳分割超平面。

**但当β<0时,绝对值越大的β实际上距离越远,但在数学的对比中反而越小,这就导致最近的点实际上取成了最远的点,也就是取到错误的点。

为此,一个新的最近点判断依据出现,函数间隔F: F = min ⁡ i = 1... m y i ( w ⋅ x i + b ) F=\min_{i=1...m}y_{i}(w\cdot x_{i}+b) F=i=1...mminyi(w⋅xi+b)

当F>0,表明点的位置分类正确;

当F<0,表明点的位置分类错误。

这里可以对上述判别进行说明:

当超平面是一条线的时候,对于一个在超平面上的点(x0,y0),一定满足超平面的常规表达式: β = w ⋅ x = w 1 x 0 + w 2 y 0 + b = 0 = w 1 x 0 − y 0 + b = 0 \beta=w\cdot x=w_{1}x_{0}+w_{2}y_{0}+b=0=w_{1}x_{0}-y_{0}+b=0 β=w⋅x=w1x0+w2y0+b=0=w1x0−y0+b=0

当一个点不在超平面上,取d>0:

有点(x0,y1),且满足y1=y0+d,点在分割线的上方,此时代入超平面的常规表达式会有:
β = w ⋅ x = w 1 x 0 + w 2 y 1 + b = 0 = w 1 x 0 − y 1 + b = − d < 0 \beta=w\cdot x=w_{1}x_{0}+w_{2}y_{1}+b=0=w_{1}x_{0}-y_{1}+b=-d<0 β=w⋅x=w1x0+w2y1+b=0=w1x0−y1+b=−d<0

如果y0>0,则F<0,与β<0一致,容易把最近的点取成最远的点,出现分类错误;

如果y0<0,且y1>0,则F<0,与β<0一致,容易把最近的点取成最远的点,出现分类错误;

如果y0<0,且y1<0,则F>0,与β<0相反,且F=-d(y0+d),F越大,偏离超平面的距离也就越远,所以此时不会犯分类错误;

当一个点不在超平面上,取d>0:

有点(x0,y1),且满足y1=y0-d,点在分割线的下方,此时代入超平面的常规表达式会有:
β = w ⋅ x = w 1 x 0 + w 2 y 1 + b = 0 = w 1 x 0 − y 1 + b = d > 0 \beta=w\cdot x=w_{1}x_{0}+w_{2}y_{1}+b=0=w_{1}x_{0}-y_{1}+b=d>0 β=w⋅x=w1x0+w2y1+b=0=w1x0−y1+b=d>0

如果y0>0,且y1>0,则F>0,与β>0一致,且F=d(y0-d),F越大,偏离超平面的距离也就越远,所以此时不会犯分类错误;

如果y0>0,且y1<0,则F<0,与β>0相反,容易把最近的点取成最远的点,出现分类错误;

如果y0<0,则F<0,与β>0相反,容易把最近的点取成最远的点,出现分类错误。

总结

学习了点与超平面的距离的计算。