如何解决"数据的级别不能超过参考"使用confusioMatrix时出错?

时间:2016-08-03 11:14:46

标签: r tree decision-tree r-caret

我正在使用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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

我在分类上遇到了同样的问题。事实证明,在特定的组中存在零观测,因此我得到了一个错误:“数据不能具有超过参考的水平”。

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