SVM支持向量机

一个比较好的学习资源:

http://www.aibbt.com/a/21005.html

看完了优达学城的机器学习基础的课程,发现没有讲解具体怎么实现学习曲线和复杂度曲线的,这里还是需要自己去网上查一下。

http://www.aibbt.com/a/21443.html

原来C参数是这样来的!松弛变量。

虽然我们不想深挖SVM背后的数学概念,但还是有必要简短介绍一下松弛变量(slack variable) ,它是由Vladimir Vapnik在1995年引入的,借此提出了软间隔分类(soft-margin)。引入松弛变量的动机是原来的线性限制条件在面对非线性可分数据时需要松弛,这样才能保证算法收敛。

松弛变量值为正,添加到线性限制条件即可:

新的目标函数变成了:

使用变量C,我们可以控制错分类的惩罚量。和逻辑斯蒂回归不同,这里C越大,对于错分类的惩罚越大。可以通过C控制间隔的宽度,在bias-variance之间找到某种平衡:

哇,这个资源太好了!很具体哦

注意看右上角子图到右下角子图的转变,高维空间中的线性决策界实际上是低维空间的非线性决策界,这个非线性决策界是线性分类器找不到的,而核方法找到了:

使用核技巧在高维空间找到可分超平面

使用SVM解决非线性问题,我们通过映射函数将训练集映射到高维特征空间,然后训练一个线性SVM模型在新特征空间将数据分类。然后,我们可以使用相同的映射函数对测试集数据分类。

上面的想法很不错,但是如何构建新特征是非常困难的,尤其是数据本身就是高维数据时。因此,我们就要介绍核技巧了。由于我们不会过多涉及在训练SVM时如何求解二次规划问题,你只需要知道用替换就可以了。为了免去两个点的点乘计算, 我们定义所谓的核函数(kernel function): 

常用的一个核函数是Radial Basis Function kernel(RBF核),也称为高斯核:

通常简写为:

此处,,是一个要优化的自由参数。

通俗地讲,核(kernel)可以被解释为两个样本之间的相似形函数。高斯核中e的指数范围<=0,因此高斯核值域范围,特别地,当两个样本完全一样时,值为1,两个样本完全不同时,值为0.

有了核函数的概念,我们就动手训练一个核SVM,看看是否能够对线性不可分数据集正确分类:

结果如下,可以发现核SVM在XOR数据集上表现相当不错:

其中参数gamma可以被理解为高斯球面的阶段参数,如果我们增大gamma值,会产生更加柔软的决策界。为了更好地理解gamma参数,我们在Iris数据集上应用RBF核SVM:

我们选择的gamma值相对比较小,所以决策界比较soft:

现在我们增大gamma值,然后观察决策界:

虽然gamma值较大的模型对训练集分类效果很大,但其泛化能力一般很差,所以选择适当的gamma值有助于避免过拟合。

原文地址:https://www.cnblogs.com/JasonPeng1/p/12110133.html