首页 > 解决方案 > 决策树的 ConfusionMatrix 错误输出 R

问题描述

嗨,我正在使用 R 训练决策树模型。尝试解释混淆矩阵时出现以下错误。

Error: `data` and `reference` should be factors with the same levels.

#######################决策树#####################

set.seed(3033)
intrain <- createDataPartition(y = new_columns$yyes, p= 0.7, list = FALSE)
training <- new_columns[intrain,]
testing <- new_columns[-intrain,]

#check dimensions of train & test set
dim(training); 
dim(testing);

trctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)


set.seed(3333)
dtree_fit <- train(yyes ~., data = training, method = "rpart",
                   parms = list(split = "information"),
                   trControl=trctrl,
                   tuneLength = 10)
dtree_fit

prp(dtree_fit$finalModel, box.palette = "Reds", tweak = 1.2)

testing[1,]
predict(dtree_fit, newdata = testing[1,])

test_pred <- predict(dtree_fit, newdata = testing)
confusionMatrix(test_pred, testing$yyes )  #check accuracy

我的 test_pred 值给出如下结果,

在此处输入图像描述

测试$yyes

在此处输入图像描述

所以我认为问题在于二进制和小数。我怎样才能解决这个问题?

标签: rdecision-tree

解决方案


您正在执行分类任务,但看起来您正在拟合回归树,这就是您在test_pred. 此外,confusionMatrix()从字面上看,想要因素。

yyes您可以通过在拟合模型之前强制转换为一个因素来解决这两个问题。这应该rpart暗示您想要一个分类树,然后您的预测将是具有相同水平的因素。

这是一个可重现的示例。

# Notice the coercion happens before doing anything else.
.iris <- iris %>% mutate(group = as.factor(group))
train = .iris[1:100,]
test = .iris[101:150,]

tree_fit <- train(group ~ . , data = train, method = 'rpart') 
test_pred <- predict(tree_fit, test)
confusionMatrix(test_pred, test$group)

推荐阅读