一,介绍

支持向量回归(SVR)是期望找到一条线,能让所有的点都尽量逼近这条线,从而对数据做出预测。

SVR的基本思路和SVM中是一样的,在ϵ−SVR需要解决如下的优化问题:

其回归图形如下:

如上左图可知,在灰色区域,是正确回归的点。而还有一部分变量落在区域外,我们采用类似SVM中使用的方法,引入松弛因子,采取软边界的方法,如上右图。

二,拉格朗日对偶求解

类似与SVM,在SVR中,引入拉格朗日乘子,获得拉格朗日函数,再求解更加容易计算。拉格朗日函数如下:

分别对w,b,求导得:

转化为对偶问题:

将w代入后获得:

三,Python代码:

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt# 随机产生样本点
X = np.sort(5 * np.random.rand(40, 1), axis=0)  #产生40组数据,每组一个数据,axis=0决定按列排列,=1表示行排列
y = np.sin(X).ravel()   #np.sin()输出的是列,和X对应,ravel表示转换成行# 产生噪声
y[::5] += 3 * (0.5 - np.random.rand(8))# SVC拟合
def svcrbfModel():svr_rbf10 = SVR(kernel='rbf',C=100, gamma=10.0)svr_rbf1 = SVR(kernel='rbf', C=100, gamma=0.1)y_rbf10 = svr_rbf10.fit(X, y).predict(X)y_rbf1 = svr_rbf1.fit(X, y).predict(X)return  y_rbf10,y_rbf1#画图
def showPlot(y_rbf10,y_rbf1):lw = 2 #line widthplt.scatter(X, y, color='darkorange', label='data')plt.hold('on')plt.plot(X, y_rbf10, color='navy', lw=lw, label='RBF gamma=10.0')plt.plot(X, y_rbf1, color='c', lw=lw, label='RBF gamma=1.0')plt.xlabel('data')plt.ylabel('target')plt.title('Support Vector Regression')plt.legend()plt.show()if __name__ == '__main__':y_rbf10, y_rbf1= svcrbfModel()showPlot(y_rbf10,y_rbf1)

产生如下结果:

sklearn.svm.SVR参数说明如下:

  • C:惩罚项,float类型,可选参数,默认为1.0,C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。
  • kernel:核函数类型,str类型,默认为'rbf'。可选参数为:
    • 'linear':线性核函数
    • 'poly':多项式核函数
    • 'rbf':径像核函数/高斯核
    • 'sigmod':sigmod核函数
    • 'precomputed':核矩阵
    • precomputed表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵,核矩阵需要为n*n的。
  • degree:多项式核函数的阶数,int类型,可选参数,默认为3。这个参数只对多项式核函数有用,是指多项式核函数的阶数n,如果给的核函数参数是其他核函数,则会自动忽略该参数。
  • gamma:核函数系数,float类型,可选参数,默认为auto。只对'rbf' ,'poly' ,'sigmod'有效。如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features。
  • coef0:核函数中的独立项,float类型,可选参数,默认为0.0。只有对'poly' 和,'sigmod'核函数有用,是指其中的参数c。
  • probability:是否启用概率估计,bool类型,可选参数,默认为False,这必须在调用fit()之前启用,并且会fit()方法速度变慢。
  • shrinking:是否采用启发式收缩方式,bool类型,可选参数,默认为True。
  • tol:svm停止训练的误差精度,float类型,可选参数,默认为1e^-3。
  • cache_size:内存大小,float类型,可选参数,默认为200。指定训练所需要的内存,以MB为单位,默认为200MB。
  • class_weight:类别权重,dict类型或str类型,可选参数,默认为None。给每个类别分别设置不同的惩罚参数C,如果没有给,则会给所有类别都给C=1,即前面参数指出的参数C。如果给定参数'balance',则使用y的值自动调整与输入数据中的类频率成反比的权重。
  • verbose:是否启用详细输出,bool类型,默认为False,此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。
  • max_iter:最大迭代次数,int类型,默认为-1,表示不限制。
  • decision_function_shape:决策函数类型,可选参数'ovo'和'ovr',默认为'ovr'。'ovo'表示one vs one,'ovr'表示one vs rest。
  • random_state:数据洗牌时的种子值,int类型,可选参数,默认为None。伪随机数发生器的种子,在混洗数据时用于概率估计。

