我正在使用插入符号包来训练模型" rpart"包;
tr = train(y ~ ., data = trainingDATA, method = "rpart")
数据没有缺失值或NA,但在运行命令时会出现警告消息;
Warning message:
In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, :
There were missing values in resampled performance measures.
有谁知道(或者可以指出我在哪里可以找到答案)这个警告意味着什么?
我知道它告诉我重新采样的性能测量中缺少值 - 但这究竟意味着什么,以及如何出现这样的情况?
顺便说一句,predict()
函数适用于拟合模型,所以这只是我的好奇心。
答案 0 :(得分:22)
没有更多数据,不能确定无疑。
如果这是回归,最可能的情况是树没有找到好的分裂,并使用结果的平均值作为预测变量。这很好,但你不能计算R ^ 2,因为预测的方差是零。
如果分类,很难说。您可以进行重新采样,其中一个结果类的样本为零,因此灵敏度或特异性未定义,因此NA
。
答案 1 :(得分:1)
当模型在某些交叉验证折叠中未收敛时,预测将为零方差,则会发生此错误。结果,无法计算出诸如RMSE或Rsquared之类的指标,因此它们变为NA。 有时,您可以调整一些参数以实现更好的收敛性,例如神经网络库提供了增加阈值的功能,这几乎总是导致收敛。但是,我不确定rpart库。
发生这种情况的另一个原因是您的训练数据中已经有NA。那么显而易见的解决方法是在通过火车之前将它们删除(数据= na.omit(training.data))。
希望会有所启发。
答案 2 :(得分:0)
问题在于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.
根据您的问题,插入符号正在运行该功能,因此请确保您使用超过53个级别修复分类变量。
以前我的问题在哪里撒谎(注意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=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"]
以下是我的修正代码,调整分类变量 zipcode ,您甚至可以将其包装在数字包装中,如下所示: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"]
答案 3 :(得分:0)
将训练数据拟合到单个决策树时,我遇到了相同的错误。但是,一旦我在拆分训练和测试集之前从原始数据中删除了NA值,它就解决了。我猜想当我们拆分并拟合模型时,这是数据的不匹配。 脚步: 1:从原始数据中删除NA。 2:现在分为训练和测试集。 3:现在训练模型,希望它现在可以解决错误。
答案 4 :(得分:0)
在我的情况下,借助于bmc的答案,我发现这是因为结果列为数字(由数据集提供)。将其转换为因数,然后运行train
的 then 成功,没有错误。