我用 caret 用这段代码训练了一个 mlp 模型。
library(datasets)
library(MASS)
library(caret)
DP = caret::createDataPartition(Boston$medv, p=0.75, list = F)
train = Boston[DP,]
test = Boston[-DP,]
colnames(train) = colnames(Boston)
colnames(test) = colnames(Boston)
mlp = caret::train(medv ~., data = Boston, method = "mlp", trControl = trainControl(method = "cv", number = 3),
tuneGrid = expand.grid(size = 1:3), linOut = T, metric = "RMSE")
Yp = caret::predict.train(mlp, test[,1:13])
我收到此错误消息:
In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures.
请伙计们,我需要了解为什么会出现此错误?
答案 0 :(得分:0)
某些运行的 R 平方值抛出 NA,您可以检查输出:
set.seed(111)
mlp = caret::train(medv ~., data = Boston, method = "mlp",
trControl = trainControl(method = "cv", number = 3),
tuneGrid = expand.grid(size = 1:3), linOut = T, metric = "RMSE")
mlp$results
size RMSE Rsquared MAE RMSESD RsquaredSD MAESD
1 1 9.152376 NaN 6.640184 0.9213123 NA 0.6877405
2 2 14.353732 0.000965434 12.274448 8.3227673 NA 8.6994894
3 3 12.701064 NaN 10.988850 3.2658958 NA 3.6549478
请注意,即使对于有效的模型,您的 Rsquared 也太低了。模型有两个问题,1)你的规模可能太小,2)你没有缩放数据,所以你的预测只给你一个值,而 R2 完全是无稽之谈:
Yp = caret::predict.train(mlp, test[,1:13])
table(Yp)
Yp
20.0358009338379
125
尝试这样的事情:
mlp = caret::train(medv ~., data = Boston, method = "mlp",
trControl = trainControl(method = "cv", number = 3),
preProcess = c("center","scale"),
tuneGrid = expand.grid(size = 3:5), linOut = T, metric = "RMSE")
mlp
Multi-Layer Perceptron
506 samples
13 predictor
Pre-processing: centered (13), scaled (13)
Resampling: Cross-Validated (3 fold)
Summary of sample sizes: 337, 338, 337
Resampling results across tuning parameters:
size RMSE Rsquared MAE
3 7.926669 0.3291762 5.619198
4 6.976707 0.4913297 5.130273
5 6.894459 0.5188481 5.040821