2016-01-03 3 views
5

У меня очень большой набор данных (ds). Один из его столбцов - Popularity, типа factor ('Высокий'/'Низкий').Оценка статистической модели в R

Я разделил данные на 70% и 30%, чтобы создать обучающий комплект (ds_tr) и тестовый комплект (ds_te).

Я создал следующую модель с использованием логистической регрессии:

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

Затем я создал predict объект (будет делать это снова для ds_te)

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

Я хочу найти значение точности который соответствует пороговому значению отсечки 0,5 и найти значение возврата, соответствующее порогу отсечки 0,5, поэтому я сделал:

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

Результатом является таблица значений многих

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

Как найти конкретные значения точности и отзыва, соответствующие порогом 0,5?

+0

улучшить объяснение и объяснить, как получить желаемое значение. – PereG

ответ

1

Acces слоты объекта производительности (за счет комбинации @ + список)

Мы создаем набор данных со всеми возможными значениями:

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

Вы можете просмотреть все соответствующие значения

probab.cuts 

Если вы хотите selec т запрашиваемых значений, это тривиально сделать:

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

Руководство проверки

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

Спасибо, но у меня все еще есть проблема при попытке оценить модель на тестовом наборе (ds_te), так как y_hat отличается по длине, чем популярность ds_te $. Есть предположения? – user2878881

+0

На самом деле, правильнее оценить модель, используя тестовые данные. Итак, оцените и используйте: «y_hat_test <- pred (mdl, data = ds_te - url, type = 'response») »и вычислить« pred »и« perf »с новыми данными. Наконец, используйте код этого ответа с «ds_te $ popular» и новым «y_hat_test» в функции таблицы. – PereG

Смежные вопросы