原文链接:http://tecdat.cn/?p=23305
在这篇文章中,我将展现如何应用R语言来进行反对向量回归SVR。
咱们将首先做一个简略的线性回归,而后转向反对向量回归,这样你就能够看到两者在雷同数据下的体现。
一个简略的数据集
首先,咱们将应用这个简略的数据集。
正如你所看到的,在咱们的两个变量X和Y之间仿佛存在某种关系,看起来咱们能够拟合出一条在每个点左近通过的直线。
咱们用R语言来做吧!
第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反对向量回归的介绍。你能够查看原文失去本教程的源代码。
最受欢迎的见解
1.R语言多元Logistic逻辑回归 利用案例
2.面板平滑转移回归(PSTR)剖析案例实现
3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)
4.R语言泊松Poisson回归模型剖析案例
5.R语言混合效应逻辑回归Logistic模型剖析肺癌
6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现
7.R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
8.python用线性回归预测股票价格
9.R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测