当前位置:   article > 正文

svm 支持向量机 回归 预测_机器学习算法:支持向量机 SVM

svm用于回归和预测

概述

SVM通过对二分类有监督样本集的学习,力图找到一个划分超平面,使两个异类支持向量到超平面的距离之和(ie间隔)最大

  • 超平面在分类任务中将两类训练样本分开,可通过线性方程
    描述。若其能将样本正确分类,则对
    ,对
  • 支持向量指距离超平面最近的几个样本点,能令
  • 间隔指两个异类支持向量到超平面的距离之和,公式为

因此SVM的学习目标即为

,可转化为最小化问题,从而求得参数 w 和 b,进而得到对应的模型

SVM的基本型:

  • 求解函数:对基本型使用拉格朗日乘子法得到其对偶问题,然后使用SMO算法求解对偶问题得到
    (SMO算法每次固定其他参数仅优化两个参数,可将问题转化为关于
    的单变量二次规划问题,具有闭式解,求解效率高),进而可得 w 和 b,得出模型

bf62dfe57d11421036f7e7f0471a892a.png

优点:

  • 可自动找出支持向量,最大化类与类的间隔,具有较好的适应能力和较高的分类准确率(是对LDA和逻辑回归的改进)
  • 最终模型仅与支持向量有关,具有稀疏性,其复杂度主要与支持向量的数目有关,训练开销较小(while逻辑回归需要的样本更多)
  • 不容易过拟合
  • 对复杂的非线性决策边界的建模能力高度准确

缺点:训练数据较大;不能返回分类概率;需要对数据进行标准化处理

用于分类(二分类&多分类)

算法原理

其算法原理即SVM的算法原理,该算法本身就是为二分类任务设计的

算法求解

在分类任务中,存在三种SVM模型:

1、硬间隔支持向量机(即正统线性可分SVM):当训练数据线性可分

  1. from sklearn import svm
  2. clf = svm.SVC()
  3. clf.fit(trainx, trainy)
  4. clf.predict(testx)
  5. clf.score(testx, testy) #返回模型准确率
  6. # 可以查看支持向量是哪些 #
  7. clf.support_vectors_
  8. clf.support_ #支持向量的index
  9. clf.n_support_ #每类的支持向量有几个
  10. # 对于多分类任务,SVC采取OVO策略 #
  11. clf = svm.SVC(decision_function_shape='ovo')

2、软间隔支持向量机:当训练数据近似可分(很难确定超平面/线性可分是由于过拟合)

对基本型引入损失函数,从而允许某些样本不满足约束,以降低过拟合风险。为了求解方便使用数学性质更好的替代损失函数surrogate loss,而使用hinge损失,并对每个样本引入松弛变量以表征该样本不满足约束的程度,即为软间隔SVM

基本型重写为

,求解思路与硬间隔SVM相同

当损失函数选择对率函数,即为逻辑回归模型

  1. # 可使用随机梯度下降分类器来specify替代损失和正则化项 #
  2. from sklearn.linear_model import SGDClassifier
  3. clf = SGDClassifier(loss='hinge', penalty='l2', max_iter=5) #hinge loss返回LinearSVC一样的结果
  4. # loss还可选'log'/'modified_huber' #
  5. # 多分类任务,采取OVA策略 #

3、非线性支持向量机:当训练数据不可分/不存在超平面,通过软间隔最大化及核技巧习得

应用场景:异或问题...

利用核函数进行特征映射,将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分

表示 x 映射后的特征向量,则引入的核函数为
,则模型为
,模型最优解可通过训练样本的核函数展开(这一展式亦称支持向量展式)

核函数的选取对支持向量机的性能至关重要(因为决定了特征空间的好坏)

引入核函数的好处:映射后的模型求解涉及到高维内积计算,而核函数可令特征空间的内积等于在原始空间的函数计算结果,大大降低计算难度;具有普适性,对于一般的损失函数和正则化项,优化问题的最优解都可表示为核函数的线性组合

  1. from sklearn import LinearSVC #线性核
  2. clf = svm.LinearSVC()
  3. clf.fit(trainx, trainy)
  4. clf.predict(testx)
  5. # 还可以在svm.SVC(kernel='linear') #
  6. # 对于多分类任务,LinearSVC采取OVO策略 #
  7. clf = svm.SVC(decision_function_shape='ovr')

模型评估:模型自带评分函数/分类模型通用评分函数

clf.score(testx, testy)  #返回mean accuracy

用于回归

算法原理

不同于传统回归模型当且仅当 f(x) 与 y 完全相同时损失才为零,SVR仅当 f(x) 与 y 之间的差别绝对值大于

时才计算损失

相当于以 f(x) 为中心构建了一个宽度为

的间隔带,若训练样本落入此间隔带,会认为预测正确

算法求解

1、存在超平面时的SVR

  1. from sklearn import svm
  2. reg = svm.SVR()
  3. reg.fix(trainx, trainy)
  4. reg.predict(testx)

2、不存在超平面的SVR:引入核

  1. from sklearn import svm
  2. reg = svm.LinearSVR() #计算更快
  3. reg = svm.SVR(kernel='linear')
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/135489?site
推荐阅读
相关标签
  

闽ICP备14008679号