Kurva ROC untuk pengklasifikasi diskrit seperti SVM: Mengapa kita masih menyebutnya "kurva", bukan hanya "titik"?

25

Dalam diskusi: bagaimana membuat kurva roc untuk klasifikasi biner , saya pikir kebingungannya adalah "binary classifier" (yang mana setiap classifier yang memisahkan 2 kelas) adalah untuk Yang yang disebut "discrete classifier" (yang menghasilkan keluaran diskrit 0/1 seperti SVM) dan bukan keluaran kontinu seperti pengklasifikasi JST atau Bayes ... dll. Jadi, pembahasannya adalah tentang bagaimana ROC diplot untuk "pengklasifikasi biner kontinu", dan jawabannya adalah bahwa keluaran diurutkan oleh skor mereka karena output kontinu, dan ambang digunakan untuk menghasilkan setiap titik pada kurva ROC.

Pertanyaan saya adalah untuk "classifier biner diskrit", seperti SVM, nilai outputnya adalah 0 atau 1. Jadi ROC hanya menghasilkan satu titik dan bukan kurva. Saya bingung mengapa kita masih menyebutnya kurva? !! Bisakah kita masih berbicara tentang ambang batas? Bagaimana cara menggunakan ambang batas dalam SVM secara khusus? Bagaimana seseorang menghitung AUC ?, Apakah validasi silang memainkan peran apa pun di sini?

Abdelhak Mahmoudi
sumber
10
SVM mengeluarkan nilai keputusan nyata, yaitu jarak yang ditandatangani ke hyperplane pemisah dalam ruang fitur. Dalam klasifikasi label diberikan berdasarkan tanda nilai keputusan ini. Dengan demikian, SVM melakukan output lebih dari sekedar nilai biner, outputnya hanya di-binarisasi sebagai langkah pasca-pemrosesan dalam klasifikasi.
Marc Claesen

Jawaban:

15
  • Ya, ada situasi di mana kurva operasi penerima yang biasa tidak dapat diperoleh dan hanya ada satu titik.

  • SVM dapat diatur sehingga menghasilkan probabilitas keanggotaan kelas. Ini akan menjadi nilai biasa dimana ambang akan bervariasi untuk menghasilkan kurva operasi penerima .
    Apakah itu yang Anda cari?

  • Langkah-langkah dalam ROC biasanya terjadi dengan sejumlah kecil kasus uji daripada ada hubungannya dengan variasi diskrit dalam kovariat (terutama, Anda berakhir dengan poin yang sama jika Anda memilih ambang diskrit Anda sehingga untuk setiap titik baru hanya satu perubahan sampel tugasnya).

  • Secara terus menerus memvariasikan parameter lain (hiper) dari model tentu saja menghasilkan serangkaian pasangan spesifisitas / sensitivitas yang memberikan kurva lain dalam sistem koordinat FPR; TPR.
    Interpretasi kurva tentu saja tergantung pada variasi apa yang menghasilkan kurva.

Berikut ini adalah ROC biasa (yaitu meminta probabilitas sebagai output) untuk kelas "versicolor" dari set data iris:

  • FPR; TPR (γ = 1, C = 1, ambang batas probabilitas):
    ROC

Jenis sistem koordinat yang sama, tetapi TPR dan FPR sebagai fungsi dari parameter tuning γ dan C:

  • FPR; TPR (γ, C = 1, ambang batas probabilitas = 0,5):
    gamma

  • FPR; TPR (γ = 1, C, ambang batas probabilitas = 0,5):
    biaya

Plot-plot ini memang memiliki makna, tetapi maknanya jelas berbeda dari ROC yang biasa!

Inilah kode R yang saya gunakan:

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 = [email protected] [[1]], tpr = [email protected] [[1]], 
                threshold = [email protected] [[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)))
