第四章 分类模型-支持向量机SVM知识点详细总结

机器学习算法系列

第一章 Python/Spark 分类模型-逻辑回归知识点详细总结

第二章 分类模型-决策树知识点详细总结

第三章 分类模型-随机森林知识点详细总结

第四章 分类模型-支持向量机SVM知识点详细总结

第五章 关联分析- apriori算法知识点详细总结

目录

机器学习算法系列

前言

一、SVM简介

二、基本原理

三、实现步骤

四、求解模型

五、参数说明

六、SVM算法的优缺点

七、应用领域

八、模型代码


前言

本章主要讲解SVM的基本原理、实现步骤、模型参数说明及优缺点等。


一、SVM简介

      支持向量机(Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析。 它是将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面,分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。

二、基本原理

对于线性可分的任务,找到一个具有最大间隔超平面

第四章 分类模型-支持向量机SVM知识点详细总结_第1张图片

三、实现步骤

  1. 导入数据
  2. 数据归一化
  3. 执行svm寻找最优的超平面
  4. 绘制分类超平面核支持向量
  5. 利用多项式特征在高维空间中执行线性svm
  6. 选择合适的核函数,执行非线性svm

四、求解模型

异常值处理:合页损失函数

求解SVM的方法:二次规划、转化成对偶问题

五、参数说明

python,SVC参数

C 正则化参数 default C = 1.0
kernel 内核类型 默认值为“rbf”;'linear','poly','rbf','sigmoid','precomputed'或callable
degree 多项式核函数('poly')的设置 int, optional,默认值为3; 当指定kernel为 ‘poly’时,表示选择的多项式的最高次数,默认为三次多项式。 注:若指定kernel不是‘poly’,则忽略,即该参数只对‘poly’有作用。
gamma 当kernel为‘rbf’, ‘poly’或‘sigmoid’时的kernel系数 default=’auto’;如果不设置,默认为 ‘auto’ ,此时,kernel系数设置为:1/n_features
coef0 kernel核函数的常数项 float, optional,default=0.0;只有在 kernel为‘poly’或‘sigmoid’时有效。
probablity 是否采用概率估计 boolean, optional (default=False);
shrinking boolean, optional (default=True);如果能预知哪些变量对应着支持向量,则只要在这些样本上训练就够了,其他样本可不予考虑,这不影响训练结果,但降低了问题的规模并有助于迅速求解。进一步,如果能预知哪些变量在边界上(即a=C),则这些变量可保持不动,只对其他变量进行优化,从而使问题的规模更小,训练时间大大降低。这就是Shrinking技术。
tol 误差项达到指定值时则停止训练 float, optional;默认为1e-3,即0.001
cache_size 指定内核缓存的大小 float, optional; 默认为200M。
class_weight 权重设置 dict或"balanced’"或optional;如果不设置,则默认所有类权重值相同
verbose 是否启用详细输出 bool布尔型, default为False
max_iter 迭代次数 int, optional (default=-1);默认设置为-1,表示无穷大迭代次数。
decision_function_shape default=’ovr’;‘ovo’, ‘ovr’
random_state 伪随机数使用数据 int, RandomState instance or None, optional (default=None)

sklearn代码示例:

sklearn.svm.SVC(
            C=1.0,
            kernel='rbf',
            degree=3,
            gamma='auto',
            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)

scala语言SVM参数说明

stepSize 迭代步长 float, 默认为1.0
numIterations 迭代次数 int,默认为100
regParam 正则化参数 默认值为0.0
miniBatchFraction 每次迭代参与计算的样本比例 默认为1.0
gradient:HingeGradient 梯度下降
updater:SquaredL2Updater 正则化 L2范数
optimizer:GradientDescent (gradient, updater)* 梯度下降最优化计算

spark.mllib代码示例:

 new SVMWithSGD()
  svmAlg.optimizer.
    setNumIterations(numIteration).
    setRegParam(regParam).
    setMiniBatchFraction(miniBatchFraction).
    setUpdater(new L1Updater)
  svmAlg.run(training)

六、SVM算法的优缺点

(1)优点

  1. 使用核函数可以向高维空间进行映射,解决高维问题

  2. 使用核函数可以解决非线性的分类,解决非线性问题

  3. 分类思想很简单,就是将样本与决策面的间隔最大化

  4. 分类效果较好

  5. 泛化能力比较强

  6. 无局部极小值问题;(相对于神经网络等算法)

(2)缺点

  1. SVM算法对大规模训练样本难以实施,内存消耗大,难以解释

  2. 用SVM解决多分类问题存在困难

  3. 对缺失数据敏感,对参数和核函数的选择敏感

七、应用领域

SVM在各领域的模式识别问题中有广泛应用,包括:

  1. 人像识别(face recognition)

  2. 文本分类(text categorization)

  3. 笔迹识别(handwriting recognition)

  4. 生物信息学

八、模型代码

scala语言:

    val training = sc.textFile(input).map(_.split(splitter)).map(
      p => LabeledPoint(p(0).toDouble, Vectors.dense(Array.concat(p.take(0), p.drop(1)).map(_.toDouble)))
    )

    val numIteration = 100

    // Run training algorithm to build the model
    val model = regMethod match {
      case "L1" => val svmAlg = new SVMWithSGD()
        svmAlg.optimizer.
          setNumIterations(numIteration).
          setRegParam(regParam).
          setMiniBatchFraction(miniBatchFraction).
          setUpdater(new L1Updater)
        svmAlg.run(training)
      case "L2" =>  SVMWithSGD.train(training, numIteration,stepSize,regParam)
      case _ => throw new RuntimeException("no regMethod specific")

你可能感兴趣的:(scala,python,机器学习,机器学习,python,数据挖掘,人工智能,算法)