我正在使用插入包来训练带有"rpart"包的模型;
tr = train(y ~ ., data = trainingDATA, method = "rpart")
Run Code Online (Sandbox Code Playgroud)
数据没有缺失值或NA,但在运行命令时会出现警告消息;
Warning message:
In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, :
There were missing values in resampled performance measures.
Run Code Online (Sandbox Code Playgroud)
有谁知道(或者可以指出我在哪里找到答案)这个警告意味着什么?我知道它告诉我重新采样的性能测量中缺少值 - 但这究竟意味着什么,以及如何出现这样的情况?顺便说一下,这个predict() 功能适用于合身的模型,所以这只是我的好奇心.
top*_*epo 25
没有更多数据,没有明确的肯定.
如果这是回归,最可能的情况是树没有找到好的分裂,并使用结果的平均值作为预测.这很好,但由于预测的方差为零,因此无法计算R ^ 2.
如果分类,很难说.你可以有一个重新抽样,其中一个结果类没有样本,因此灵敏度或特异性是不确定的NA.
问题在于 rpart 使用的是基于树的算法,该算法只能处理给定特征中的有限数量的因素。所以你可能有一个变量被设置为超过 53 个类别的因子:
> rf.1 <- randomForest(x = rf.train.2,
+ y = rf.label,
+ ntree = 1000)
Error in randomForest.default(x = rf.train.2, y = rf.label, ntree = 1000) :
Can not handle categorical predictors with more than 53 categories.
Run Code Online (Sandbox Code Playgroud)
在您的问题的基础上,caret 正在运行该函数,因此请确保您修复了超过 53 个级别的分类变量。
这是我之前的问题所在(注意邮政编码是一个因素):
# ------------------------------- #
# RANDOM FOREST WITH CV 10 FOLDS #
# ------------------------------- #
rf.train.2 <- df_train[, c("v1",
"v2",
"v3",
"v4",
"v5",
"v6",
"v7",
"v8",
"zipcode",
"price",
"made_purchase")]
rf.train.2 <- data.frame(v1=as.factor(rf.train.2$v1),
v2=as.factor(rf.train.2$v2),
v3=as.factor(rf.train.2$v3),
v4=as.factor(rf.train.2$v4),
v5=as.factor(rf.train.2$v5),
v6=as.factor(rf.train.2$v6),
v7=as.factor(rf.train.2$v7),
v8=as.factor(rf.train.2$v8),
zipcode=as.factor(rf.train.2$zipcode),
price=rf.train.2$price,
made_purchase=as.factor(rf.train.2$made_purchase))
rf.label <- rf.train.2[,"made_purchase"]
Run Code Online (Sandbox Code Playgroud)
这里是我搞掂的代码,调整分类变量邮编,你甚至可以在有一个数值包装像这样包起来:as.numeric(rf.train.2$zipcode)。
# ------------------------------- #
# RANDOM FOREST WITH CV 10 FOLDS #
# ------------------------------- #
rf.train.2 <- df_train[, c("v1",
"v2",
"v3",
"v4",
"v5",
"v6",
"v7",
"v8",
"zipcode",
"price",
"made_purchase")]
rf.train.2 <- data.frame(v1=as.factor(rf.train.2$v1),
v2=as.factor(rf.train.2$v2),
v3=as.factor(rf.train.2$v3),
v4=as.factor(rf.train.2$v4),
v5=as.factor(rf.train.2$v5),
v6=as.factor(rf.train.2$v6),
v7=as.factor(rf.train.2$v7),
v8=as.factor(rf.train.2$v8),
zipcode=rf.train.2$zipcode,
price=rf.train.2$price,
made_purchase=as.factor(rf.train.2$made_purchase))
rf.label <- rf.train.2[,"made_purchase"]
Run Code Online (Sandbox Code Playgroud)
当模型在某些交叉验证折叠中未收敛时,就会发生此错误,预测的方差为零。因此,像 RMSE 或 Rsquared 这样的指标无法计算,因此它们变成了 NA。有时,您可以调整一些参数以获得更好的收敛性,例如神经网络库提供增加阈值,这几乎总是会导致收敛。然而,我不确定 rpart 库。
发生这种情况的另一个原因是您的训练数据中已经存在 NA。那么显而易见的解决方法是在通过 train(data = na.omit(training.data)) 传递它们之前删除它们。
希望能有所启发。