• 支持向量机(SVM)


    一、概念

      1、分离超平面:空间内能够将数据分为不同类别的平面

      2、线性可分:不同类别数据能够被一个超平面完全分开

      3、损失项:模型在数据上违反自身分类原则的程度(是一个求和项)

       4、损失系数:损失项的系数(是一个超参数,由模型给定)

      5、损失函数L = min (1/2*(||w||)2) + C*max(Σi max(0,1-y(i)*(w.x(i) +c))

      6、预测损失:损失函数的第二项(称作 hinge loss)

      7、惩罚项:损失函数的第一项 (在svm中,惩罚项的初衷是最大化margin(两个分类之间的距离))

      8、hard margin : C比较大,此时margin较小,模型更注重靠近超平面的异常点

      9、soft margin :C比较小,此时margin较大,模型更注重靠近类别中心的点

      10、核函数:机器学习重要的数据处理技巧,通过核函数将原空间中的非线性数据映射为高维(或者无限维)空间中近似线性关系的数据,机器学习模型搭载核函数的方法大体一致。

           常用的核函数:

              1、线性核函数(linear kernel)

              2、多项式核函数(ploynomial kernel)

                3、S型核函数(sigmoid kernel)

                4、拉普拉斯核函数(laplacian kernel)

              5、高斯核函数(RBF kernel)

          常用的核函数选择方法:

              1、网格搜寻 (grid search)

      11、拉格朗日对偶:一种在一个或多个约束下,寻找多元函数极值的方法。一定条件下 原始问题 和 对偶问题 等价。

      12、KKT条件:

    二、svm的直观理解

      1、支持向量机模型的数学表达,本质上就是该模型对应的最优化问题

      2、支持向量机模型的思路:寻找与被预测数据相似的训练数据,并将相应的因变量加权平均得到最后的预测值。权值是关键。

      3、机器学习领域的共识:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已

      4、只有落在虚线上,或者两条虚线时间的点,权重才有可能不等于0,这些点成为 支持向量(support vector)

    三、、模型实际应用,所面对实际条件:

      1、现实生活中需要面对的数据集大多数是线性不可分的

      2、隐含假设:每个数据点权重其实不一样,越靠近分离超平面,数据的权重越大,而且损失系数C越大(hard margin ),数据权重不一样的现象越严重

      3、选择模型依据: (1)希望模型对靠近‘边缘’的点更加敏感,则选择 hard margin ;(2) 希望综合考虑每一个点,使用soft margin ,或者逻辑回归

      4、支持向量机对特征(自变量)的线性变换 不稳定(scale variant),即是说在预处理时,对自变量做不同的线性变换,会极大影响svm的分类效果 解决办法:将各个变量归一化后,再使用svm进行分类 四、python scikit-learn 包 中 svc 用法

    本身这个函数也是基于libsvm实现的,所以在参数设置上有很多相似的地方。(PS: libsvm中的二次规划问题的解决算法是SMO)。
    sklearn.svm.SVC(C=1.0kernel='rbf'degree=3gamma='auto'coef0=0.0shrinking=Trueprobability=False,

    tol=0.001cache_size=200class_weight=Noneverbose=Falsemax_iter=-1decision_function_shape=None,random_state=None)

    参数:

     

    l  C:C-SVC的惩罚参数C?默认值是1.0

    C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。

    l  kernel :核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ 

        0 – 线性:u'v

        1 – 多项式:(gamma*u'*v + coef0)^degree

        2 – RBF函数:exp(-gamma|u-v|^2)

        3 –sigmoid:tanh(gamma*u'*v + coef0)

    l  degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。

    l  gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features

    l  coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。

    l  probability 是否采用概率估计?.默认为False

    l  shrinking :是否采用shrinking heuristic方法,默认为true

    l  tol 停止训练的误差值大小,默认为1e-3

    l  cache_size :核函数cache缓存大小,默认为200

    l  class_weight :类别的权重,字典形式传递。设置第几类的参数Cweight*C(C-SVC中的C)

    l  verbose :允许冗余输出?

    l  max_iter :最大迭代次数。-1为无限制。

    l  decision_function_shape ‘ovo’, ‘ovr’ or None, default=None3

    l  random_state :数据洗牌时的种子值,int

    主要调节的参数有:C、kernel、degree、gamma、coef0。

  • 相关阅读:
    蛙蛙推荐:用.net 4.0构建新浪微博开发平台应用
    蛙蛙推荐:Backbone官方文档翻译
    蛙蛙推荐:javascript异步任务流
    蛙蛙推荐:sqlserver三种分页方式性能比较
    蛙蛙推荐:css背景图片固定居中,div阴影,背景半透明,div圆角,DIV渐变
    如何高效的利用新浪微博获取信息
    蛙蛙推荐:gevent并发发送UDP包演示
    蛙蛙推荐:神马ORM都是浮云,看看史上最简单最好用的OleDbHelper
    蛙蛙推荐:写了一个简单的延迟队列
    PostgreSQL中with和without time zone两者有什么区别 规格严格
  • 原文地址:https://www.cnblogs.com/wl413911/p/11321378.html
Copyright © 2020-2023  润新知