这是我第一次构建模型并对交叉验证进行编码,我在不使用插入符号包的情况下进行此操作,因此遇到了一些麻烦。不太确定我做错了什么,但这是我的代码。
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”。
不确定我的代码是否正在执行我打算做的事情-交叉验证,或者我做错了什么。
感谢您的浏览,任何建议/建议都将不胜感激。谢谢!