在机器学习中,支持向量机Support Vector Machine)算法既可以用于回归问题,也可以用于分类问题。

支持向量机SVM)算法的历史可以追溯到1963年,当时前苏联统计学家弗拉基米尔·瓦普尼克(Vladimir N. Vapnik)和他的同事阿列克谢·切尔沃宁基斯(Alexey Ya. Chervonenkis)提出了支持向量机的概念。然而,由于当时的国际环境影响,他们用俄文发表的论文并没有受到国际学术界的关注。

直到20世纪90年代,瓦普尼克移民到美国,随后发表了SVM理论。
在此之后,SVM算法开始受到应有的重视。在1993年和1995年,Corinna Cortes和瓦普尼克提出了SVM的软间隔分类器,并对其进行了详细的研究和改进。随着机器学习领域的快速发展,SVM逐渐成为一种流行的监督学习算法,被广泛应用于分类回归问题。

一般来说,支持向量机用于分类问题时,会简称 SVC;用于回归问题时,会简称SVR

1. 概述

支持向量机回归(Support Vector Machine Regression,简称SVR)的基本思想是通过构建一个分类器,将输入数据映射到高维空间中,使得数据在高维空间中更加线性可分,从而得到一个最优的回归模型。


如上图所示,SVR的包括:

  1. 模型函数:\(f(x) = w^Tx +b\)
  2. 模型上下边缘分别为:\(w^T+x+b+\epsilon\)和 \(w^T+x+b-\epsilon\)

2. 创建样本数据

这次的回归样本数据,我们用 scikit-learn 自带的玩具数据集中的糖尿病数据集
关于玩具数据集的内容,可以参考:TODO

from sklearn.datasets import load_diabetes

# 糖尿病数据集
diabetes = load_diabetes()
X = diabetes.data
y = diabetes.target

这个数据集中大约有400多条数据。

3. 模型训练

训练之前,为了减少算法误差,先对数据进行标准化处理。

from sklearn import preprocessing as pp

# 数据标准化
X = pp.scale(X)
y = pp.scale(y)

接下来分割训练集测试集

from sklearn.model_selection import train_test_split

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

然后用scikit-learn中的SVR模型来训练:

from sklearn.svm import SVR

# 定义支持向量机回归模型
reg = SVR(kernel='linear') # 训练模型
reg.fit(X_train, y_train)

SVR的主要参数包括:

  1. kernel:核函数类型,可以选择线性('linear')、多项式('poly')、径向基('rbf')、sigmoid('sigmoid')等。
  2. degree:多项式核函数的度,仅当kernel='poly'时有效。
  3. C:惩罚参数,控制对超出间隔的样本的惩罚力度。C值越大,对超出间隔的样本的惩罚力度越大;C值越小,模型越有可能出现过度拟合。
  4. epsilon:定义间隔的容忍度,epsilon越大,间隔越大。
  5. gamma:定义了核函数的系数,gamma越大,核函数的形状越窄,对数据的影响越小。
  6. tol:定义了优化算法的容忍度,tol越大,算法越容易接受较差的解。
  7. max_iter:定义了优化算法的最大迭代次数。

最后验证模型的训练效果:

from sklearn import metrics

# 在测试集上进行预测
y_pred = reg.predict(X_test) mse, r2, m_error = 0.0, 0.0, 0.0
y_pred = reg.predict(X_test)
mse = metrics.mean_squared_error(y_test, y_pred)
r2 = metrics.r2_score(y_test, y_pred)
m_error = metrics.median_absolute_error(y_test, y_pred) print("均方误差:{}".format(mse))
print("复相关系数:{}".format(r2))
print("中位数绝对误差:{}".format(m_error)) # 运行结果
均方误差:0.6235345942607318
复相关系数:0.3106068096398569
中位数绝对误差:0.5861766809598691

从预测的误差来看,训练的效果还不错

4. 总结

SVR算法的应用场景非常广泛,包括时间序列预测、金融市场分析、自然语言处理、图像识别等领域。
例如,在时间序列预测中,SVR算法可以用于预测股票价格、房价等连续变量的未来值。
金融市场分析中,SVR算法可以用于预测股票指数的走势,帮助投资者做出更加明智的投资决策。
自然语言处理中,SVR算法可以用于文本分类和情感分析等任务。
图像识别中,SVM回归算法可以用于图像分割和目标检测等任务。

