首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟线性回归的RMSE计算

模拟线性回归的RMSE计算
EN

Stack Overflow用户
提问于 2021-06-18 01:49:35
回答 1查看 151关注 0票数 1

我试图为模拟数据计算RMSE。但是输出给出了RMSE的NaN。下面是我正在使用的代码。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-18 02:36:05

欢迎来到这里。守则中很少有问题:

假设你试图在'M‘的基础上学习/预测'y’,你必须结合M和y并建立一个数据框架。只有在那之后,你才应该分割前150个用于训练和剩下的等待测试。然后你在sim.regression(200).上进行train.data训练和预测,因为你已经硬编码了1:150和150:200用于火车测试拆分,你将不得不通过200,就像在sim.regression(200).中一样。

更正后的代码如下:

代码语言:javascript
复制
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)

指纹:

代码语言:javascript
复制
$RMSE
0.0755869850491716
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68028375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档