SVM支持向量机(2)核函数相关及如何选择
0x00 简介
本文仍是观看吴恩达老师的SVM相关课程后的笔记和梳理。上一篇我们介绍了SVM的工作原理,这一篇学习核函数的使用场景、原理和使用的注意事项,以及一些参数选择、模型选择的问题。
0x01 核函数
问题引入
在上一节中,我们讨论了SVM在判别边界可以为线性情况下的工作原理,但实际情况中,我们会遇到非线性的判别边界,如图:
为描述这种非线性判别边界的情况,我们之前会使用复杂多项式特征集合的方式来获得更多的特征,并进行判别。
但选择多项式作为额外的特征,并不一定是一个好的选择,尤其是对于计算机视觉,输入往往是由大量像素组成的图像,此时高阶多项式的运算量将是非常大的。
于是我们接下来使用高斯核函数来获取新的特征。
高斯核函数 Gaussian Kernel
假设我们的样本中原有两个特征:x1、x2。 我们对于这两个特征,手动的选取一些标记点:l1、l2、l3。
然后我们定义特征,f1 = similarity(x,l1),f2 = similarity(x,l2),f3 = similarity(x,l3)。其中similarity相似度的公式可以表示为:
这个相似度表达式即为高斯核函数 Gaussian Kernel。
当然,除了高斯核函数以为,我们也有不同的相似度度量的函数,也就是其他的核函数。
对于Gaussian Kernel来讲,如果样本点与标记点较近,那么 f 近似为1,如果较远,则 f 近似为0。
获取到新的特征f1 f2 f3后,我们的预测函数就变为:
接下来的问题是,我们从哪里获得l1、l2、l3。
通常在实际应用时,我们直接使用样本点的位置,作为标记点。如图。
注:标记点并不区分正反例,图中的蓝色和红色只是描述对应关系,无实际意义。
所以,整个的流程是,给出一个训练样本(x,y),我们去计算它与样本点的一系列相似度,也就是核函数,并合并为一个特征向量 f。然后对于 f ,其预测函数为:
其训练的SVM代价函数(和上一节相结合)为:
SVM 参数
对于C参数,因为 C = 1/λ ,所以C取比较大的值,会产生低偏差、高方差,取比较小的值,会产生高偏差、低方差。
对于 Gaussian Kernel 函数中的 σ2 ,σ2偏大时,特征 f 会相对平滑。会给模型带来较高的偏差、较低的方差。
σ2偏小时,特征 f 会变化剧烈。会给模型带来低偏差、高方差。
0x02 一些细节以及一些选择问题
在第一节中,我们没有使用核函数,不使用核函数也叫做 linear kernel 线性核函数。它只是给我们一个标准的线性分类器。
在我们使用高斯核函数时,我们需要注意,使用之前要将这些特征变量的大小按比例归一化,即在计算高斯核函数中的 || x-l ||2 时,要注意不同的 x(n)特征的比例缩放问题。
所有的核函数都需要满足一个技术条件,叫做默塞尔定理,这是为了使用SVM的实现函数的许多熟练的数值优化技巧。
其他的几种核函数
- 多项式核函数
- 字符串核函数 String Kernel
- 卡方核函数 chi-square kernel
- 直方相交核函数 histogram intersection kernel
Logistic regression vs SVMs
下面用n表示特征数,m表示训练样本数
- n非常大(例如 n=10000,m=10 - 1000):使用Logistic Regression或 Linear kernel SVM
- n小,m中等(n=1 - 1000,m=10 - 10000):使用Gaussian Kernel SVM
- n小,m大(n=1 - 1000,m = 50000+):创造、添加特征,然后使用Logistic Regression或 Linear kernel SVM。
- 神经网络在这些情况下都可以使用,但训练时间可能会比较长。
- SVM的优化问题是凸优化问题,总会找到全局最优解。