总之,SVR算法是一种非常有效的机器学习算法,可以用于解决各种回归问题。
它的优点包括泛化能力强、能够处理非线性问题、对数据规模和分布不敏感等。
然而,它的计算复杂度较高,需要使用高效的优化算法进行求解,同时也需要仔细地选择合适的参数以避免过拟合和欠拟合等问题。

【scikit-learn基础】--『监督学习』之 支持向量机回归的更多相关文章

  1. Python基础『一』

    内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...

  2. Python基础『二』

    目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...

  3. 『cs231n』计算机视觉基础

    线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...

  4. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  5. [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装

    [原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...

  6. 『TensorFlow』专题汇总

    TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...

  7. 『TensorFlow』批处理类

    『教程』Batch Normalization 层介绍 基础知识 下面有莫凡的对于批处理的解释: fc_mean,fc_var = tf.nn.moments( Wx_plus_b, axes=[0] ...

  8. 『TensorFlow』梯度优化相关

    tf.trainable_variables可以得到整个模型中所有trainable=True的Variable,也是自由处理梯度的基础 基础梯度操作方法: tf.gradients 用来计算导数.该 ...

  9. 『TensorFlow』模型保存和载入方法汇总

    『TensorFlow』第七弹_保存&载入会话_霸王回马 一.TensorFlow常规模型加载方法 保存模型 tf.train.Saver()类,.save(sess, ckpt文件目录)方法 ...

  10. 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支

    下图Github地址:Mask_RCNN       Mask_RCNN_KeyPoints『计算机视觉』Mask-RCNN_论文学习『计算机视觉』Mask-RCNN_项目文档翻译『计算机视觉』Mas ...

随机推荐

  1. 【逆向专题】【危!!!刑】(一)使用c#+Win32Api实现进程注入到wechat

    引言 自从上篇使用Flaui实现微信自动化之后,这段时间便一直在瞎研究微信这方面,目前破解了Window微信的本地的Sqlite数据库,使用Openssl,以及Win32Api来获取解密密钥,今天作为 ...

  2. Ds100p -「数据结构百题」51~60

    纪念 数据结构一百题50题了呢,该过半周年啦~~~~ LYC和WGY半年的努力让这个几乎玩笑一般的系列到了现在. 今后也请多多关照啦. 祝愿dp100p早日过半 51.CF1000F One Occu ...

  3. Ds100p -「数据结构百题」11~20

    11.P3203 [HNOI2010]弹飞绵羊 某天,\(Lostmonkey\) 发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏. 游戏一开始,\(Lostmonkey ...

  4. 12 款最棒 Vue 开源 UI 库

    文章目录 Element Plus - 经典中的经典,全面支持 Vue 3 TDesign Vue - 鹅厂优质 UI 组件,配套工具完满,设计工整,文档清晰 ArcoDesign Vue- 字节优质 ...

  5. 前端三件套系例之JS——JavaScript内置方法

    文章目录 1.Number 1-1 属性 1-2 方法 2.String 2-1 属性 2-2 方法 2-3 代码 3Array 3-1 创建数组 3-2 数组特点 3-3 数组的遍历(迭代) 34 ...

  6. 基本操作:vscode快捷键

      1.复制,剪切 补选中具体内容的话,光标放在这一行的任何位置,输入Ctrl+C,就表示已经复制这一行了:直接Ctrl+V可以粘贴: 截切也一样:光标放在这一行的任何位置,输入Ctrl+X,就表示已 ...

  7. CSS 还原拉斯维加斯球数字动画

    我的小册 <CSS 技术揭秘与实战通关>上线了,想了解更多有趣.进阶.系统化的 CSS 内容,可以猛击 - LINK. 最近大家刷抖音,是否有刷到拉斯维加斯的新地标 「Sphere」: 场 ...

  8. 轻松合并Excel工作表:Java批量操作优化技巧

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在Excel中设计表单时,我们经常需要对收集的信息进行统 ...

  9. 『STAOI』G - Round 2 半个游记

    很刺激. 2023.3.2 23:17 第一次过审. 2023.3.5 00:02 第一次打回. 原因是背锅人的链接又双叒叕挂错了((( 2023.3.6 21:20 第二次过审. 2023.3.8 ...

  10. http协议与apache

    http协议与apache 1.httpd协议 两台主机通信需要socket文件  yum insatll -y nc  ​  [root@localhost ~]#nc -l 8000  #主机1 ...