SVM
支持向量机(Support Vector Machine),是另一个种监督学习算法,有时他更高效和强大。
回顾在逻辑回归中,我们使用如下规则:
如果y=1
,那么$ h_\theta(x) \approx 1 $,进而$ Θ^Tx \gg 0 $
如果y=0
,那么$ h_\theta(x) \approx 0 $,进而$ Θ^Tx \ll 0 $
逻辑回归的代价函数如下:
$$ \begin{align*}J(\theta) & = \frac{1}{m}\sum_{i=1}^m -y^{(i)} \log(h_\theta(x^{(i)})) - (1 - y^{(i)})\log(1 - h_\theta(x^{(i)}))\\ & = \frac{1}{m}\sum_{i=1}^m -y^{(i)} \log\Big(\dfrac{1}{1 + e^{-\theta^Tx^{(i)}}}\Big) - (1 - y^{(i)})\log\Big(1 - \dfrac{1}{1 + e^{-\theta^Tx^{(i)}}}\Big)\end{align*} $$
在SVM中,我么试图简化log
函数,成为如下紫红色的函数线,而这个函数的结果接近log
函数:
记$ cost_1(z) $是y=1时的代价函数,$ cost_0(z) $是y=0时的代价函数。注意到在$ cost_1(z) $中当z > 1
时,$ cost_1(z) = 0 $;在$ cost_0(z) $中当z < -1
时,$ cost_0(z) = 0 $。于是SVM的代价函数表示如下:
$$ J(\theta) = \frac{1}{m} \sum_{i=1}^m y^{(i)} \ \text{cost}_1(\theta^Tx^{(i)}) + (1 - y^{(i)}) \ \text{cost}_0(\theta^Tx^{(i)}) $$
加入正则项后:
$$ J(\theta) = \frac{1}{m} \sum_{i=1}^m y^{(i)} \ \text{cost}_1(\theta^Tx^{(i)}) + (1 - y^{(i)}) \ \text{cost}_0(\theta^Tx^{(i)}) + \dfrac{\lambda}{2m}\sum_{j=1}^n \Theta^2_j $$
由于常数系数m
,并不会影响最小化代价函数,可以去掉;再记$ C = \frac{1}{λ} $,于是简化如下:
$$ J(\theta) = C\sum_{i=1}^m y^{(i)} \ \text{cost}_1(\theta^Tx^{(i)}) + (1 - y^{(i)}) \ \text{cost}_0(\theta^Tx^{(i)}) + \dfrac{1}{2}\sum_{j=1}^n \Theta^2_j $$
如果想要增大正则项的比重(即降低拟合),我们可以减小C
;反之,通过增大C
可以防止欠拟合。
大间距分类器
注意到,在SVM中:
如果y=1
,那么$ Θ^Tx \ge 1 $,而不是$ \ge 0 $
如果y=0
,那么$ Θ^Tx \le -1 $,而不是$ \le 0 $
现在如果我们设置C为非常大的一个数,那么在最小化代价函数的过程中,$ \Theta $会趋向于满足如下条件:
$$ \sum_{i=1}^m y^{(i)}\text{cost}_1(\Theta^Tx) + (1 - y^{(i)})\text{cost}_0(\Theta^Tx) = 0 $$
于是代价函数简化为:
$$ \begin{align*} J(\theta) = \frac{1}{2}\sum_{j=1}^n \Theta^2_j \end{align*} $$
同时受限于条件$ Θ^Tx \ge 1 $和$ Θ^Tx \le -1 $,将使得我们的决策边界呈现出如下黑色实线:
上图的绿色实线看起来也是可以分割样本的,但是明显不如黑色实线好,那是因为,黑色实线距离样本的间距(margin)更大。因此,直观的看SVM是倾向于大间隔的分类器。
至于为什么SVM会倾向于选择更大间距的决策边界,这跟向量投影理论有关,这里略过。
核函数
核函数帮助我们基于SVM创建更复杂的非线性的分类器。
给定一个样本x
,把该样本跟几个参考点$ l^{(1)} $ $ l^{(2)} $ $ l^{(3)} $的相似度
作为新的特征使用。这里的相似度使用如下函数:
$$ f_i = similarity(x, l^{(i)}) = \exp(-\dfrac{||x - l^{(i)}||^2}{2\sigma^2}) $$
这个函数称为高斯核函数(Gaussian Kernal),这是核函数的一种。当x和某个l的距离很近的时候,函数结果趋向于1;反之,当x和某个l的距离很大时,趋近于0。
假设原始的x具有两个特征$ (x_1, x_2) $二维平面的点,这个点距离某个参考点的高斯核函数具有如下类似图像:
这个凸面上的点的高度就是函数的值,当$ (x_1, x_2) $接近参考点时,函数值越接近1,反正越趋向于0。
高斯核函数有个参数σ
,当σ
越大,凸面更平缓,意味着我们对两个点距离的相近度越宽容
;当σ
越小,凸面更尖锐,意味着我们对两个点距离的相近度越严苛
。
一种选取参考点的方法是,将每一个样本都作为参考点。当样本数为m
时,参考点的数量也是m。于是对于参考点$ l^{(1)} $,需计算样本中的每一个点与其相似度:
$$ f_1 = similarity(x,l^{(1)}) = \exp(-\dfrac{\sum^n_{j=1}(x_j-l^{(1)})^2}{2\sigma^2}) $$
这样我们可以计算出一组新的样本$ f $,样本数量为m
,然后使用$ f $代替$ x $使用SVM,最小化如下代价函数:
$$ \min_{\Theta} C \sum_{i=1}^m y^{(i)}\text{cost}_1(\Theta^Tf^{(i)}) + (1 - y^{(i)})\text{cost}_0(\theta^Tf^{(i)}) + \dfrac{1}{2}\sum_{j=1}^n \Theta^2_j $$
这种通过核函数来转变样本并作用在SVM算法中的方法,也可以用于逻辑回归。不过SVM与核函数组合使用是经过优化的,因此,计算效率比其他算法要高。
应用SVM
如果使用高斯核函数,那么在SVM中,我们需要调整的参数有两个:
- C: 相当于$ \dfrac{1}{\lambda} $,C越大越趋向于过拟合;C越小越趋向于欠拟合。
- $ σ^2 $: 通过上面高斯核函数的图,$ σ^2 $越大,距离敏感度越低,越容易产生误判,于是越容易欠拟合;$ σ^2 $越小,距离敏感度越高,越不容易产生误判,但越容易过拟合。
在设计SVM的模型时,不建议自己编写SVM的实现,因为成熟的库通常效率更好。在应用SVM时,你需要作如下决策:
- 参数C
- 使用何种核函数,或者不使用核函数
- 对于高斯核函数,需要调整参数$ σ^2 $
- 在使用高斯核函数前,需进行参数缩放,即归一化
- 如果样本的特征大于样本的数量(n > m),建议使用逻辑回归,或者无核函数的SVM;如果样本的特征小于样本的数量(n < m),可考虑高斯核函数+SVM;如果样本特征远小于样本数量,考虑手工添加特征,并使用逻辑回归或无核函数的SVM。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。