2013-12-14 3 views
2

Я пытаюсь вычислить точность с использованием пакета ROCR в R, но результат отличается от того, что я ожидал:Вычислить точность, используя ROCR пакет в R

Предположим, у меня есть предсказание модели (р) и метку (л) следующим образом:

p <- c(0.61, 0.36, 0.43, 0.14, 0.38, 0.24, 0.97, 0.89, 0.78, 0.86) 
l <- c(1,  1, 1, 0, 0,  1, 1, 1, 0,  1) 

И я точность вычисления этого предсказания, используя следующие команды:

library(ROCR) 
pred <- prediction(p, l) 
perf <- performance(pred, "acc") 
max([email protected][[1]]) 

но результат 0,8, который в соответствии с формулой точности (ТР + TN)/(TN + TP + FN + FP) должно быть .6 Я не знаю почему?

ответ

3

Когда вы используете max([email protected][[1]]), он вычисляет максимальную точность при любом возможном отключении для прогнозирования положительного.

В вашем случае оптимальный порог равен p=0.2, при котором вы делаете 2 ошибки (по наблюдениям с прогнозируемыми вероятностями 0,38 и 0,78), обеспечивая максимальную точность 0,8.

Вы можете получить доступ к отсечкам для вашего перфорированного объекта, используя [email protected][[1]].

+0

Благодарим вас за ответ. Как можно получить точность для «0,5» отсечки? Это 'max ([email protected] ​​[[0.5]])?? Кроме того, знаете ли вы, почему нам нужно 'max()' в получении этих данных? – Rhubarb

+0

@ Zhhubarb с ROCR Я бы использовал '[email protected] ​​[[1]] [max (который ([email protected] ​​[[1]]> = 0.5))]'. – josliber

+0

Отлично, поэтому в этом конкретном примере '[email protected]= Inf 0.97 0.89 0.86 0.78 0.61 0.43 0.38 0.36 0.24 0.14' и '[email protected]=0.3 0.4 0.5 0.6 0.5 0.6 0.7 0.6 0.7 0.8 0.7 0.7'. Поэтому ваш код возвращает 'acc' для' cut_off = 0.61' (который является самым маленьким отсечкой более 0,5), это правильно? – Rhubarb

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