美文网首页数据蛙数据分析每周作业
机器学习(四) 支持向量机

机器学习(四) 支持向量机

作者: 晓迦 | 来源:发表于2019-05-17 22:19 被阅读0次

    支持向量机的数学推导较复杂,本篇文章不对支持向量机的数学原理进行推导。仅仅从支持向量机要解决的问题出发,大致推导支持向量机的公式,理解什么是支持向量机。然后了解什么是松弛系数,以及松弛系数的作用。然后理解核函数的概念,以及核函数的作用等。
    所以本篇文章主要对以下内容做一下梳理与总结:

    • 4.1 支持向量机的基本原理
    • 4.2 松弛系数
    • 4.3 核函数
    • 4.4 sklearn调用以及相关参数解释

    4.1 支持向量机的基本原理

    假设我们现在面临一个二分类问题,也就是如下图(数据二维)所示,用一条直线将两种不同的样本分成两类。


    假如是线性可分的数据,如上面右图所示,这样的直线有无数条。那么我们怎样去选择一条最好的直线呢?这就是支持向量机要解决的问题。对于二维数据,怎样找到一条直线使数据分割得最好?对于多维数据,怎样找到一个超平面使数据分割得最好呢?
    支持向量机的核心思想是:找到一个分割超平面,使距离这个超平面最近的点的距离最大

    支持向量机的基本推导过程如下:

    • 计算支持向量点(也就是距离分割超平面最近的点)到分割超平面的距离,使这个距离最大
    • 将求最大值转换为求最小值问题
    • 引入拉格朗日乘子式,并利用其对偶原理
    • 找到求出最优参数w、b的方法

    详细推导过程可见如下博客:
    简书飘涯的文章:
    机器学习(9)——SVM数学基础
    机器学习(10)——线性SVM
    (同时本文章中的图也是盗自上面文章。。)

    4.2 松弛系数

    上面的推导仅仅考虑了线性可分的问题,如果对于线性不可分的问题该怎么办呢?或者说,数据存在异常值,是不是说支持向量机模型就失去效果了呢?
    这时候需要引入一个参数\eta,称为松弛系数
    通俗理解松弛系数:使样本到超平面的距离放松了,在求超平面的时候,不考虑一些离超平面较近的点以及分割错误的点。
    引入松弛系数的SVM也叫软间隔。

    对于每个样本只需要引入松弛因子η,使得样本到超平面的函数距离放松了。当然松弛因子的引入是有成本的,可能会导致模型的分类错误。为此我们需要在松弛因子前面加入惩罚项系数,来约束松弛因子的过大行为。通常情况下,惩罚项系数需要调参得到。
    软间隔小结:
    (1)可以解决线性数据中携带异常点的分类模型构建的问题;
    (2).通过引入惩罚项系数(松弛因子),可以增加模型的泛化能力,即鲁棒性;
    (3)如果给定的惩罚项系数越小,表示在模型构建的时候,就允许存在越多的分类错误的

    4.3 核函数

    为什么要引入核函数呢?
    因为有一种类型的数据,不管超平面怎样变化,都不能很好的将样本正确的分类。
    例如以下(左)的数据分布,找不到一条直线使样本较好的分割。


    这个时候,可以考虑将低维的数据转到高维的数据,然后样本就可以很好的分割了。如上图(右)所示,对于在二维平面不可分割的样本,升维到三维平面之后,就可以很简单的由一个平面将两样本分割开了。
    以上只是很直观的解释了为什么要引入核函数,以及核函数的作用,方便理解,不一定对
    详细的推导过程请转至简书飘涯的文章:机器学习(11)——非线性SVM

    核函数的总结:
    (1)核函数可以自定义;核函数必须是正定核函数,即Gram矩阵是半正定矩阵;
    (2)核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算
    (3).通过核函数,可以将非线性可分的数据转换为线性可分数据

    4.4 sklearn调用以及相关参数解释

    class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)
    

    参数解释:

    • C :C-SVC的惩罚参数,默认值是1.0。C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误差分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减少,允许分错,将他们当场噪声点,泛化能力较强。
    • kernel:核函数,默认为‘rbf’,可以是 linear’,‘poly’, ‘rbf’,分别代表线性核函数、多项式核函数、RBF高斯核函数。
    • degree:多项式核函数‘poly’的维度,默认为3,选择其他核函数时会被忽略。
    • gamma :‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features
    • coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。
    • probability :是否采用概率估计?.默认为False
    • shrinking :是否采用shrinking heuristic方法,默认为true
    • tol :停止训练的误差值大小,默认为1e-3
    • cache_size :核函数cache缓存大小,默认为200
    • verbose :允许冗余输出?
    • max_iter :最大迭代次数。-1为无限制
    • random_state :数据洗牌时的种子值,int值
      参考:支持向量机SVM:使用sklearn+python

    相关文章

      网友评论

        本文标题:机器学习(四) 支持向量机

        本文链接:https://www.haomeiwen.com/subject/idhaaqtx.html