七、Sklearn支持向量机

参考url:

https://jakevdp.github.io/PythonDataScienceHandbook/05.07-support-vector-machines.html

支持向量机(support vector machine,SVM)是非常强大、灵活的有监督学习算法,既可以用于分类、也可用于回归。

1、支持向量机的由来

  判别分类方法:不再为每类数据建模,而是用一条分割线(二维空间中的直线或曲线)或者流形体(多维空间中的曲线、曲面等概念的推广)将各种类型分割开。

  

   

2、支持向量机:边界最大化

  支持向量机提供改进这个问题的方法,即:不再画一条细线来区分类型,而是画一条到最近点边界、有宽度的线条。

  

   在支持向量机中,选择边界最大的那条线是模型最优解。

  支持向量机其实就是一个边界最大化评估器。

  1、拟合支持向量机

    用Scikit-Learn的支持向量机分类器在数据上训练一个SVM模型

    

     

     这就是两类数据间隔最大的分割线,有一些点正好就在边界线上,这些点是拟合的关键支持点,被称为支持向量,支持向量机算法也因此而得名。

    在Scikit-Learn里面,支持向量的坐标存放在分类器的support_vectors_属性中

    

     分类器能够成功拟合的关键因素,就是这些支持向量的位置——任何在正确分类的一侧远离边界线的点都不会影响拟合结果。

    从技术角度解释的话,是因为这些点不会对拟合模型的损失函数产生任何影响,所以只要它们没有跨越边界线,它们的位置和数量就都无关紧要。

    

     从左图中看到的是前60个训练样本的模型和支持向量。

    在右图中,画了前120个训练样本的支持向量,但是模型并没有改变:左图中的3个支持向量任然适用于右图

    这种对远离边界的数据点不敏感的特点正是SVM模型的优点之一

    

  2、超越线性边界:核函数SVM模型

    将SVM模型与核函数组合使用,功能会非常强大。

    

     

     增加新维度之后,数据变成了线性可分状态,如果现在画一个分割平面,例如r=0.7,即可将数据分割

    还需要仔细选择和优化投影方式,如果不能将径向基函数集中到正确的位置,那么就得不到如此干净、可分割的结果。

    选择基函数比较困难,需要让模型自动指出最合适的基函数,一种策略是计算基函数在数据集上每个点的交换结果,让SVM算法从所有结果中筛选出最优解,这种基函数变换方式被称为核变换,是基于每对数据点之间的相似度(或者核函数)计算的。

    这种策略的问题是,如果将N个数据点投影到N维空间,当N不断增大的时候就会出现维度灾难,计算了巨大。但是由于核函数技巧提供的小程序可以隐式计算核变换数据的拟合,即不需要建立完全的N维核函数投影空间。这个核函数技巧内置在SVM模型中,是使SVM方法如此强大的充分条件。

    在Scikit-Learn里面,可以应用核函数化的SVM模型将线性核转变RBF(径向基函数)核,设置kernel模型超参数即可。

    

    通过使用这个核函数化的支持向量机,找到了一条适合的非线性决策边界。

    在机器学习中,核变换策略经常用于将快速线性方法变换成快速非线性方法,尤其是对于那些可以应用核函数技巧的模型。     

  3、SVM优化:软化边界

    SVM实现了一些修正因子来‘软化’边界,解决部分数据重叠的问题。为了取得更好的拟合效果,它允许一些点位于边界线之内,边界线的硬度可以通过超参数进行控制,通常是C。

    如果C很大,边界就会很硬,数据点便不能在边界内‘生存’;如果C比较小,边界线比较软,有一些数据点就可以穿越边界线。

    

    

3、支持向量机总结

    支持向量机是一种强大的分类方法,主要有四点理由:

    (1)模型依赖的支持向量比较少,说明它们都是非常精致的模型,消耗内存少。

    (2)一旦模型训练完成,预测阶段的速度非常快

    (3)由于模型只受边界线附近的点的影响,因此它们对于高维数据的学习效果非常好——即使训练比样本维度还高的数据也没有问题,而这是其他算法难以企及的。

    (4)与核函数方法的配合极具通用性,能够适应不同类型的数据。

    SVM模型的一些缺点:

    (1)随着样本量N的不断增加,最差的训练时间复杂度会达到O[N3],经过高效处理后,也只能达到O[N3],因此,大样本学习的计算成本会非常高。

    (2)训练效果非常依赖于边界软化参数C的选择是否合理,这需要通过交叉检验自行搜索,当数据集较大时,计算量也非常大。

    (3)预测结果不能直接进行概率解释,这一点可以通过内部交叉检验进行评估,但是评估过程的计算量也很大。

原文地址:https://www.cnblogs.com/nuochengze/p/12531783.html