Крива ROC для дискретних класифікаторів типу SVM: Чому ми все ще називаємо це "кривою"? Це не просто "точка"?


25

У дискусії: як генерувати криву roc для бінарної класифікації , я думаю, що плутанина полягала в тому, що "двійковий класифікатор" (який є будь-яким класифікатором, який розділяє 2 класи) для Ян називається "дискретним класифікатором" (який виробляє дискретні виходи 0/1, як SVM), а не безперервні виходи, такі як ANN або Bayes-класифікатори ... тощо. Отже, дискусія йшла про те, як ROC будується для "бінарних безперервних класифікаторів", і відповідь полягає в тому, що результати сортуються за їхніми балами, оскільки виходи є безперервними, і поріг використовується для отримання кожної точки на кривій ROC.

Моє запитання стосується "бінарних дискретних класифікаторів", таких як SVM, вихідні значення - 0 або 1. Отже, ROC виробляє лише одну точку, а не криву. Я розгублений, чому ми все ще називаємо це кривою? !! Чи можемо ми ще говорити про пороги? Як можна зокрема використовувати пороги в SVM? Як можна обчислити AUC? Чи грає тут перехресне підтвердження?


10
SVM видає реальне значення рішення, а саме підписану відстань до розділюючої гіперплани в просторі функцій. У класифікації мітка присвоюється на основі знаку цього значення рішення. Таким чином , SVMs зробити вихід більше , ніж просто двоичное значення, їх вихід тільки двійкову як пост-обробки крок в класифікації.
Marc Claesen

Відповіді:


15
  • Так, бувають ситуації, коли звичайної кривої роботи приймача неможливо отримати і існує лише одна точка.

  • SVM можна встановити таким чином, щоб вони виводили ймовірності членства в класі. Це було б звичайне значення, для якого буде змінено поріг для отримання кривої роботи приймача .
    Це те, що ви шукаєте?

  • Кроки в ROC зазвичай трапляються з невеликою кількістю тестових випадків, а не з чим-небудь спільним з дискретними варіаціями коваріату (особливо, ви отримуєте ті самі точки, якщо ви вибираєте свої дискретні пороги, так що для кожної нової точки змінюється лише один зразок її призначення).

  • Постійно змінюючи інші (гіпер) параметри моделі, звичайно, виробляються набори пар специфічності / чутливості, які дають інші криві в системі координат FPR; TPR.
    Інтерпретація кривої, звичайно, залежить від того, який варіант породжував криву.

Ось звичайний ROC (тобто запит ймовірностей як вихід) для класу "versicolor" набору даних райдужки:

  • FPR; TPR (γ = 1, C = 1, поріг ймовірності):
    РПЦ

Один і той же тип системи координат, але TPR і FPR як функції параметрів настройки γ і C:

  • FPR; TPR (γ, C = 1, поріг ймовірності = 0,5):
    гамма

  • FPR; TPR (γ = 1, C, поріг ймовірності = 0,5):
    вартість

Ці сюжети мають значення, але сенс рішуче відрізняється від звичайного РПЦ!

Ось код R, який я використав:

svmperf <- function (cost = 1, gamma = 1) {
    model <- svm (Species ~ ., data = iris, probability=TRUE, 
                  cost = cost, gamma = gamma)
    pred <- predict (model, iris, probability=TRUE, decision.values=TRUE)
    prob.versicolor <- attr (pred, "probabilities")[, "versicolor"]

    roc.pred <- prediction (prob.versicolor, iris$Species == "versicolor")
    perf <- performance (roc.pred, "tpr", "fpr")

    data.frame (fpr = perf@x.values [[1]], tpr = perf@y.values [[1]], 
                threshold = perf@alpha.values [[1]], 
                cost = cost, gamma = gamma)
}

df <- data.frame ()
for (cost in -10:10)
  df <- rbind (df, svmperf (cost = 2^cost))
head (df)
plot (df$fpr, df$tpr)

cost.df <- split (df, df$cost)

cost.df <- sapply (cost.df, function (x) {
    i <- approx (x$threshold, seq (nrow (x)), 0.5, method="constant")$y 
    x [i,]
})

cost.df <- as.data.frame (t (cost.df))
plot (cost.df$fpr, cost.df$tpr, type = "l", xlim = 0:1, ylim = 0:1)
points (cost.df$fpr, cost.df$tpr, pch = 20, 
        col = rev(rainbow(nrow (cost.df),start=0, end=4/6)))

df <- data.frame ()
for (gamma in -10:10)
  df <- rbind (df, svmperf (gamma = 2^gamma))
head (df)
plot (df$fpr, df$tpr)

gamma.df <- split (df, df$gamma)

