使用confusioMatrix时如何解决“数据不能有比参考更多的级别”错误?

问题描述 投票:0回答:3

我正在使用 R 编程。 我将数据分为训练和测试以预测准确性。

这是我的代码:

library("tree")
credit<-read.csv("C:/Users/Administrator/Desktop/german_credit (2).csv")

library("caret")
set.seed(1000)

intrain<-createDataPartition(y=credit$Creditability,p=0.7,list=FALSE)
train<-credit[intrain, ]
test<-credit[-intrain, ]

treemod<-tree(Creditability~. , data=train)
plot(treemod)
text(treemod)

cv.trees<-cv.tree(treemod,FUN=prune.tree)
plot(cv.trees)

prune.trees<-prune.tree(treemod,best=3)
plot(prune.trees)
text(prune.trees,pretty=0)

install.packages("e1071")
library("e1071")
treepred<-predict(prune.trees, newdata=test)

confusionMatrix(treepred, test$Creditability)

confusionMatrix
中出现以下错误消息:

confusionMatrix.default(rpartpred, test$Creditability) 中的错误:数据的级别不能多于参考级别

信用数据可以在此网站下载。
http://freakonometrics.free.fr/german_credit.csv

r tree decision-tree r-caret
3个回答
2
投票

如果仔细查看绘图,您会发现您正在训练回归树而不是分类树。

如果您在读入数据后运行

credit$Creditability <- as.factor(credit$Creditability)
并在预测函数中使用
type = "class"
,您的代码应该可以工作。

代码:

credit <- read.csv("http://freakonometrics.free.fr/german_credit.csv" )

credit$Creditability <- as.factor(credit$Creditability)

library(caret)
library(tree)
library(e1071)

set.seed(1000)
intrain <- createDataPartition(y = credit$Creditability, p = 0.7, list = FALSE)
train <- credit[intrain, ]
test <- credit[-intrain, ]

treemod <- tree(Creditability ~ ., data = train, )

cv.trees <- cv.tree(treemod, FUN = prune.tree)
plot(cv.trees)

prune.trees <- prune.tree(treemod, best = 3)
plot(prune.trees)
text(prune.trees, pretty = 0)

treepred <- predict(prune.trees, newdata = test, type = "class")
confusionMatrix(treepred, test$Creditability)

2
投票

我在分类时也遇到了同样的问题。事实证明,特定组中的观察值为零,因此我收到错误“数据不能具有比参考更多的水平”。

确保测试集中的所有组都出现在训练集中。


0
投票

如果模型正确地将类别预测为“1”和“0”,或者模型无法收敛,也会发生这种情况。因此无法创建混淆矩阵。

library(caret)

pred <- factor(c(0, 1, 1, 0))
actual <- factor(c(1,1,1,1))

运行混淆矩阵

cx = caret::confusionMatrix(data = pred, reference = actual)
Error in confusionMatrix.default(data = pred, reference = actual) : the data cannot have more levels than the reference
© www.soinside.com 2019 - 2024. All rights reserved.