【scikit-learn基础】--『监督学习』之 支持向量机回归
在机器学习中,支持向量机(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
的包括:
- 模型函数:\(f(x) = w^Tx +b\)
- 模型上下边缘分别为:\(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
的主要参数包括:
- kernel:核函数类型,可以选择线性('
linear
')、多项式('poly
')、径向基('rbf
')、sigmoid('sigmoid
')等。 - degree:多项式核函数的度,仅当
kernel='poly'
时有效。 - C:惩罚参数,控制对超出间隔的样本的惩罚力度。C值越大,对超出间隔的样本的惩罚力度越大;C值越小,模型越有可能出现过度拟合。
- epsilon:定义间隔的容忍度,
epsilon
越大,间隔越大。 - gamma:定义了核函数的系数,
gamma
越大,核函数的形状越窄,对数据的影响越小。 - tol:定义了优化算法的容忍度,
tol
越大,算法越容易接受较差的解。 - 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基础】--『监督学习』之 支持向量机回归的更多相关文章
- Python基础『一』
内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...
- Python基础『二』
目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...
- 『cs231n』计算机视觉基础
线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- [原创] 【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 ...
- 『TensorFlow』专题汇总
TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...
- 『TensorFlow』批处理类
『教程』Batch Normalization 层介绍 基础知识 下面有莫凡的对于批处理的解释: fc_mean,fc_var = tf.nn.moments( Wx_plus_b, axes=[0] ...
- 『TensorFlow』梯度优化相关
tf.trainable_variables可以得到整个模型中所有trainable=True的Variable,也是自由处理梯度的基础 基础梯度操作方法: tf.gradients 用来计算导数.该 ...
- 『TensorFlow』模型保存和载入方法汇总
『TensorFlow』第七弹_保存&载入会话_霸王回马 一.TensorFlow常规模型加载方法 保存模型 tf.train.Saver()类,.save(sess, ckpt文件目录)方法 ...
- 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支
下图Github地址:Mask_RCNN Mask_RCNN_KeyPoints『计算机视觉』Mask-RCNN_论文学习『计算机视觉』Mask-RCNN_项目文档翻译『计算机视觉』Mas ...
随机推荐
- salesforce零基础学习(一百三十一)Validation 一次的bypass设计
本篇参考: https://admin.salesforce.com/blog/2022/how-i-solved-it-bypass-validation-rules-in-flows 背景:作为系 ...
- 卷积导向快速傅里叶变换(FFT/NTT)教程
1 Forewords 卷积,但不止卷积 - FFT 漫谈 先有 FT,再有 DFT,才有 FFT 时频转换是最初的用途 发现单位根优秀性质,James Cooley, John Tukey 发明现代 ...
- Termius for macOS or Windows Download ssh
mac电脑 苹果系统 window 系统 链接 服务器,访问 ecs ,ssh链接 工具 下载地址:http://pgyd.online/?website/53.html Termius for ...
- Flink测试利器之DataGen初探
什么是 Flinksql Flink SQL 是基于 Apache Calcite 的 SQL 解析器和优化器构建的,支持ANSI SQL 标准,允许使用标准的 SQL 语句来处理流式和批处理数据.通 ...
- 算法修养--广度优先搜索BFS
广度优先算法(BFS) 广度优先算法(Breadth-First Search)是在图和树领域的搜索方法,其核心思想是从一个起始点开始,访问其所有的临近节点,然后再按照相同的方式访问这些临近节点的节点 ...
- js数据结构--集合
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- SQL基础应用
SQL基础应用 更多详细内容请查阅:https://www.jianshu.com/p/08c4b78402ff 1.SQL介绍 结构化查询语言 5.7 以后符合SQL92严格模式 通过sql_mod ...
- TypeScript学习小结:基础使用
TypeScript学习小结:基础使用 某册子买了两年多了,到最近才开始学习TypeScript,拖延症的严重症状了:不过我还是深信人做一件事是需要一个契机的. 学完之后整体感受是:TypeScrip ...
- 使用js写一个音乐音谱图
我们经常看到在听乐音的时候,会有音谱图随着音乐的节奏不断变化给人视觉上的享受,那么我们通过js来实现以下这个效果,下面是简单的效果图 首先我们需要有一个绘制音频的函数 function draw() ...
- 嵌入式linux主机通过分区镜像生成固件,DD备份分区后打包成固件,px30刷机教程 ,rockchip刷机教程
我这边有一个工控路由器因为刷机变砖了,网上下载不到固件,自己暂时还没有搞过编译.我找到了同型号的路由器,把它的系统制作成镜像. 具体操作分为三步: 第一步,直接用DD命令备份了几个分区,分区我暂时还不 ...