首页 > 其他分享 >R语言进行支持向量机回归SVR和网格搜索超参数优化|附代码数据

R语言进行支持向量机回归SVR和网格搜索超参数优化|附代码数据

时间:2023-08-15 20:23:32浏览次数:49  
标签:RMSE 模型 网格 神经网络 回归 SVR 我们 向量

全文链接:http://tecdat.cn/?p=23305

最近我们被客户要求撰写关于支持向量机回归的研究报告,包括一些图形和统计输出。

在这篇文章中,我将展示如何使用R语言来进行支持向量回归SVR

我们将首先做一个简单的线性回归,然后转向支持向量回归,这样你就可以看到两者在相同数据下的表现。

一个简单的数据集

首先,我们将使用这个简单的数据集。

图片

正如你所看到的,在我们的两个变量X和Y之间似乎存在某种关系,看起来我们可以拟合出一条在每个点附近通过的直线。

我们用R语言来做吧!


点击标题查阅往期内容

图片

Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

图片

左右滑动查看更多

图片

01

图片

02

图片

03

图片

04

图片

第1步:在R中进行简单的线性回归

下面是CSV格式的相同数据,我把它保存在regression.csv文件中。

图片

我们现在可以用R来显示数据并拟合直线。

   
# 从csv文件中加载数据

dataDirectory <- "D:/" #把你自己的文件夹放在这里

data <- read.csv(paste(dataDirectory, 'data.csv', sep=""), header = TRUE)



# 绘制数据

plot(data, pch=16)



# 创建一个线性回归模型

model <- lm(Y ~ X, data)



# 添加拟合线

abline(model)

上面的代码显示以下图表:

图片

第2步:我们的回归效果怎么样?

为了能够比较线性回归和支持向量回归,我们首先需要一种方法来衡量它的效果。

为了做到这一点,我们改变一下代码,使模型做出每一个预测可视化

   
# 对每个X做一个预测

pred <- predict(model, data)



# 显示预测结果

points(X, pred)

产生了以下图表。

图片

对于每个数据点Xi,模型都会做出预测Y^i,在图上显示为一个红色的十字。与之前的图表唯一不同的是,这些点没有相互连接。

为了衡量我们的模型效果,我们计算它的误差有多大。

我们可以将每个Yi值与相关的预测值Y^i进行比较,看看它们之间有多大的差异。

请注意,表达式Y^i-Yi是误差,如果我们做出一个完美的预测,Y^i将等于Yi,误差为零。

如果我们对每个数据点都这样做,并将误差相加,我们将得到误差之和,如果我们取平均值,我们将得到平均平方误差(MSE)。

图片

在机器学习中,衡量误差的一个常见方法是使用均方根误差(RMSE),所以我们将使用它来代替。

为了计算RMSE,我们取其平方根,我们得到RMSE

图片

使用R,我们可以得到以下代码来计算RMSE

   
rmse <- function(error)

{

  sqrt(mean(error^2))

}

图片

我们现在知道,我们的线性回归模型的RMSE是5.70。让我们尝试用SVR来改善它吧!

第3步:支持向量回归

用R创建一个SVR模型。

下面是用支持向量回归进行预测的代码。

   
model <- svm(Y ~ X , data)

如你所见,它看起来很像线性回归的代码。请注意,我们调用了svm函数(而不是svr!),这是因为这个函数也可以用来用支持向量机进行分类。如果该函数检测到数据是分类的(如果变量是R中的一个因子),它将自动选择SVM。

代码画出了下面的图。

图片

这一次的预测结果更接近于真实的数值 ! 让我们计算一下支持向量回归模型的RMSE。

   
# 这次svrModel$residuals与data$Y - predictedY不一样。

#所以我们这样计算误差


svrPredictionRMSE

图片

正如预期的那样,RMSE更好了,现在是3.15,而之前是5.70。

但我们能做得更好吗?

