r语言 - 警告消息:使用 rpart 在插入符号 train() 中"missing values in resampled performance measures"



我正在使用插入符号包来训练带有"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()函数与拟合的模型配合得很好,所以这只是我的好奇心。

如果没有更多数据,就不能确定。

如果这是回归,最有可能的情况是树没有找到一个好的分割,并使用结果的平均值作为预测值。这很好,但你不能计算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.

在你的问题的基础上,插入符号正在运行该函数,所以确保你用超过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"]

解决方案

删除所有级别超过53的分类变量

这是我的固定代码,调整了分类变量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"]

当模型在一些交叉验证折叠中没有收敛时,就会发生这种错误——预测得到零方差。因此,RMSE或Rsquare等指标无法计算,因此它们变成了NA。有时你可以调整一些参数以获得更好的收敛性,例如neuralnet库提供了增加阈值的功能,这几乎总是会导致收敛。然而,我不确定rpart图书馆。

发生这种情况的另一个原因是,您的训练数据中已经有NA。然后,显而易见的解决方法是在通过火车之前将其移除(data=na.egnot(training.data))

希望能有所启发。

我在将训练数据拟合到单个决策树时遇到了同样的错误。但是,在训练和测试集中进行拆分之前,一旦我从原始数据中删除NA值,它就得到了解决。我想,当我们拆分并拟合模型时,这是数据不匹配。步骤:1:从原始数据中删除NA。2:现在分为训练和测试两部分。3:现在训练模型,希望它现在能纠正错误。

在我的案例中,在bmc的回答的帮助下,我发现这是因为结果列是数字列(由数据集提供)。将其转换为因子并,然后成功运行train,没有出现任何错误。

我的问题是,我意外地将createDataPartition()(或其好友:createFolds(), createMultiFolds() etc.)与未分为训练和验证的元数据一起使用。

结果是,corss验证列表中的一些索引超过了训练数据。

最新更新