【问题标题】:Calculating RMSE for Simulated Linear Regression计算模拟线性回归的 RMSE
【发布时间】:2021-09-02 18:58:40
【问题描述】:

我正在尝试计算模拟数据的 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,0,0,2,0,0,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,0,1)
  }
  
  y=M %*% beta + rnorm(n.obs,0,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)

【问题讨论】:

  • 尝试在你的函数中逐行运行代码。您也可以使用调试器。您如何构建数据似乎存在几个问题。当该列不存在时,您似乎拥有test.data$y。此外,您的 lm 模型似乎将 M 作为自变量,但您没有将其与 test.data 一起传递,因此您无法做出预测

标签: r machine-learning statistics


【解决方案1】:

欢迎来到 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,0,0,2,0,0,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,0,1)
  }
  
  y=M %*% beta + rnorm(n.obs,0,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

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多