吴恩达机器学习笔记——十二、支持向量机SVM
1 优化目标
1.1 回顾
在logistics回归中,我们的预测输出模型是:
我们希望我们的模型具有以下性能:
则测试集中某一样本的代价函数是:
如果求总的代价函数,则应该在式子前面加一个Σ求和。
我们令z = θTx,则当y = 1时的代价函数图像为:
1.2 代价函数
构建支持向量机,我们需要把代价函数做一个改变,如下图粉色折线,在z = 1 (-1) 处分段。
左侧曲线记为cost1(z),右侧曲线记为cost0(z)。
带有正则化项的logistics回归的总体代价函数是:
上式可以看做如下形式:
则我们定义支持向量机的代价函数为:
可以看做如下形式
2 惩罚因子/松弛因子C
与logistics回归不同,在SVM中,我们以 θTx=1(或-1) 作为分类为正反例的阈值,而不以0为阈值,这个差值称为安全距离或安全因子。
如果我们取较大的C值,例如100000,那么我们在最小化代价函数时,就不得不令cost0(z)或cost1(z)等于0,这样,问题就变成了带约束条件的最优化问题:
使用支持向量机做分类时会有迭代出图中的黑色直线来分类,这条黑色直线距离两类样本的最小距离都比较大,分类边界距离样本的距离称为支持向量机的间距,这可以增强鲁棒性,当常数C取值非常非常大时,SVM就变成了最大间距分类器。
但是最大间距分类器对异常点(噪声)很敏感,如果我们对以下数据集使用最大间距分类器进行分类,那么我们会得到这条粉色的线而不是黑色的线。通过合理设置C的大小,可以得到理想的黑色直线。
所以C的作用与正则化项的λ有着类似的作用,通过调整C的大小,可以对线性不可分的样本进行很好的分类,即
- 当C趋于无穷大时,这个问题也就是不允许出现分类误差的样本存在,那这就是一个hard-margin SVM问题
- 当C趋于0时,我们不再关注分类是否正确,只要求间隔越大越好,那么我们将无法得到有意义的解且算法不会收敛
3 核函数
引入核函数的目的是高效的学习复杂非线性函数,将线性不可分问题转换为线性可分的问题
如果始空间是有限维的,即属性数有限,那么一定存在一个高维特征空间使样本可分
核函数和支持向量机其实是一个比较深奥的问题,单靠这一小节并不能很好说明白,大家可以先继续看这一小节,想深入了解核函数的话可以看我单独做的关于核函数的blog,网址如下:
3.1 什么是核函数
我们以只含有两个特征的分类问题为例,人为的选定三个点l(1), l(2), l(3)。
对于一个给定的实例x,我们定义三个特征为:
相似度函数similarity(x, l(i))称为核函数,这里我们的相似度函数是高斯函数,所以我们的核函数由称为高斯核。核函数还有其他的表示形式。
将高斯核函数展开(我们忽略了x0项,因为x0表示截距,令其恒等于1):
从上式可以看出,如果x和l(1)很接近的话,f1的值会很接近于1,反之f1的值会很接近于0,绘制一个含有两个变量的高斯核函数的图像:
通过核函数,我们得到了3个新的特征变量,f1, f2, f3,相当于把原先x的特征映射到了f1, f2, f3所在的特征空间。此例中x本身是二维向量,那么这里我们将其映射到了三维特征空间,同理,我们也可以将x降维映射。
3.2 如何选择标定点
对于有m个样本的训练集,将每一个样本点设为标定点:
每一个样本点可以计算他和所有标定点的相似度,分别记为f1, f2,…, fm
因此,我们就有了特征向量f,有时我们会加上常数截距f0:
对于一个给定的训练样本(x(i), y(i)),我们将其映射到f所在的特征空间,
将f0(i), f1(i), …, fm(i)合为一个特征向量f = [f0(i), f1(i), …, fm(i)]T,则我们得到了用于描述训练样本的新特征向量。
PS:有m+1个特征是因为有m个训 练样本
则我们的代价函数就变成了了:
3.3 如何选择支持向量机中的参数
3.3.1 松弛因子C
- 当C趋于无穷大时,这个问题也就是不允许出现分类误差的样本存在。与取小的λ的值的效果是一样,我们将会得到低偏差、高方差的模型,可能出现过拟合。
- 当C趋于0时,我们不再关注分类是否正确,只要求间隔越大越好。取大的λ的值的效果是一样,我们将会得到高偏差、低方差的模型,可能出现欠拟合。
3.3.2 高斯函数中的σ2
- σ值比较大,则高斯核比较平滑,此时会出现高偏差和低方差,因为此时的模型受输入x的影响小,变化缓慢。
- σ值比较大,则高斯核函数有较大斜率,此时会出现低偏差和高方差
4 使用SVM
代价函数的优化求解步骤可以使用现成的函数库直接实现,我们要做的是:
- 选择参数C
- 选择核函数(若使用高斯核,还需要选择σ)
其他的核函数:线性核函数(又称为无核),高斯核,多项式核,字符串核函数,卡方核函数,直方相交核函数
- 若n相较于m很大,则使用logistics回归或者SVM,而不使用核函数
- 若n很小,m适中,则使用高斯卷积核的SVM
- 若n很小,m很大,则增加特征数量,然后使用logistics回归或者SVM,而不用核函数。
5 多分类
一种方法是使用one vs all法,即有k个类别要分,则使用k次SVM,与logistics回归中解决多分类的方法一样。