Як ми можемо намалювати криву ROC для дерев рішень?


13

Зазвичай ми не можемо намалювати криву ROC для дискретних класифікаторів, таких як дерева рішень. Я правий? Чи є можливість намалювати криву ROC для Dtrees?


1
Ви можете знайти свою відповідь тут: stats.stackexchange.com/questions/105501/…
rapaio

[Оцінка моделі моделі рішень для "навчального набору" проти "тестового набору" в R] [1] [1]: stats.stackexchange.com/questions/49416/… Свою відповідь можна знайти тут.
Санграм

@rapaio Вибачте, що ваше посилання показує криву ROC, щоб знайти поріг у класифікаторі, який дає вихід від 1 до 0 (безперервне значення).
DataMiner

@Sangram Це рішення в R, але я хочу просто зрозуміти, як це працює.
DataMiner

Відповіді:


15

Якщо ваш класифікатор дає лише результати факторів (лише мітки), без балів, ви все одно можете намалювати криву ROC. Однак ця крива ROC - лише точка. Враховуючи простір ROC, ці точки є , де - хибнопозитивна ставка та - справжня позитивна швидкість.(x,y)=(FPR,TPR)FPRTPR

Дізнайтеся більше про те, як це обчислюється на сторінці Вікіпедії .

Ви можете розширити цю точку, щоб виглядати як крива ROC, прорисувавши лінію від до точки, а звідти до . Таким чином, у вас крива.(0,0)(1,1)

Однак для дерева рішень легко поширитись від виводу мітки до числового виводу. Зауважте, що коли ви прогнозуєте з деревом рішення, ви спускаєтеся з кореневого вузла до вузла листів, де ви прогнозуєте з класом більшості. Якщо замість цього класу ви повернете пропорцію класів у цьому вузлі аркуша, ви отримаєте бал для кожного класу. Припустимо, у вас є два класи і , а у вашому аркуші листя 10 екземплярів з і 5 екземплярів з , ви можете повернути вектор балів :TFTF(scoreT,scoreF)=(countTcountT+countF,countFcountT+countF)=(10/15,5/15)=(0.66,0.33). Слідкуйте за тим, щоб це було справді відзначити правильне бальне правило (це не найкращий оцінювач для ймовірностей), але я вважаю, що краще, ніж нічого, і саме так, як правило, отримують бали для дерев рішень.


13

Для дерева рішень класи все ще прогнозуються з певним рівнем визначеності. Відповідь вже дає @rapaio, але я трохи розгорну її.

Уявіть собі таке дерево рішень (це трохи модифікована версія цього одного )

Приклад дерева рішень

На кожному вузлі є не тільки мітки більшості класів, але й інші, що опинилися у цьому аркуші, тому ми можемо призначити ступінь визначеності тому аркушу, на якому ми прогнозуємо мітку.

Наприклад, розглянемо наступні дані

дані

Запускаємо його і присвоюємо бали результатам, а не фактичним міткам. За допомогою цього ми можемо намалювати криву ROC, як запропоновано тут

крива roc

Мало сенсу використовувати його для налаштування порогового значення (оскільки, звичайно, немає такого порогу, як поріг у деревах рішень), але він все одно може бути використаний для обчислення AUC, який у цьому випадку становить 0,92

Тут використовується код R:

outlook = c('rain', 'overcast', 'rain', 'sunny', 'rain', 
            'rain', 'sunny', 'overcast', 'overcast', 'overcast', 
            'sunny', 'sunny', 'rain', 'rain', 'overcast',
            'sunny', 'overcast', 'overcast', 'sunny', 'sunny',
            'sunny', 'overcast')
humidity = c(79, 74, 80, 60, 65, 79, 60, 74, 77, 80, 
             71, 70, 80, 65, 70, 56, 80, 70, 56, 70,
             71, 77)
windy = c(T, T, F, T, F, T, T, T, T, F, T, F, F, F, T, T, F, T, T, F, T, T)
play = c(F, F, T, F, T, F, F, T, T, T, F, F, T, T, T, T, T, T, F, T, F, T)

game = data.frame(outlook, humidity, windy, play)
game$score = NA

attach(game)
game$score[outlook == 'sunny' & humidity <= 70] = 5/8
game$score[outlook == 'sunny' & humidity > 70] = 1 - 3/4
game$score[outlook == 'overcast'] = 4/5
game$score[outlook == 'rain' & windy == T] = 1 - 2/2
game$score[outlook == 'rain' & windy == F] = 3/3
detach(game)

game$predict = game$score >= 0.5
game$correct = game$predict == game$play

library(ROCR)

pred = prediction(game$score, game$play)
roc = performance(pred, measure="tpr", x.measure="fpr")
plot(roc, col="orange", lwd=2) 
lines(x=c(0, 1), y=c(0, 1), col="red", lwd=2)

auc = performance(pred, 'auc')
slot(auc, 'y.values')
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.