gamma.df <- sapply (gamma.df, function (x) {
     i <- approx (x$threshold, seq (nrow (x)), 0.5, method="constant")$y
     x [i,]
})

gamma.df <- as.data.frame (t (gamma.df))
plot (gamma.df$fpr, gamma.df$tpr, type = "l", xlim = 0:1, ylim = 0:1, lty = 2)
points (gamma.df$fpr, gamma.df$tpr, pch = 20, 
        col = rev(rainbow(nrow (gamma.df),start=0, end=4/6)))

roc.df <- subset (df, cost == 1 & gamma == 1)
plot (roc.df$fpr, roc.df$tpr, type = "l", xlim = 0:1, ylim = 0:1)
points (roc.df$fpr, roc.df$tpr, pch = 20, 
        col = rev(rainbow(nrow (roc.df),start=0, end=4/6)))

1
Це дуже зрозуміло, спасибі. У мене була така ідея, що варіювання b - це як переміщення гіперплана і, таким чином, різний (TPR, FPR)! але з класифікатором SVM зміщення b вивчається, тому, здається, це найкращий параметр? ні ?, якщо це так, немає необхідності проводити аналіз ROC ?, ні?
Абдельхак Махмуді

@AbdelhakMahmoudi: Я думаю, параметри, засвоєні моделлю, - це не те, на що ти хочеш змінюватись. Але як у вас може бути вихід імовірності (я не копався в коді, тому я не знаю, чи вірогідність SVM дійсно рівнозначна "жорстким"), чому б не використовувати його? Це дуже поширений результат, з якого формується РПЦ. Функція svm R - це інтерфейс до широко використовуваного libsvm, тому для цього вам не обмежено використовувати R.
cbeleites підтримує Моніку

these plots do have a meaning- у чому сенс цих сюжетів?
Гульзар

8

у^у^=знак(шТх+б)шб

у^={0якщо  шТх+б<01інакше

ηη

у^={0якщо  шТх+б<η1інакше

η

шбη

>>> from sklearn.svm import SVC
>>> model = SVC(kernel='linear', C=0.001, probability=False, class_weight='balanced')
>>> model.fit(X, y)
>>> # The coefficients w are given by
>>> w = list(model.coef_)
>>> # The intercept b is given by
>>> b = model.intercept_[0]
>>> y_hat = X.apply(lambda s: np.sum(np.array(s)*np.array(w))+b, axis=1)
>>> y_hat = (y_hat > eta).astype(float)

3

Крива ROC зображує специфічність та чутливість, яка змінюється в залежності від порогу коваріату (який може бути безперервним або дискретним). Я думаю, ви плутаєте коваріат із відповіддю і, можливо, не до кінця розумієте, що таке крива ROC. Це, безумовно, крива, якщо коваріат безперервний, і ми дивимось на поріг, коли коваріат постійно змінюється. Якщо коваріат дискретний, ви все ще можете побудувати графік як функцію суцільного порогу. Тоді крива була б плоскою з кроками вгору (або вниз) на порогах, що відповідають дискретним значенням коваріату. Отже, це стосується SVM та будь-яких інших дискретних класифікаторів.

Що стосується AUC, оскільки у нас все ще є ROC (орієнтовна), ми все ще можемо обчислити площу під нею. Я не впевнений, що ви мали на увазі у своєму питанні про перехресну перевірку. У контексті проблем класифікації перехресне підтвердження використовується для отримання неупереджених або майже неупереджених оцінок рівня помилок для класифікатора. Таким чином, це може ввести, як ми оцінюємо бали на ROC.


1
Гаразд, якими можуть бути пороги класифікатора svm?
Абдельхак Махмуді

Не знаю. Що таке коваріати? Якщо у вас є один коефіцієнт, будь-яке значення може бути порогом. Якщо у вас є кілька коваріатів, ефективність класифікатора залежить від вибору декількох значень, а не від одного порогу, але він все ще змінюється в просторі коваріатів.
Майкл Р. Черник

Наприклад, лінійні SVM засновані на розділювальній гіперплані, що залежить від обраного значення C (низький C допускає більше помилок тренувань), чи може набір значень C бути набором порогів?
Абдельхак Махмуді

Так, чи не є значення C лише лінійними комбінаціями коваріатів?
Майкл Р. Черник

2
C - коефіцієнт штрафу, який застосовується для контролю компромісу між складністю гіперплану та помилками навчання. Іншою альтернативою може бути використання зміщення b в якості порогу, оскільки b - відстань від центру простору ознак до роздільної гіперплани. Таким чином, зміна b - це як переміщення гіперплана і, таким чином, різний TP і FP! Це моє розуміння!
Абдельхак Махмуді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.