2016-01-03 18 views
5

Ich habe einen sehr großen Datensatz (ds). Eine ihrer Spalten ist Popularity, vom Typ factor ('High'/'Low').Auswerten eines statistischen Modells in R

Ich teile die Daten auf 70% und 30%, um einen Trainingssatz (ds_tr) und einen Testsatz (ds_te) zu erstellen.

Ich habe das folgende Modell erstellt eine logistische Regression:

mdl <- glm(formula = popularity ~ . -url , family= "binomial", data = ds_tr) 

dann habe ich ein predict Objekt (wird es wieder tun für ds_te)

y_hat = predict(mdl, data = ds_tr - url , type = 'response') 

Ich möchte die Präzision Wert finden was einer Abschaltschwelle von 0,5 entspricht und den Rückrufwert findet, der einer Abschaltschwelle von 0,5 entspricht, also tat ich:

library(ROCR) 
pred <- prediction(y_hat, ds_tr$popularity) 
perf <- performance(pred, "prec", "rec") 

Das Ergebnis ist eine Tabelle mit vielen Werten

str(perf) 

Formal class 'performance' [package "ROCR"] with 6 slots 
    [email protected] x.name  : chr "Recall" 
    [email protected] y.name  : chr "Precision" 
    [email protected] alpha.name : chr "Cutoff" 
    [email protected] x.values :List of 1 
    .. ..$ : num [1:27779] 0.00 7.71e-05 7.71e-05 1.54e-04 2.31e-04 ... 
    [email protected] y.values :List of 1 
    .. ..$ : num [1:27779] NaN 1 0.5 0.667 0.75 ... 
    [email protected] alpha.values:List of 1 
    .. ..$ : num [1:27779] Inf 0.97 0.895 0.89 0.887 ... 

Wie kann ich die spezifischen Precision und Recall-Werte entsprechend einem Cutoff-Schwellwert von 0,5 finden?

+0

die Erklärung verbessern und erklären, wie man den gewünschten Wert zu erhalten. – PereG

Antwort

1

Acces die Schlitze der Leistungsobjekt (durch die Kombination von @ + Liste)

Wir haben einen Datensatz mit allen möglichen Werten erstellen:

probab.cuts <- data.frame([email protected][[1]], [email protected][[1]], [email protected][[1]]) 

Sie können sehen alle zugehörigen Werte

probab.cuts 

Wenn Sie möchten selec t die angeforderten Werte, ist es trivial zu tun:

tail(probab.cuts[probab.cuts$cut > 0.5,], 1) 

Handbuch Check

tab <- table(ds_tr$popularity, y_hat > 0.5) 
tab[4]/(tab[4]+tab[2]) # recall 
tab[4]/(tab[4]+tab[3]) # precision 
+0

Danke, aber ich habe immer noch ein Problem beim Versuch, das Modell auf dem Test-Set (ds_te) zu bewerten, da y_hat in der Länge dann ds_te $ Popularität ist. irgendwelche Gedanken? – user2878881

+0

In der Tat ist es richtiger, das Modell zu bewerten, verwenden Sie die Testdaten. Also, schätzen und verwenden: "y_hat_test <- vorhersage (mdl, data = ds_te - url, type = 'response')" und berechne "pred" und "perf" mit den neuen Daten. Zum Schluss verwenden Sie den Code dieser Antwort mit "ds_te $ popularity" und den neuen "y_hat_test" in der Tabellenfunktion. – PereG