2017-09-03 10 views
0

ich zwei Konfusionsmatrix für meine logistische Regression meiner Trainingsdaten und meine Testdaten berechnet werden soll:Konfusionsmatrix für logistische Regression in R

logitMod <- glm(LoanStatus_B ~ ., data=train, family=binomial(link="logit")) 

i die Schwelle von vorhergesagter Wahrscheinlichkeit auf 0,5 eingestellt:

confusionMatrix(table(predict(logitMod, type="response") >= 0.5, 
         train$LoanStatus_B == 1)) 

Und der Code unten funktioniert gut für mein Trainingssatz. jedoch, wenn ich das Test-Set verwenden:

confusionMatrix(table(predict(logitMod, type="response") >= 0.5, 
         test$LoanStatus_B == 1)) 

es gab mir einen Fehler von

Error in table(predict(logitMod, type = "response") >= 0.5, test$LoanStatus_B == : all arguments must have the same length 

Warum ist das? Wie kann ich das beheben? Vielen Dank!

+0

müssen Sie den Testdatensatz zu übergeben die Vorhersagefunktion, sonst werden Vorhersagen im Zugdatensatz gemacht. dh 'vorhergesagt (logitMod, newdata = test, type =" response ")' – user20650

+0

Thx es funktioniert! .. –

Antwort

1

Ich denke, es gibt ein Problem mit der Verwendung von Predict, da Sie vergessen haben, die neuen Daten bereitzustellen. Sie können auch die Funktion confusionMatrix aus dem Paket caret verwenden, um Verwirrungsmatrizen zu berechnen und anzuzeigen, aber Sie müssen die Ergebnisse vor diesem Aufruf nicht ablegen.

Hier habe ich ein Spielzeug-Dataset erstellt, das eine repräsentative binäre Zielvariable enthält, und dann habe ich ein Modell ähnlich dem, was Sie getan haben, trainiert.

train <- data.frame(LoanStatus_B = as.numeric(rnorm(100)>0.5), b= rnorm(100), c = rnorm(100), d = rnorm(100)) 
logitMod <- glm(LoanStatus_B ~ ., data=train, family=binomial(link="logit")) 

Nun können Sie die Daten vorhersagen (zum Beispiel Ihres Trainingssatz) und dann confusionMatrix() verwenden, die zwei Argumente nehmen:

  • Ihre Prognosen
  • die beobachteten Klassen

library(caret) 
# Use your model to make predictions, in this example newdata = training set, but replace with your test set  
pdata <- predict(logitMod, newdata = train, type = "response") 

# use caret and compute a confusion matrix 
confusionMatrix(data = as.numeric(pdata>0.5), reference = train$LoanStatus_B) 

Hier sind die Ergebnisse

Confusion Matrix and Statistics 

      Reference 
Prediction 0 1 
     0 66 33 
     1 0 1 

       Accuracy : 0.67    
       95% CI : (0.5688, 0.7608) 
    No Information Rate : 0.66    
    P-Value [Acc > NIR] : 0.4625   
+1

Was macht diese Zeile data = as.numeric (pdata> 0.5) –

+1

Ihre Zielvariable ist entweder 0 oder 1, aber die Vorhersage gibt einen Wert im Bereich von 0 bis 1 zurück. Daher müssen Sie es in Binär konvertieren (Diskretisierung). Sie testen beispielsweise, ob ein Wert größer oder kleiner als 0,5 ist. TRUE wird dann unter Verwendung von as.nmeric in 1 (und FALSE in 0) umgewandelt –

+0

Also ist es der Schwellenwert, richtig? Ich kann es in jede 0-1 Nummer ändern, die ich will –