学会使用SVM解决分类问题
2.学会使用不同的SVM核函数,达到不同的效果
在sklearn中的make_moons数据中用SVM的不同的核函数进行分类训练。
下面是使用多项式特征的SVM,首先使用Pipeline将几个估计器链接在一起,比如生成多项式,最高次数为degree数据归一化处理,线性的SVM分类器,惩罚项参数为1。
下面是使用多项式核函数的SVM,也是使用Pipeline将数据归一化和核函数为“ploy”的SVM链接在一起,最高次数为degree,惩罚项参数为1。
下面是使用高斯(RBF)核函数的SVM,也是使用Pipeline将数据归一化和核函数为“rbf”的SVM链接在一起,其中的gamma参数值取值越大表示的就是高斯函数(正太分布)的那个分布曲线越高瘦,分布曲线变的尖尖的。
下面是使用高斯(RBF)核函数的SVM,也是使用Pipeline将数据归一化和核函数为“rbf”的SVM链接在一起,其中的gamma参数值取值越大表示的就是高斯函数(正太分布)的那个分布曲线越高瘦,分布曲线变的尖尖的。
上面式make_moons的默认数据,可以看出两个类分别为两个曲线。
上面是在make_moons数据上增大噪声值得到的数据集,可以看出此时数据相比之前比较离散,总体上还是保持之前的趋势。
上面是使用多项式特征的SVM分类器得到的边界,最高次数为3,软间隔惩罚项为1.0,可以看出效果比较好,允许一些噪声点分类错误,得到较好的间隔距离。
上面是使用多项式核函数的SVM得到的边界,最高次数为3,软间隔惩罚项为1.0,由于惩罚项较小,所以这个边界蓝色类有一部分分类错误,效果并不好,所以应该增大惩罚项系数。
上面就是增大惩罚项系数到10000得到的边界,可以看出这次蓝色分类错误的点明显的少了许多,但是橙色类的一部分又分类错误了,仍然有些不合适
上面是两个类的分布,但是我们想要得到一个比较好的线性分类边界,很明显在二维下很难得到,所以我们运用核函数将数据转向高维,就可以得到一个较好的线性分类边界。
上图是使用RBF核函数的SVM得到的分类边界,gamma等于1,此时得到的决策边界和多项式核函数得到的决策边界并没有什么区别,这是因为取gamma = 1.0还看不出来核函数为高斯核的特点。
上图是使用RBF核函数的SVM得到的分类边界,gamma等于100,由于现在的gamma值比较大,所以可以看见每个蓝色类别的样本点的分布曲线都比较窄,此时的决策边界就是这些蓝色类别样本点周围围绕的区域,只有样本点在这些区域内才判定样本点为蓝色类别,否则,将样本点判定为红色类别。
上图是使用RBF核函数的SVM得到的等于10,相对于gamma = 100,钟形图案更宽了,所以这些蓝色点与点之间离得比较近的分布曲线就融合在了一起。
图是使用RBF核函数的SVM得到的等于10,相对于gamma = 0.5,这里红色的区域更大了。
1.高斯分布曲线的形状都是相似的钟形图。
u决定分布图中心的偏移情况。
theta决定分布图峰值的高低,或者说钟形的胖瘦程度。
因为高斯函数中的theta和高斯核函数中gamma成倒数关系。所以:
高斯函数中theta越大、高斯分布峰值越小。theta越小、高斯分布峰值越大。
高斯核函数中gamma越大、高斯分布峰值越大,既钟形越窄。gamma越小、高斯分布峰值越小,既钟形越宽。
gamma参数值取值越大表示的就是高斯函数(正太分布)的那个分布曲线越高瘦,分布曲线变的尖尖的。使用高斯核函数进行分类的决策边界其实就是针对其中的某一类的每一个样本点都有一个分布曲线,我们所观察的决策边界可以想象成俯视每个样本点的分布曲线,而这些样本点就是俯视时候看到的分布曲线的。