在交叉验证(R)期间,平均错误变化太大

时间:2018-09-13 01:55:21

标签: r modeling cross-validation

这是我第一次构建模型并对交叉验证进行编码,我在不使用插入符号包的情况下进行此操作,因此遇到了一些麻烦。不太确定我做错了什么,但这是我的代码。

results_ss <- data
save_ss <- data.frame('MAPE'=numeric() ,'ERROR'=numeric(), stringsAsFactors = FALSE)

cv_ss <- model2[sample(nrow(model2)),]
folds <- cut(seq(1,nrow(cv_ss)),breaks=6, labels = FALSE)
for(i in 1:6){
  testIndexes <- which(folds==i,arr.ind = FALSE)
  testData <- cv_ss[testIndexes, ]
  trainData <- cv_ss[-testIndexes, ]
  model_cv_ss <- lm(trainData$ss ~., data = trainData)
  summary(model_cv_ss)
  pred_cv_ss<-predict(model_cv_ss,testData)
  actual_cv_ss<-testData[,"ss"]

  MAPE_ss = mean(abs((pred_cv_ss - actual_cv_ss)/actual_cv_ss))
  MAPE_ss

  error_ss = abs((pred_cv_ss- actual_cv_ss)/actual_cv_ss)
  error_ss
  save_ss<-rbind(save_ss, new)
  new <- data.frame(MAPE_ss, error_ss)
}
#new <- data.frame(MAPE_ss, error_ss)

#}
#save_ss<- rbind(save_ss, new)
save_ss

avg_error_ss <- mean(MAPE_ss)
avg_error_ss

我面临的并发症: 我的平均值(MAPE_ss)在每次交叉验证运行时变化太大。 例如。 第一次运行:

> save_ls


    MAPE_ls     error_ls
14         Inf 2.238756e-16
25         Inf          Inf
3          Inf 5.888602e-02
15         Inf 5.480931e-01
21         Inf 1.381825e-02
141        Inf 7.835647e-16
251        Inf          Inf
13         Inf 3.796667e-02
20         Inf 4.185511e-01
12  0.11442675 1.933414e-03
9   0.11442675 2.910383e-15
18  0.11442675 1.729375e-01
22  0.11442675 2.828361e-01
7   0.97919468 1.133678e-01
1   0.97919468 6.984919e-15
8   0.97919468 1.901705e+00
16  0.97919468 1.901705e+00
11  0.20252008 7.718281e-03
19  0.20252008 4.862408e-01
23  0.20252008 2.454206e-01
4   0.20252008 7.070067e-02
17  0.06769883 5.755200e-02
2   0.06769883 5.740990e-02
24  0.06769883 9.842351e-02
10  0.06769883 5.740990e-02
> avg_error_ls <- mean(new$MAPE_ls)
> avg_error_ls
[1] 0.1745411

第二次运行:

> save_ss
  MAPE_ss   error_ss
22  0.1332533 0.30476302
7   0.1332533 0.01562500
4   0.1332533 0.09534290
20  0.1332533 0.11728208
41  0.2147877 0.09400744
16  0.2147877 0.12073011
25  0.2147877 0.51196317
1   0.2147877 0.32762999
11  0.2147877 0.01960784
2   0.1769635 0.25806588
6   0.1769635 0.11317021
8   0.1769635 0.06309505
10  0.1769635 0.27352284
13  0.2434999 0.01587302
23  0.2434999 0.77143202
71  0.2434999 0.01562500
19  0.2434999 0.17106974
9   0.2141775 0.23598375
18  0.2141775 0.18249253
12  0.2141775 0.05960335
21  0.2141775 0.37863047
17  0.1313682 0.11551871
15  0.1313682 0.01538462
14  0.1313682 0.08701647
221 0.1313682 0.30755283
> avg_error_ss <- mean(MAPE_ss)
> avg_error_ss
[1] 0.4718972

数据集包含空单元格响应变量(y),我将其替换为“ 0”。

不确定我的代码是否正在执行我打算做的事情-交叉验证,或者我做错了什么。

感谢您的浏览,任何建议/建议都将不胜感激。谢谢!

0 个答案:

没有答案