计算模拟线性回归的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,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)

回答:

欢迎来到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)

输出如下:

$RMSE0.0755869850491716

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注