如何解决计算模拟线性回归的 RMSE
我正在尝试计算模拟数据的 RMSE。但是输出给出了 RMSE 的 NaN。下面是我正在使用的代码。
library(caret)
RMSE <- function(x,y) sqrt(mean((x-y)^2))
sim.regression<-function(n.obs=200,coefficients=c(3,1.5,2,0),s.deviation=.1){
n.var=length(coefficients)
M=matrix(0,ncol=n.var,nrow=n.obs)
beta=as.matrix(coefficients)
for (i in 1:n.var){
M[,i]=rnorm(n.obs,1)
}
y=M %*% beta + rnorm(n.obs,s.deviation)
train.data<-y[1:150]
train.data<-data.frame(train.data)
test.data<-y[151:200]
test.data<-data.frame(test.data)
prediction <- predict(lm(y~M),test.data)
RMSE.data<-RMSE(prediction,test.data$y)
return (list(x=M,y=y,coeff=coefficients,RMSE=RMSE.data))
}
set.seed(2000)
sim.regression(100)
解决方法
欢迎来到 SO。代码中几乎没有问题:
- 假设您正在尝试根据“M”学习/预测“y”,则必须将 M 和 y 结合起来制作一个数据框。
- 仅在此之后,您应该将前 150 个拆分为训练,其余拆分为测试。
- 然后您在
train.data
上训练并在test.data
上进行预测 - 此外,由于您已硬编码 [1:150] 和 [150:200] 以进行训练-测试拆分,因此您必须像 sim.regression(200) 一样通过
200
。
以下更正代码:
library(caret)
RMSE <- function(x,y) sqrt(mean((x-y)^2))
sim.regression<-function(n.obs=200,coefficients=c(3,1.5,2,0),s.deviation=.1){
n.var=length(coefficients)
M=matrix(0,ncol=n.var,nrow=n.obs)
beta=as.matrix(coefficients)
for (i in 1:n.var){
M[,i]=rnorm(n.obs,1)
}
y=M %*% beta + rnorm(n.obs,s.deviation)
data<-data.frame(M,y)
train.data <- data[1:150,]
test.data<-data[151:200,]
prediction <- predict(lm(y~.,data=train.data),test.data)
RMSE.data<-RMSE(prediction,test.data$y)
return (list(x=M,y=y,coeff=coefficients,RMSE=RMSE.data))
}
set.seed(2000)
sim.regression(200)
打印:
$RMSE
0.0755869850491716
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。