Krzywa ROC dla dyskretnych klasyfikatorów, takich jak SVM: Dlaczego wciąż nazywamy ją „krzywą”? Czy to nie jest tylko „punkt”?

25

W dyskusji: jak wygenerować krzywą roc do klasyfikacji binarnej , myślę, że zamieszanie polegało na tym, że „klasyfikator binarny” (który jest dowolnym klasyfikatorem, który oddziela 2 klasy) był dla Yang tak zwany „dyskretny klasyfikator” (który produkuje wyjścia dyskretne 0/1 jak SVM), a nie ciągłe dane wyjściowe, takie jak klasyfikatory ANN lub Bayes ... itd. Tak więc dyskusja dotyczyła sposobu, w jaki ROC jest wykreślany dla „binarnych ciągłych klasyfikatorów”, a odpowiedź jest taka, że ​​wyniki są sortowane według ich wyników, ponieważ wyniki są ciągłe, a do utworzenia każdego punktu na krzywej ROC stosowany jest próg.

Moje pytanie dotyczy „binarnych dyskretnych klasyfikatorów”, takich jak SVM, wartości wyjściowe wynoszą 0 lub 1. Zatem ROC wytwarza tylko jeden punkt, a nie krzywą. Jestem zdezorientowany, dlaczego wciąż nazywamy to krzywą? !! Czy nadal możemy mówić o progach? Jak w szczególności zastosować progi w SVM? Jak obliczyć AUC? Czy walidacja krzyżowa odgrywa tutaj jakąkolwiek rolę?

Abdelhak Mahmoudi
źródło
10
SVM generuje rzeczywistą wartość decyzji, a mianowicie podpisaną odległość do hiperpłaszczyzny oddzielającej w przestrzeni cech. W klasyfikacji etykieta jest przypisywana na podstawie znaku tej wartości decyzji. Jako takie, SVMs zrobić wyjście więcej niż tylko wartość binarną, ich wyjście jest tylko binaryzowany jako etap post-processing w klasyfikacji.
Marc Claesen,

Odpowiedzi:

15
  • Tak, są sytuacje, w których nie można uzyskać zwykłej krzywej działania odbiornika i istnieje tylko jeden punkt.

  • SVM można skonfigurować tak, aby generowały prawdopodobieństwa członkostwa w klasie. Byłyby to zwykle wartości, dla których wartość progowa byłaby zmieniana w celu uzyskania krzywej działania odbiornika .
    Czy tego szukasz?

  • Kroki w ROC zwykle zdarzają się z małą liczbą przypadków testowych, a nie mają nic wspólnego z dyskretnymi zmianami współzmiennej (szczególnie, jeśli wybierasz swoje dyskretne progi, uzyskujesz te same punkty, tak że dla każdego nowego punktu zmienia się tylko jedna próbka jego zadanie).

  • Ciągłe zmienianie innych (hiper) parametrów modelu tworzy zestawy par specyficzności / czułości, które dają inne krzywe w układzie współrzędnych FPR; TPR.
    Interpretacja krzywej zależy oczywiście od tego, która odmiana wygenerowała krzywą.

Oto typowy ROC (tj. Żądanie prawdopodobieństwa jako danych wyjściowych) dla klasy „versicolor” zestawu danych tęczówki:

  • FPR; TPR (γ = 1, C = 1, próg prawdopodobieństwa):
    ROC

Ten sam typ układu współrzędnych, ale TPR i FPR jako funkcja parametrów strojenia γ i C:

  • FPR; TPR (γ, C = 1, próg prawdopodobieństwa = 0,5):
    gamma

  • FPR; TPR (γ = 1, C, próg prawdopodobieństwa = 0,5):
    koszt

Te wątki mają znaczenie, ale znaczenie zdecydowanie różni się od zwykłego ROC!

