支持向量机(Support Vector Machine, SVM)是最受欢迎的机器学习模型之一。它特别适合处理中小型复杂数据集的分类任务。
一、什么是支持向量机
SMV在众多实例中寻找一个最优的决策边界,这个边界上的实例叫做支持向量,它们“支持”(支撑)分离开超平面,所以它叫支持向量机。
那么我们如何保证我们得到的决策边界是最优的呢?
如上图,三条黑色直线都可以完美分割数据集。由此可知,我们仅用单一直线可以得到无数个解。那么,其中怎样的直线是最优的呢?
如上图,我们计算直线到分割实例的距离,使得我们的直线与数据集的距离尽可能的远,那么我们就可以得到唯一的解。最大化上图虚线之间的距离就是我们的目标。而上图中重点圈出的实例就叫做支持向量。
这就是支持向量机。
二、从代码中映射理论
2.1 导入数据集
添加引用:
导入数据集(大家不用在意这个域名):
该数据集模拟了一项医学研究,对感染病毒的小白鼠使用不同剂量的两种药物,观察两周后小白鼠是否感染病毒。
特征:1. 药物Med_1_mL 药物Med_2_mL
标签:是否感染病毒(1感染/0不感染)
2.2 观察数据
我们用seaborn绘制两种药物在不同剂量特征对应感染结果的散点图。
我们通过pairplot方法绘制特征两两之间的对应关系。
我们可以做出大概的判断,当加大药物剂量可使小白鼠避免被感染。
2.3 使用SVM训练数据集
我们导入下的(Supprt Vector Classifier)分类器,它是SVM的一种实现。
2.4 SVC参数C
SVC方法参数代表L2正则化参数,正则化的强度与的值成反比,即C值越大正则化强度越弱,其必须严格为正。
我们减少C的值,可以看到模型拟合数据的程度减弱。
2.5 核技巧
SVC方法的参数可取值。像前文中所使用的那样,我们可以使进行线性分类。那么如果我们想进行非线性分类呢?
2.5.1 多项式内核
多项式内核的原理简单来说就是,用单一特征生成多特征来拟合曲线。比如我们拓展X到y的对应关系如下:
这样我们就可以用曲线来拟合数据集。
我们使用多项式内核,并通过设置多项式的最高次数为5。我们可以看出分割出现了一定的弧度。
2.5.2 高斯RBF内核
SVC方法默认内核为高斯,即Radial Basis Function(径向基函数)。这时我们需要引入参数来控制钟形函数的形状。增加gamma值会使钟形曲线变得更窄,因此每个实例影响的范围变小,决策边界更不规则。减小gamma值会使钟形曲线变得更宽,因此每个实例的影响范围变大,决策边界更平坦。
2.6 调参技巧:网格搜索
我们可以通过方法来遍历超参数的各种可能性来寻求最优超参数。这是通过算力碾压的方式暴力调参的手段。当然,在分析问题阶段,我们必须限定了各参数的可选范围才能应用此方法。
因为数据集太简单,我们在遍历第一种可能性时就已经得到100%的准确率了,输出如下:
总结
当我们处理线性可分的数据集时,可以使用方法来训练数据,当然我们也可以使用更快的方法来训练数据,特别是当训练集特别大或特征非常多的时候。
当我们处理非线性SVM分类时,可以使用高斯RBF内核,多项式内核,sigmoid内核来进行非线性模型的的拟合。当然我们也可以通过GridSearchCV寻找最优参数。
---------
原创不易,感谢在看
领取专属 10元无门槛券
私享最新 技术干货