zoukankan      html  css  js  c++  java
  • 七、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)预测结果不能直接进行概率解释,这一点可以通过内部交叉检验进行评估,但是评估过程的计算量也很大。

  • 相关阅读:
    PAT 1097. Deduplication on a Linked List (链表)
    PAT 1096. Consecutive Factors
    PAT 1095. Cars on Campus
    PAT 1094. The Largest Generation (层级遍历)
    PAT 1093. Count PAT's
    PAT 1092. To Buy or Not to Buy
    PAT 1091. Acute Stroke (bfs)
    CSS:word-wrap/overflow/transition
    node-webkit中的requirejs报错问题:path must be a string error in Require.js
    script加载之defer和async
  • 原文地址:https://www.cnblogs.com/nuochengze/p/12531783.html
Copyright © 2011-2022 走看看