首页 > 其他分享 >【scikit-learn基础】--『监督学习』之 支持向量机回归

【scikit-learn基础】--『监督学习』之 支持向量机回归

时间:2023-12-31 22:24:10浏览次数:39  
标签:SVM -- 回归 scikit 算法 learn test SVR 向量

在机器学习中,支持向量机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)的基本思想是通过构建一个分类器,将输入数据映射到高维空间中,使得数据在高维空间中更加线性可分,从而得到一个最优的回归模型。

微信图片_20231026001212.png
如上图所示,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算法是一种非常有效的机器学习算法,可以用于解决各种回归问题。
它的优点包括泛化能力强、能够处理非线性问题、对数据规模和分布不敏感等。
然而,它的计算复杂度较高,需要使用高效的优化算法进行求解,同时也需要仔细地选择合适的参数以避免过拟合和欠拟合等问题。

标签:SVM,--,回归,scikit,算法,learn,test,SVR,向量
From: https://www.cnblogs.com/wang_yb/p/17938132

相关文章

  • 代码随想录 小结01 数组
    数组篇一共有五个题目第一题二分查找值得注意的是,要自己想好区间的边界到底是写左闭右开还是左闭右闭根据边界不同while的条件和左右指针的移动会有差别目前我的习惯是写左闭右开还是固定一下习惯比较好第二题是实现数组类的erase()使用快慢指针可以做到在数组原地进......
  • 浅谈一类状态转移依赖邻项的排列计数问题 - 连续段 dp
    UPD2023.12.31:失手把原来的博文删掉了,这篇是补档。引入在一类序列计数问题中,状态转移的过程可能与相邻的已插入元素的具体信息相关(e.g.插入一个新元素时,需要知道与其插入位置相邻的两个元素的值是多少,才可进行状态转移,如「JOIOpen2016」摩天大楼)。这类问题通常的特点是,如......
  • 10.基于模型的测试方法 Model-based Testing
    Model-basedTesting介绍 Model-basedTestingisanapplicationofmodel-baseddesignfordesigningandoptionallyalsoexecutingartifactstoperformsoftwaretestingorsystemtesting.Modelscanbeusedtorepresentthedesiredbehaviorofasystemu......
  • 鲜花 09
    \(17\)是第三个费马素数(\(=2^{2^2}+1\)),也是Miller-Rabin算法常用底数之一,且此底数很强。如果害怕自己过不去就加上这个底数,然后大概率都是对的。现行的几个能完美判断所有\(2^{63}-1\)以内数字的底数中大多数都包含\(17\)。\(17\)是一个素数。神奇的是,去掉首位他还是一个......
  • 2023-2024-1 20231309 《计算机基础与程序设计》第十四周学习总结
    2023-2024-120231309《计算机基础与程序设计》第十四周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十四周作业这个作业的目标自学教材《C语言程序设计》第13章并完成云班课测......
  • jarvisoj_level3_x64
    jarvisoj_level3_x6464位libc泄露漏洞函数中存在溢出使用溢出泄露libc构造payload获得shellrbppadding0x800x8pop_rdiret0x00000000004006b30x1poppop_rsiret0x00000000004006b1write_gotpop_rsielf.got['write']没......
  • wustctf2020_getshell
    wustctf2020_getshellret2shell在vulnerable函数中存在溢出漏洞shell函数中已经预留了后门溢出->跳转到后门函数frompwnimport*context.log_level='debug'elf=ELF('wustctf2020_getshell')io=process('wustctf2020_getshell')payload=b'A�......
  • HL 迷惑行为大赏(2023 CSP-S)
    HL迷惑行为大赏(哈尔滨考点)请注意,下面的****均非原始代码,而是因为不可抗力因素略去了。空文件大赏T1不写人============./HL-S00002/lock/lock.cpp=====================Nodatafound.============./HL-S00007/lock/lock.cpp=====================Nodatafound.......
  • 2023.12.31——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.ERP明日计划:学习......
  • Anaconda入门使用指南--送Python初学者
    打算学习Python来做数据分析的你,是不是在开始时就遇到各种麻烦呢?到底该装Python2呢还是Python3?为什么安装Python时总是出错?怎么安装工具包呢?为什么提示说在安装这个工具前必须先安装一堆其他不明所以的工具?相信大多数Python的初学者们都曾为环境问题而头疼不已,但......