机器学习-支持向量回归相关推荐

  1. 机器学习——支持向量回归(SVR)

    机器学习--支持向量回归(SVR) educoder平台练习题 如果博客中图片加载失败可点击链接跳转至实训详情 https://www.educoder.net/shixuns/b6yi97f2/ch ...

  2. 【机器学习】支持向量回归

    有任何的书写错误.排版错误.概念错误等,希望大家包含指正. 在阅读本篇之前建议先学习: [机器学习]支持向量机[上]硬间隔 [机器学习]支持向量机[下]软间隔与核函数 支持向量回归 支持向量回归(su ...

  3. 【机器学习系列】之支持向量回归SVR

    作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...

  4. python 最小二乘回归 高斯核_机器学习技法6-(支持向量回归)

    一.核岭回归 线性分类模型加入了L2正则化以后,最佳解是w关于z的线性组合,因此带有L2正则化的线性分类模型能引入核函数,也就是把线性模型变成核函数的形式. 在线性回归模型中,损失函数为: 当给线性回 ...

  5. 【机器学习基础】支持向量回归

    引言 这一小节介绍一下支持向量回归,我们在之前介绍的核逻辑回归使用表示定理(Representer Theorem),将逻辑回归编程Kernel的形式,这一节我们沿着这个思路出发,看看如何将回归问题和 ...

  6. 机器学习之支持向量回归(SVR)预测房价—基于python

    大家好,我是带我去滑雪! 本期使用爬取到的有关房价数据集data.csv,使用支持向量回归(SVR)方法预测房价.该数据集中"y1"为响应变量,为房屋总价,而x1-x9为特征变量, ...

  7. 机器学习西瓜书笔记:软间隔和支持向量回归SVR

    1.首先由SVM问题(最大间隔超平面模型):所有样本都可以正确分类的最优化问题,引入软间隔SVM(允许分类错误)的最优化问题,即需要添加损失函数(样本不满足约束的程度,或者说分类错误的程度),然后最优 ...

  8. 迈向数据科学的第一步:在Python中支持向量回归

    什么是支持向量回归? (What is Support Vector Regression?) Support vector regression is a special kind of regre ...

  9. 支持向量机与支持向量回归(support vector machine and support vector regression)

    支持向量机和支持向量回归是目前机器学习领域用得较多的方法,不管是人脸识别,字符识别,行为识别,姿态识别等,都可以看到它们的影子.在我的工作中,经常用到支持向量机和支持向量回归,然而,作为基本的理论,却 ...

  10. 支持向量机(SVM)、支持向量回归(SVR)

    论文完成也有一段时间了,用到了支持向量机(Support Vector Machine或SVM)方面的知识,感觉泛化能力比较好,一开始的时候,用了一些神经网络的模型,泛化能力都不是很满意,立即转到支持 ...

最新文章

  1. python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟
  2. 使用FIO对SATA、SSD和PCIe Flash进行测试
  3. FATAL ERROR: Could not find ./bin/my_print_defaults
  4. matplotlib可视化_EDA:Geopandas,Matplotlib和Bokeh中的可视化
  5. yum php fpm5.6,CentOS 7 yum 安装php5.6
  6. 小程序 封装table组件
  7. C++ _countf
  8. 源码分析参考:Spider
  9. python turtle库setpos_Python:使用mathturtle库绘制切线图
  10. netkit-ng安装使用
  11. OpenUDID 和 IDFA 比较
  12. MySQL特有的SQL语句 第一弹
  13. 【傻瓜教程】手把手教你安装pip
  14. Vue.js——登录界面实现插入背景
  15. 地图学类毕业论文文献包含哪些?
  16. 法国物联网公司Sigfox 获1.6亿美元E轮融资
  17. 6657生成调试工程pdkProjectCreate说明
  18. 因为文件目录存在空格导致kafka运行错误:提示找不到或者无法加载主类错误
  19. 第十二周《支持SQl Server内部,第二版》CHAR1数据页面和数据行 作者Dmitri Korotkevitch
  20. 康拓普:数据可视化如何让大数据更加人性化?

热门文章

  1. Docker 管理之 --- 资源限制
  2. 【开发工具】【Java开发工具 IDEAIU-2017.3】【安装和激活】
  3. 永磁同步电机 MTPA 超前角弱磁 SVPWM过调制
  4. Programe_Of_Beauty:2.17 数组循环位移
  5. matlab批量将csv转换成xls,如何批量将CSV格式的文件转化成excel格式 |
  6. 【译】软件设计中的KISS原则
  7. 【使用51单片机驱动1.54英寸墨水屏做一个简洁的贪吃蛇游戏】
  8. imdisk虚拟光驱安装linux,imdisk虚拟磁盘驱动器如何加载iso文件?大白菜ImDisk加载iso文件教程...
  9. python 主函数传参_Python函数传参详解
  10. 一个查看目录状态的工具WinDirStat