Oto kod R, którego użyłem:

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 obsługuje Monikę
źródło
1
To jest bardzo jasne, dzięki. Wpadłem na pomysł, że zmienianie b jest jak przesuwanie hiperpłaszczyzny, a zatem posiadanie różnych (TPR, FPR)! ale w przypadku klasyfikatora SVM wyuczone jest odchylenie b, więc wydaje się, że jest to najlepszy parametr? nie ?, jeśli tak jest, nie ma potrzeby wykonywania analizy ROC ?, nie?
Abdelhak Mahmoudi
@AbdelhakMahmoudi: Myślę, że parametry wyuczone przez model nie są tym, co chcesz zmieniać. Ale ponieważ możesz uzyskać wynik prawdopodobieństwa (nie zagłębiłem się w kod, więc nie wiem, czy prawdopodobieństwo SVM jest naprawdę równoważne z „trudnymi”), dlaczego go nie użyć? Jest to bardzo częsty wynik, z którego generowany jest ROC. Funkcja svm R jest interfejsem do powszechnie używanego libsvm, więc nie jest ograniczone używanie R do tego celu.
cbeleites obsługuje Monikę
these plots do have a meaning- jakie jest znaczenie tych fabuł?
Gulzar,
8

y^y^=sign(wTx+b)wb

y^={0if  wTx+b<01otherwise

ηη

y^={0if  wTx+b<η1otherwise

η

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
źródło
3

Krzywa ROC wykreśla swoistość w zależności od czułości, która zmienia się wraz z progiem zmiennej towarzyszącej (która może być ciągła lub dyskretna). Myślę, że mylisz zmienną towarzyszącą z odpowiedzią i być może nie w pełni rozumiesz, czym jest krzywa ROC. Jest to z pewnością krzywa, jeśli zmienna towarzysząca jest ciągła, a my patrzymy na próg, dla którego zmienna towarzysząca zmienia się w sposób ciągły. Jeśli zmienna towarzysząca jest dyskretna, nadal można wykreślić jako funkcję ciągłego progu. Następnie krzywa byłaby płaska ze skokami w górę (lub w dół) przy progach, które odpowiadają dyskretnym wartościom współzmiennej. Dotyczy to więc SVM i innych dyskretnych klasyfikatorów.

Jeśli chodzi o AUC, ponieważ nadal mamy ROC (szacowany), nadal możemy obliczyć pod nim obszar. Nie jestem pewien, co miałeś na myśli, pytając o walidację krzyżową. W kontekście problemów z klasyfikacją stosuje się weryfikację krzyżową w celu uzyskania obiektywnych lub prawie obiektywnych oszacowań poziomów błędów klasyfikatora. Może więc wejść w to, jak oceniamy punkty w ROC.

Michael R. Chernick
źródło
1
Ok, jakie mogą być progi dla klasyfikatora svm?
Abdelhak Mahmoudi
Nie wiem Jakie są zmienne towarzyszące? Jeśli masz jedną zmienną towarzyszącą, każda wartość może być wartością progową. Jeśli masz więcej niż jedną zmienną towarzyszącą, wydajność klasyfikatora zależy od wyboru kilku wartości zamiast jednego progu, ale nadal zmienia się w przestrzeni zmiennych towarzyszących.
Michael R. Chernick
Na przykład liniowe maszyny SVM oparte są na oddzielającej hiperpłaszczyźnie, która zależy od wybranej wartości C (niskie C toleruje więcej błędów treningowych), czy zestaw wartości C może być zbiorem progów?
Abdelhak Mahmoudi
Tak i czy wartości C nie są tylko liniowymi kombinacjami zmiennych towarzyszących?
Michael R. Chernick
2
C jest czynnikiem karnym wprowadzonym w celu kontrolowania kompromisu między złożonością hiperpłaszczyzny a błędami szkoleniowymi. Inną alternatywą może być zastosowanie odchylenia b jako wartości progowej, ponieważ b jest odległością od środka przestrzeni cech do oddzielającej hiperpłaszczyzny. Tak różne b jest jak przesuwanie hiperpłaszczyzny, a więc posiadanie różnych TP i FP! To jest moje zrozumienie!
Abdelhak Mahmoudi