楼主: 我那些年华
12177 22

[问答] SVR 在R语言的实现 [推广有奖]

11
我那些年华 发表于 2017-1-19 09:31:48
jameschin007 发表于 2017-1-18 12:43
站内私信吧
  1. #SVR模型回归
  2. dat <-  read.csv("C:/Users/Administrator/Desktop/阜阳数据.csv") #读取数据
  3. train_sub <- sample(nrow(dat),4/5*nrow(dat))
  4. train_fy1 <- dat[train_sub,] #训练集
  5. test_fy1 <- dat[-train_sub,] #测试集
  6. train_fy <- scale(train_fy1[,3:10]) #标准化
  7. test_fy <- scale(test_fy1[,3:10])   #标准化

  8. library(e1071) #加载e1071分析包
  9. set.seed(1234) #
  10. fy_tunesvm <- tune.svm(train_fy[,1:7],train_fy[,8],gamma=2^(-1:1),cost=2^(2:4)) #选取最优参数
  11. fy_tunesvm #显示参数结果
  12. fy_svm <- svm(train_fy[,1:7],train_fy[,8],gamma=0.5,cost=4,kernel="radial",epsilon=0.001) #进行SVR回归
  13. fy_svm
  14. x <- train_fy[,1:7]
  15. y <- train_fy[,8]
  16. fypred <- predict(fy_svm,x) #预测
  17. plot(y, pch =1)
  18. points(fypred,pch = 2)
  19. legend("topright", c("y", "fypred"),
  20.        pch = c(1, 2), bg ="white")
  21. y_fypre <- cbind(y,fypred)
  22. write.csv(y_fypre,"C:/Users/Administrator/Desktop/y_fypre.csv")#将数据保存到桌面

  23. #test 测试
  24. x1 <- test_fy[,1:7]
  25. y1 <- test_fy[,8]
  26. test_pre <- predict(fy_svm,x1)
  27. plot(y1, pch =1)
  28. points(test_pre,pch = 2)
  29. legend("topright", c("y1", "test_pre"),
  30.        pch = c(1, 2), bg ="white")

  31. y1_testpre <- cbind(y1,test_pre)
  32. write.csv(y1_testpre,"C:/Users/Administrator/Desktop/y1_testpre.csv") #将数据保存到桌面[b][/b]
复制代码

12
我那些年华 发表于 2017-1-19 09:35:15
jameschin007 发表于 2017-1-18 12:43
站内私信吧
这个代码也是参照其他人的写的,有点不明白的地方就是gamma和cost参数这块,还有我们比较 MSE,是比较标准化后的数据,还是原始数据?希望大神能够予以指导呀!!万分感谢。。

13
我那些年华 发表于 2017-1-19 09:39:43
jameschin007 发表于 2017-1-18 12:43
站内私信吧

14
我那些年华 发表于 2017-1-19 09:42:34
jameschin007 发表于 2017-1-18 12:43
站内私信吧
QQ截图20170119093829.png
这个是tune.svm的结果,得到的最优参数。

15
我那些年华 发表于 2017-1-19 09:52:06
jameschin007 发表于 2017-1-18 12:43
站内私信吧
这是原始数据

16
jameschin007 发表于 2017-1-19 13:24:15
我那些年华 发表于 2017-1-19 09:35
这个代码也是参照其他人的写的,有点不明白的地方就是gamma和cost参数这块,还有我们比较 MSE,是比较标准 ...
1. gamma ,Cost 具体含义你看相关教材吧,涉及到SVM的理论,你只要知道这个两个参数越大,会导致过度拟合,不够大,就是拟合不足。  你已经用了自动grid search了, 就已经给你把参数调好了。
2.MSE当然是归一化之后的。  不过我记得额e1071 有个参数是归一化,不需要你提前自己做。

17
我那些年华 发表于 2017-1-19 13:48:15
jameschin007 发表于 2017-1-19 13:24
1. gamma ,Cost 具体含义你看相关教材吧,涉及到SVM的理论,你只要知道这个两个参数越大,会导致过度拟合 ...
好的。。。非常感谢大神!!!

18
jameschin007 发表于 2017-1-19 14:34:01
我那些年华 发表于 2017-1-19 13:48
好的。。。非常感谢大神!!!
再补一句, 做归一化,只对输入参数, MSE是针对预测值的,跟做不做归一化没关系。 仔细看了一下你的代码,你把预测值也做了归一化,这是不对的。

19
我那些年华 发表于 2017-1-19 14:54:03
jameschin007 发表于 2017-1-19 14:34
再补一句, 做归一化,只对输入参数, MSE是针对预测值的,跟做不做归一化没关系。 仔细看了一下你的代码 ...
  1. tune.svm(train_fy[,1:7],train_fy[,8],gamma=2^(-1:1),cost=2^(2:4)) #选取最优参数
复制代码
非常感谢大神的指导!!!!弱弱的在问一句,这一步gamma和cost在选择上有什么要求?是不是也可以换成10:10,1:10之类?

20
jameschin007 发表于 2017-1-19 17:04:52
我那些年华 发表于 2017-1-19 14:54
非常感谢大神的指导!!!!弱弱的在问一句,这一步gamma和cost在选择上有什么要求?是不是也可以换成10: ...
这个必须做grid search,没有别的办法。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 02:59