Ntlk & Python, построение кривой ROC - PullRequest
2 голосов
/ 19 ноября 2011

Я использую nltk с Python, и я хотел бы построить кривую ROC моего классификатора (Наивного Байеса).Есть ли какая-либо функция для ее построения или мне нужно отслеживать уровень истинного положительного результата и уровень ложного положительного результата?

Было бы замечательно, если бы кто-то указал мне на какой-то код, уже делающий это ...

Спасибо.

1 Ответ

3 голосов
/ 19 ноября 2011

PyROC выглядит достаточно просто: учебник , исходный код

Вот как это будет работать с наивным байесовским классификатором NLTK:

# class labels are 0 and 1
labeled_data = [
    (1, featureset_1),
    (0, featureset_2),
    (1, featureset_3),
    # ...
]

# naive_bayes is your already trained classifier,
# preferrably not on the data you're testing on :)

from pyroc import ROCData

roc_data = ROCData(
    (label, naive_bayes.prob_classify(featureset).prob(1))
    for label, featureset
    in labeled_data
)
roc_data.plot()

Правка:

  • ROC только для двоичных классификаторов.Если у вас есть три класса, вы можете измерить производительность вашего положительного и отрицательного классов по отдельности (считая два других класса как 0, как вы предложили).
  • Библиотека ожидает, что выходные данные решающей функции будут представлены каквторое значение каждого кортежа.Затем он пробует все возможные пороговые значения, например, f (x)> = 0,8 => классифицировать как 1, и строит точку для каждого порогового значения (вот почему вы получаете кривую в конце).Поэтому, если ваш классификатор угадывает класс 0, вы на самом деле хотите, чтобы значение было ближе к нулю.Вот почему я предложил .prob(1)
...