Это мой первый раз, когда я создаю модель и кодирую перекрестную проверку, я делаю это без использования пакета каретки и столкнулся с некоторыми сложностями. Не уверен, что делаю что-то не так, но вот мои коды.
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".
Не уверен, что мои коды выполняют то, что я намеревался - перекрестную проверку, или я могу делать что-то не так.
Спасибо за просмотр, любые рекомендации / советы с благодарностью. Спасибо!