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

119次阅读

共计 3363 个字符,预计需要花费 9 分钟才能阅读完成。

全文链接: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 神经网络分类

正文完
 0