2016-01-03 45 views
5

Mam bardzo duży zestaw danych (ds). Jedna z jego kolumn to Popularity, typu factor ("Wysoka"/"Niska").Ocena modelu statystycznego w R

Rozdzielam dane na 70% i 30%, aby utworzyć zestaw treningowy (ds_tr) i zestaw testowy (ds_te).

Stworzyłem następujący model przy użyciu regresji logistycznej:

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

potem stworzył predict obiektu (zrobi to ponownie ds_te)

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

Chcę znaleźć wartość precyzji co odpowiada progowi odcięcia 0.5 i znaleźć wartość przywołania, która odpowiada progowi odcięcia 0,5, więc wykonałem:

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

Rezultatem jest tabela z wielu wartości

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 ... 

Jak znajdę konkretne wartości dokładności i przypomnieć odpowiadające progu odcięcia 0,5?

+0

Poprawa wyjaśnienia i wyjaśnić w jaki sposób uzyskać wymaganą wartość. – PereG

Odpowiedz

1

Acces szczelinach obiektu wydajności (poprzez połączenie @ + liście)

Tworzymy zbiór danych ze wszystkich możliwych wartości:

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

można oglądać wszystkie przynależne wartości

probab.cuts 

Jeśli chcesz selec t żądane wartości, jest trywialny zrobić:

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

Instrukcja 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

Dzięki, ale nadal mam problem przy próbie oceny modelu na zestawie testowym (ds_te), ponieważ y_hat ma inną długość niż popularność ds_te $. jakieś pomysły? – user2878881

+0

W rzeczywistości bardziej prawidłowa jest ocena modelu z wykorzystaniem danych testowych. Tak więc, oszacuj i używaj: "y_hat_test <- predict (mdl, data = ds_te - url, type = 'response')" i oblicz "pred" i "perf" z nowymi danymi. Na koniec użyj kodu tej odpowiedzi z "popularnością ds_te $" i nowym "y_hat_test" w funkcji tabeli. – PereG