第四步:调整你的支持向量回归模型

为了提高支持向量回归的性能,我们将需要为模型选择最佳参数。

在我们之前的例子中,我们进行了ε-回归,我们没有为ε(ϵ)设置任何值,但它的默认值是0.1。 还有一个成本参数,我们可以改变它以避免过度拟合。

选择这些参数的过程被称为超参数优化,或模型选择。

标准的方法是进行网格搜索。这意味着我们将为ϵ和成本的不同组合训练大量的模型,并选择最好的一个。

   
# 进行网格搜索

tuneResultranges = list(epsilon = seq(0,1,0.1), cost = 2^(2:9))


# 绘制调参图

plot(Result)

在上面的代码中有两个重要的点。

  • 我们使用tune方法训练模型,ϵ=0,0.1,0.2,...,1和cost=22,23,24,...,29这意味着它将训练88个模型(这可能需要很长一段时间
  • tuneResult返回MSE,别忘了在与我们之前的模型进行比较之前将其转换为RMSE。

最后一行绘制了网格搜索的结果。

图片

在这张图上,我们可以看到,区域颜色越深,我们的模型就越好(因为RMSE在深色区域更接近于零)。

这意味着我们可以在更窄的范围内尝试另一个网格搜索,我们将尝试在0和0.2之间的ϵ值。目前看来,成本值并没有产生影响,所以我们将保持原样,看看是否有变化。

   
rangelist(epsilo = seq(0,0.2,0.01), cost = 2^(2:9))

我们用这一小段代码训练了不同的168模型。

当我们放大暗区域时,我们可以看到有几个较暗的斑块。

从图中可以看出,C在200到300之间,ϵ在0.08到0.09之间的模型误差较小。

图片希望对我们来说,我们不必用眼睛去选择最好的模型,R让我们非常容易地得到它,并用来进行预测。

   
# 这个值在你的电脑上可能是不同的

# 因为调参方法会随机调整数据

tunedModelRMSE <- rmse(error)

图片

我们再次提高了支持向量回归模型的RMSE !

我们可以把我们的两个模型都可视化。在下图中,第一个SVR模型是红色的,而调整后的SVR模型是蓝色的。

图片

我希望你喜欢这个关于用R支持向量回归的介绍。你可以查看原文得到本教程的源代码。


图片

本文摘选  R语言进行支持向量机回归SVR和网格搜索超参数优化  ,点击“阅读原文”获取全文完整资料。


点击标题查阅往期内容

逻辑回归、随机森林、SVM支持向量机预测心脏病风险数据和模型诊断可视化
R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比较可视化分析声纳数据
R语言量化交易RSI策略:使用支持向量机SVM
基于随机森林、svm、CNN机器学习的风控欺诈识别模型
Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线
基于ARIMA、SVM、随机森林销售的时间序列预测
基于数据挖掘SVM模型的pre-incident事故预防预测
R语言用rle,svm和rpart决策树进行时间序列预测Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据
随机森林优化贝叶斯预测分析汽车燃油经济性
Python基于粒子群优化的投资组合优化研究
matlab使用贝叶斯优化的深度学习:卷积神经网络CNN
R语言深度学习:用keras神经网络回归模型预测时间序列数据
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
MATLAB中用BP神经网络预测人体脂肪百分比数据
Python中用PyTorch机器学习神经网络分类预测银行客户流失模型
R语言实现CNN(卷积神经网络)模型进行回归数据分析
SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型
【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析
Python使用神经网络进行简单文本分类
R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
R语言基于递归神经网络RNN的温度时间序列预测
R语言神经网络模型预测车辆数量时间序列
R语言中的BP神经网络模型分析学生成绩
matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类
R语言实现拟合神经网络预测和结果可视化
用R语言实现神经网络预测股票实例
使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译
用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

标签:RMSE,模型,网格,神经网络,回归,SVR,我们,向量
From: https://www.cnblogs.com/tecdat/p/17632334.html

相关文章

  • 虹科干货 | 化身向量数据库的Redis Enterprise——快速、准确、高效的非结构化数据
    用户期望在他们遇到的每一个应用程序和网站都有搜索功能。然而,超过80%的商业数据是非结构化的,以文本、图像、音频、视频或其他格式存储。RedisEnterprise如何实现矢量相似性搜索呢?答案是,将AI驱动的搜索功能集成到RedisEnterprise中,以实现矢量相似性搜索。 RedisEnterprise如何......
  • 已知两个128维向量,向量格式为list,计算两个向量的余弦相似性
    计算两个向量的余弦相似度可以使用以下公式:余弦相似度=(向量A·向量B)/(||向量A||*||向量B||)其中,向量A·向量B表示向量A和向量B的点积(内积),||向量A||和||向量B||表示向量A和向量B的欧几里德范数(模)。下面是一个示例代码,展示如何计算两个128维向量的余弦相似度:imp......
  • 第七章 测试向量的仿真
    1仿真的基础知识1.1仿真环境TestBench产生测试激励将测试激励施加在待测逻辑上分析待测逻辑结果待测逻辑     1.2仿真算法基于时间的仿真处理连续的时间,效率较低基于事件的仿真处理电路状态发生变化的情况基于周期的仿真处理时钟的边沿不可......
  • 3 字符串向量数组
    当把string对象和子符字面值混在一条语句中使用时,必须确保每个+运算符的两侧的运算对象至少有一个是string用花括号对vector做初始化,不能用下标形式添加元素迭代器,iterator const_iterator两种迭代器类型,如果vector或string对象是常量,只能使用const_iterator。对vect......
  • 【专题一】三角函数,平面向量与复数
    【专题一】三角函数,平面向量与复数这是个人【专题式学习】的第一部分——三角函数,平面向量与复数。之所以把这三个放在一起,是因为它们联系真的很紧密。()三角函数定义考虑一个平面直角坐标系中的点\(P(x,y)\)(\(P\)不与原点重合),角\(\alpha\)的始边为\(x\)轴正半轴,终边为......
  • 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(16):向量和矩阵的
    前言Hello!小伙伴!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python学习经验:扎实基础+多做笔记+多......
  • Stata广义矩量法GMM面板向量自回归PVAR模型选择、估计、Granger因果检验分析投资、收
    原文链接:http://tecdat.cn/?p=24016原文出处:拓端数据部落公众号摘要最近我们被要求撰写关于广义矩量法GMM的研究报告,包括一些图形和统计输出。面板向量自回归(VAR)模型在应用研究中的应用越来越多。虽然专门用于估计时间序列VAR模型的程序通常作为标准功能包含在大多数统计软件......
  • 【线性代数】向量组/矩阵的秩、正交规范化/正交矩阵
    1.向量组的秩极大线性无关组的定义:注意:同一个向量组可能有很多不同的极大线性无关组,但是这些无关组的向量个数一定是一样的。如果一个向量组只包含一个零向量,则它没有极大线性无关组若向量组本身就线性无关,则其极大线性无关组就是其本身。向量组的秩的定义:向量组的极大......
  • 什么是向量数据库
    在计算机科学中,向量数据库是一种专门用于存储和管理向量数据的数据库系统。向量数据库与其他数据库系统的主要区别在于,它使用向量运算来计算数据之间的相似度,而不是基于文本的查询语言。这种计算方式使得向量数据库在处理高维数据和复杂的语义时具有更高的效率和准确性。向量数据......
  • R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型|附代码数据
    原文链接:http://tecdat.cn/?p=9390原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于贝叶斯向量自回归(BVAR)的研究报告,包括一些图形和统计输出。介绍向量自回归(VAR)模型的一般缺点是,估计系数的数量与滞后的数量成比例地增加。因此,随着滞后次数的增加,每个参数可用的信息......