2016-08-03 41 views
3

Ich verwende R-Programmierung. Ich teilte die Daten als Zug & Test für die Vorhersage Genauigkeit.So lösen Sie "Die Daten können nicht mehr Ebenen haben als die Referenz" Fehler bei der Verwendung von ConfusioMatrix?

Dies ist mein Code:

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) 

Die Nachricht kommt folgende Fehler in confusionMatrix:

Fehler in confusionMatrix.default (rpartpred, test $ Credit): die Daten können nicht mehr Ebenen als Die Referenz

Die Kreditdaten können auf dieser Website heruntergeladen werden.
http://freakonometrics.free.fr/german_credit.csv

+0

Geben Sie bitte alle relevanten Daten in Ihrem Beitrag. Durch die Verknüpfung mit einer externen Ressource ist diese Frage in Punkt, aber vor allem in der Zeit sehr lokalisiert. Simulierter Datensatz ist eine sehr praktische Möglichkeit, zu vermitteln, was mit Ihrem Datensatz passiert. Auf [this page] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) finden Sie Tipps, wie Sie Ihre Daten teilen und den reproduzierbaren Weg codieren können. –

Antwort

1

Wenn Sie sich Ihre Plots genau ansehen, werden Sie sehen, dass Sie einen Regressionsbaum und keinen Klassifizierungsbaum trainieren. Wenn Sie nach dem Einlesen der Daten credit$Creditability <- as.factor(credit$Creditability) ausführen und type = "class" in der Vorhersagefunktion verwenden, sollte Ihr Code funktionieren.

Code:

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) 
+0

Mehr oder weniger sagt der Code dann die Wahrscheinlichkeiten voraus, ob jeder Eintrag "test" zu Klasse "0" und "1" gehört, also muss OP diese vorhergesagten Wahrscheinlichkeiten in vorhergesagte Klassifikationen umwandeln. – Marcel10

+0

sehr, sehr vielen dank !!!!! –