Средняя ошибка изменяется слишком сильно во время перекрестной проверки (R) - PullRequest
0 голосов
/ 13 сентября 2018

Это мой первый раз, когда я создаю модель и кодирую перекрестную проверку, я делаю это без использования пакета каретки и столкнулся с некоторыми сложностями. Не уверен, что делаю что-то не так, но вот мои коды.

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) слишком сильно меняется при каждом запуске моей перекрестной проверки. Например. 1-й пробег:

> 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

2й прогон:

> 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".

Не уверен, что мои коды выполняют то, что я намеревался - перекрестную проверку, или я могу делать что-то не так.

Спасибо за просмотр, любые рекомендации / советы с благодарностью. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...