序
因为时间上的限制,本周必须要把Course的课程看完,之后开始步入实战,所以周二就搞定了第七周的内容。支持向量机(Support Vector Machines)这个词很早就听过,今天总算是学到了这个知识点。
线性可分和非线性可分
什么是线性可分?例如对于下图所表示的数据集,我们可以用一条直线将红蓝圆点分开,就叫做这个问题是线性可分问题。(下图均出自知乎,作者简之)
但是当数据变多的时候,也许会出现一些错误分类,例如下图:
线性不可分就是说,对于下面这张二维
数据,你无法用一条直线将其分开:
最大间距和升维
SVM可用于线性可分,也可以用于线性不可分问题。
对于线性可分问题,SVM的策略是选取一个“间距”最大的划分直线,也就是下图的黄色区域越大越好。
因为这样的话,在数据增多的情况下,仍有比较好的分类效果。
而对于线性不可分问题,SVM的策略是将数据升维,在二维上看起来无法用直线划分解决问题,将其提升到三维用一个平面进行划分。
核函数
首先,线性模型的预测函数为:
$x_1 … x_n$ 是特征值,将其替换为 $ f_1 … f_n$ 就得到了SVM模型的预测函数:
$f_i$ 就是 $x_i$ 的核函数
,它通常是非线性的,例如 $f_i = x_i x_{i+1} (i < n)$ ,可以知道,$f_i$ 其实是一个映射函数。
通过$f_i$ 的映射,可以将低维特征转化为高维特征,所以SVM对非线性也有很好拟合能力。
常用的核函数有:
- 线性核:$κ(x, x_i) = x·x_i$
- 多项式核:$κ(x, x_i) = ((x · x_i) + 1)^d$
- 高斯核(RBF):$κ(x, x_i) = exp(- \frac {||x - x_i||^2} {δ^2}) $
高斯核
假设SVM模型为:
值得注意的是,$f$ 的数量不一定和特征 $x$ 数量一样,例如模型中 $f$ 有3个,而特征 $x$ 只有2个。
我们可以在数据集中取三个点 $l^{(1)}, l^{(2)}, l^{(3)}$,函数 $f_i$ 就是点 $x$ 到点 $l^{(i)}$ 的相似度(similarity),它的计算公式为:
$f_i =similarity(x, l^{(i)}) = exp(- \frac {||x - l^{(i)}||^2} {2δ^2}) $
假设 $l^{(1)} = [1,3], δ = 1$ 那么$f_1 = exp(-(x1- 1)^2 - (x2 - 3)^2)$,它表示的是一个三维曲面。
Cost Function
逻辑回归的代价函数为:
SVM对 $y = 0$ 和 $y = 1$ 两种情况所对应的曲线用直线代替了,如下图:
这样一来,我们得到了 $cost_1$ 和 $cost_2$ 函数,所以SVM的代价函数变成了:
Cost Function 正规化
逻辑回归中的 $\lambda$ 是正规化参数,SVM中C参数有着相似的作用,先看逻辑回归的代价函数:
常数项只影响最优值大小,而不会影响取得最优值时的参数,所以可以去掉上图的 $m$。
并且 $\lambda $ 作用于左边的误差上,而不是右边的 $\theta$ 上就得到了:
其中 $C$ 的作用类似于$\frac {1} {\lambda}$ 。
C和δ参数
C参数作用于代价函数,它的作用类似于$\frac {1} {\lambda}$ ,所以
- C大 → 方差大,偏差小
- C小 → 方差小,偏差大
δ参数作用于高斯核函数,可以发现δ越大,函数值的的变化率其实越小,所以随着x远离 $l^{(i)}$ ,函数值降低的比较慢,那么方差就越小,偏差就越大,所以
- δ大 → 方差小,偏差大
- δ小 → 方差大,偏差小
总结
我觉得SVM的核心就在于$f$ 核函数,通过升维来解决低维问题着实厉害。