Cbeleites mendukung Monica
sumber
1
Ini sangat jelas, Terima kasih. Saya punya ide bahwa variasi b seperti menggerakkan hyperplane dan karenanya memiliki perbedaan (TPR, FPR)! tetapi dengan classifier SVM, bias b dipelajari, jadi sepertinya menjadi parameter terbaik? tidak ?, jika ini masalahnya, tidak perlu melakukan analisis ROC ?, tidak?
Abdelhak Mahmoudi
@AbdelhakMahmoudi: Saya kira parameter yang dipelajari oleh model bukanlah yang ingin Anda variasikan. Tetapi karena Anda dapat memiliki output probabilitas (saya tidak menggali ke dalam kode, jadi saya tidak tahu apakah probabilitas SVM benar-benar sama dengan yang "keras"), mengapa tidak menggunakannya? Ini adalah hasil yang sangat umum dari mana ROC dihasilkan. Fungsi svm R adalah antarmuka ke libsvm yang banyak digunakan, jadi Anda tidak dibatasi untuk menggunakan R untuk melakukan ini.
cbeleites mendukung Monica
these plots do have a meaning- apa arti dari plot itu?
Gulzar
8

Biasanya, label yang diprediksi dari SVM diberikan oleh , di mana adalah SVM-dioptimalkan bobot hyper-plane, dan adalah intersep yang dioptimalkan SVM. Ini juga dapat ditulis ulang sebagai berikut: y =tanda(wTx+b)wb yy^y^=tanda(wTx+b)wb

y^={0jika  wTx+b<01jika tidak

Namun, jika kami memperkenalkan ambang , kami dapat mengontrol tingkat deteksi positif dengan memvariasikan , yaitu n yηη

y^={0jika  wTx+b<η1jika tidak

Dengan memvariasikan , kita dapat menghasilkan ROC menggunakan SVM, dan dengan demikian menyesuaikan tingkat sensitivitas dan spesifisitas.η

Sebagai contoh, jika kita ingin melakukannya dengan python, kita dapat mengekstraksi dan menggunakan ambang sebagai berikut. bηwbη

>>> 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)
Raymond Kwan
sumber
3

Kurva ROC plot spesifisitas vs sensitivitas yang bervariasi dengan ambang kovariat (yang mungkin kontinu atau diskrit). Saya pikir Anda membingungkan kovariat dengan respons dan mungkin tidak sepenuhnya memahami apa itu kurva ROC. Ini tentu saja kurva jika kovariat kontinu dan kita melihat ambang batas untuk kovariat yang berubah terus menerus. Jika kovariat terpisah, Anda masih dapat memplotnya sebagai fungsi dari ambang kontinu. Kemudian kurva akan rata dengan langkah-langkah ke atas (atau ke bawah) pada ambang batas yang sesuai dengan nilai-nilai diskrit kovariat. Jadi ini akan berlaku untuk SVM dan pengklasifikasi diskrit lainnya.

Mengenai AUC karena kami masih memiliki ROC (yang diperkirakan) kami masih dapat menghitung area di bawahnya. Saya tidak yakin apakah ada dalam pikiran Anda dengan pertanyaan Anda tentang validasi silang. Dalam konteks klasifikasi masalah, validasi silang digunakan untuk mendapatkan estimasi tingkat kesalahan yang tidak bias atau hampir tidak bias untuk pengklasifikasi. Jadi itu bisa masuk ke dalam bagaimana kita memperkirakan poin pada ROC.

Michael R. Chernick
sumber
1
Ok, Apa yang bisa menjadi ambang untuk classifier svm?
Abdelhak Mahmoudi
Saya tidak tahu Apa itu kovariat? Jika Anda memiliki satu kovariat, nilai apa pun bisa menjadi ambang batas. Jika Anda memiliki lebih dari satu kovariat, kinerja classifier tergantung pada pilihan beberapa nilai daripada satu ambang batas tetapi masih bervariasi dalam ruang kovariat.
Michael R. Chernick
Sebagai contoh, SVM linear didasarkan pada hyperplane pemisah yang tergantung pada nilai C yang dipilih (C rendah mentolerir lebih banyak kesalahan pelatihan), dapatkah seperangkat nilai C menjadi himpunan ambang batas?
Abdelhak Mahmoudi
Ya dan bukankah nilai C hanya kombinasi linear dari kovariat?
Michael R. Chernick
2
C adalah faktor penalti yang diperkenalkan untuk mengontrol pertukaran antara kompleksitas hyperplane dan kesalahan pelatihan. Alternatif lain bisa menggunakan bias b sebagai ambang batas karena b adalah jarak dari pusat ruang fitur ke hyperplane pemisah. Jadi beragam b seperti menggerakkan hyperplane dan karenanya memiliki TP dan FP yang berbeda! Ini pemahaman saya!
Abdelhak Mahmoudi