Regressionsbaum Testes mit predict
Moderator: EDi
Regressionsbaum Testes mit predict
Hallo zusammen,
Ich habe mit meinen Daten ein Regressionsbaum gebaut, dabei habe ich vorher die Daten In Lerndaten und Testdaten geteilt. Mit den Irisdaten haben ich das Prinzip hinbekommen, mit meinen Daten aber leider nicht, hier was ich gemacht habe:
Traindata beinhaltet folgende Spalten: a,b,c,d,e
Testdata beinhaltet folgende Spalten: a,b,c,d
wobei a,b,c,d numerische Werte sind (Teilweise mit NA) und e ist True/False
Baum<-rpart(e ~
a+
b+
c+
d)
print(Baum)
plot(Baum,uniform = T,compress = T, branch = 0.6)
text(Baum,all=T,use.n = T, cex=0.6)
#Testen
Vorhergesagt <- predict(Baum,TestData,type = 'class')
Kombination<- data.frame(TestData$EZBflag,Vorhergesagt)
Ich bekomme folgende Fehlermeldung für "Vorhergesagt":
Error in predict.rpart(Baum, TestData, type = "class") :
Invalid prediction for "rpart" object
In addition: Warning message:
'newdata' hat 753 Zeilen , aber die gefundenen Variablen haben 3010 Zeilen
Wie bekomme ich die beiden Fehler weg? Ich verstehe nicht warum warum ies mit den Irisdaten klappt aber mit meinen nicht, selbst wenn ich e von True/False auf Text umstelle "ja"/"Nein"
Beste Grüße
Ich habe mit meinen Daten ein Regressionsbaum gebaut, dabei habe ich vorher die Daten In Lerndaten und Testdaten geteilt. Mit den Irisdaten haben ich das Prinzip hinbekommen, mit meinen Daten aber leider nicht, hier was ich gemacht habe:
Traindata beinhaltet folgende Spalten: a,b,c,d,e
Testdata beinhaltet folgende Spalten: a,b,c,d
wobei a,b,c,d numerische Werte sind (Teilweise mit NA) und e ist True/False
Baum<-rpart(e ~
a+
b+
c+
d)
print(Baum)
plot(Baum,uniform = T,compress = T, branch = 0.6)
text(Baum,all=T,use.n = T, cex=0.6)
#Testen
Vorhergesagt <- predict(Baum,TestData,type = 'class')
Kombination<- data.frame(TestData$EZBflag,Vorhergesagt)
Ich bekomme folgende Fehlermeldung für "Vorhergesagt":
Error in predict.rpart(Baum, TestData, type = "class") :
Invalid prediction for "rpart" object
In addition: Warning message:
'newdata' hat 753 Zeilen , aber die gefundenen Variablen haben 3010 Zeilen
Wie bekomme ich die beiden Fehler weg? Ich verstehe nicht warum warum ies mit den Irisdaten klappt aber mit meinen nicht, selbst wenn ich e von True/False auf Text umstelle "ja"/"Nein"
Beste Grüße
Re: Regressionsbaum Testes mit predict
Hallo Kramer,
es wäre viel einfacher, wenn Du ein reproduzierbares Beispiel einstellen könntest, also einen Trainings- und einen Testdatensatz, beispielsweise als Teil Deiner Originaldaten, gerne auch mit veränderten Zahlen, damit keiner von uns mit Deinen DAten irgendwas anderes anfangen kann als hier zu antworten.
Wenn Du das Englisch verstehst, lies mal hier: https://stackoverflow.com/help/mcve
Eine deutsche Variante davon erstellen wir gerade hier: viewtopic.php?f=20&t=11
LG,
Bernhard
es wäre viel einfacher, wenn Du ein reproduzierbares Beispiel einstellen könntest, also einen Trainings- und einen Testdatensatz, beispielsweise als Teil Deiner Originaldaten, gerne auch mit veränderten Zahlen, damit keiner von uns mit Deinen DAten irgendwas anderes anfangen kann als hier zu antworten.
Wenn Du das Englisch verstehst, lies mal hier: https://stackoverflow.com/help/mcve
Eine deutsche Variante davon erstellen wir gerade hier: viewtopic.php?f=20&t=11
und darüber hinaus wohl auch noch EZBFlag als Zielvariable?Testdata beinhaltet folgende Spalten: a,b,c,d
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Regressionsbaum Testes mit predict
Da hast du wohl recht, ich habe hier mal das ganze mit Beispieldaten:
#Edit: Die Beispieldaten geben nicht immer einen echten Baum aus, einfach ein paar mal probieren bis echte Blätter am Baum entstehen.
Code: Alles auswählen
a<-runif(20,min=-1,max=1)
b<-runif(20,min=100,max=1000)
c<-runif(20,min=10,max=100)
d<-runif(20,min=10,max=100)
e<-c(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE)
Training<- cbind(a,b,c,d,e)
Training<-as.data.frame(Training)
Baum<-rpart(Training$e ~
Training$a+
Training$b+
Training$c+
Training$d)
plot(Baum,uniform = T,compress = T, branch = 0.6)
text(Baum,all=T,use.n = T, cex=0.6)
a<-runif(10,min=-1,max=1)
b<-runif(10,min=100,max=1000)
c<-runif(10,min=10,max=100)
d<-runif(10,min=10,max=100)
e<-c(FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE)
Testen<- cbind(a,b,c,d,e)
Testen<-as.data.frame(Testen)
Vorhergesagt <- predict(Baum,Testen,type = 'class')
#Edit: Die Beispieldaten geben nicht immer einen echten Baum aus, einfach ein paar mal probieren bis echte Blätter am Baum entstehen.
Zuletzt geändert von jogo am Do Nov 15, 2018 3:10 pm, insgesamt 1-mal geändert.
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Re: Regressionsbaum Testes mit predict
Du könntest am Anfang
Code: Alles auswählen
set.seed(...)
Und lies bitte viewtopic.php?f=20&t=29
und formatiere künftige Nachrichten besser
Gruß, Jörg
Re: Regressionsbaum Testes mit predict
So geht es:
Erstmal muss man das Package laden, das fehlt in Deinem Beispiel. Dann verwendest Du ein cbind(). Danach sind aber aus allen TRUE und FALSE 0 und 1 geworden und woher soll rpart dann wissen, dass es einen Klassifikationsbaum und keinen Regressionsbaum rechnen soll? Ein method="class" hilft da. Wenn Du schon alle Daten in einen Dataframe tust, dann kannst Du in rpart auch das Argument data= verwenden, dann stimmen nämlich die Spaltennamen.
Beachte den Unterschied bei den Namen in:
Genau deshalb hat predict dann auch Probleme, die Daten zuzuordnen.
LG,
Bernhard
Code: Alles auswählen
library(rpart)
a<-runif(20,min=-1,max=1);b<-runif(20,min=100,max=1000)
c<-runif(20,min=10,max=100);d<-runif(20,min=10,max=100)
e<-c(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE)
Training <- data.frame(a,b,c,d,e)
Baum <- rpart(e ~ a+b+c+d, data= Training, method="class")
a<-runif(10,min=-1,max=1);b<-runif(10,min=100,max=1000)
c<-runif(10,min=10,max=100);d<-runif(10,min=10,max=100)
e<-c(FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE)
Testen <- data.frame(a,b,c,d,e)
Vorhergesagt <- predict(Baum,Testen, type="class")
Beachte den Unterschied bei den Namen in:
Code: Alles auswählen
print(rpart(e ~ a+b+c+d, data= Training))
print(rpart(Training$e ~ Training$a+Training$b+Training$c+Training$d))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Regressionsbaum Testes mit predict
Nachtrag: Du wirst ja wahrscheinlich noch etwas öfter mit rpart arbeiten und brauchst dann für Dich selbst vielleicht auch ab und zu mal ein reproduzierbares Minimalbeispiel. So z. B. könnte eine Datenerstellung aussehen, die tatsächlich einen Baum mit Blättern erzeugt:
Hier in Code-Tags, mit Seed und Import des erforderlichen Packages:
HTH
Hier in Code-Tags, mit Seed und Import des erforderlichen Packages:
Code: Alles auswählen
set.seed(50)
library(rpart)
a <- runif(500,min=-1,max=1);b<-runif(500,min=100,max=1000)
c <- runif(500,min=10,max=100);d<-runif(500,min=10,max=100)
e <- (a>.5&c<30)|(d>80)
print(table(e))
Daten <-data.frame(a,b,c,d,e)
Training <- Daten[1:300,]
Testen <- Daten[301:500,]
Modell <- rpart(e ~ a+b+c+d, data= Training, method="class")
plot(Modell)
text(Modell)
Vorhergesagt <- predict(Modell, Testen, type="class")
table(Testen$e, Vorhergesagt)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Regressionsbaum Testes mit predict
Super vielen Dank für die Hilfe und alle weiteren Tipps. Klappt jetzt so wie ich es haben möchte