Courbe ROC pour les classificateurs discrets comme SVM: Pourquoi l'appelle-t-on encore une "courbe"?, N'est-ce pas juste un "point"?

25

Dans la discussion: comment générer une courbe roc pour la classification binaire , je pense que la confusion était qu'un "classificateur binaire" (qui est tout classificateur qui sépare 2 classes) était pour Yang ce qu'on appelle un "classificateur discret" (qui produit sorties discrètes 0/1 comme un SVM) et non pas des sorties continues comme les classificateurs ANN ou Bayes ... etc. par leurs scores puisque les sorties sont continues, et un seuil est utilisé pour produire chaque point sur la courbe ROC.

Ma question est pour les "classificateurs discrets binaires", tels que SVM, les valeurs de sortie sont 0 ou 1. Donc, le ROC produit juste un point et non une courbe. Je ne comprends pas pourquoi nous l'appelons toujours une courbe? !! Peut-on encore parler de seuils? Comment utiliser notamment les seuils dans SVM? Comment calculer l'ASC?, La validation croisée joue-t-elle un rôle ici?

Abdelhak Mahmoudi
la source
10
Un SVM génère une valeur de décision réelle, à savoir la distance signée par rapport à l'hyperplan de séparation dans l'espace des fonctionnalités. Dans la classification, l'étiquette est attribuée en fonction du signe de cette valeur de décision. En tant que tel, SVM ne sortie plus qu'une valeur binaire, leur sortie est juste binarisation comme une étape de post-traitement dans la classification.
Marc Claesen

Réponses:

15
  • Oui, il existe des situations où la courbe de fonctionnement habituelle du récepteur ne peut pas être obtenue et un seul point existe.

  • Les SVM peuvent être configurés de manière à générer des probabilités d'appartenance à une classe. Ce serait la valeur habituelle pour laquelle un seuil serait modifié pour produire une courbe de fonctionnement du récepteur .
    C'est bien ce que vous cherchez?

  • Les étapes du ROC se produisent généralement avec un petit nombre de cas de test plutôt que d'avoir quelque chose à voir avec une variation discrète de la covariable (en particulier, vous vous retrouvez avec les mêmes points si vous choisissez vos seuils discrets de sorte que pour chaque nouveau point, un seul échantillon change sa mission).

  • La variation continue d'autres (hyper) paramètres du modèle produit bien sûr des ensembles de paires spécificité / sensibilité qui donnent d'autres courbes dans le système de coordonnées FPR; TPR.
    L'interprétation d'une courbe dépend bien sûr de la variation qui a généré la courbe.

Voici un ROC habituel (c'est-à-dire demander des probabilités en sortie) pour la classe "versicolor" de l'ensemble de données iris:

  • FPR; TPR (γ = 1, C = 1, seuil de probabilité):
    ROC

Même type de repère, mais TPR et FPR en fonction des paramètres de réglage γ et C:

  • FPR; TPR (γ, C = 1, seuil de probabilité = 0,5):
    gamma

  • FPR; TPR (γ = 1, C, seuil de probabilité = 0,5):
    Coût

Ces parcelles ont un sens, mais le sens est décidément différent de celui du ROC habituel!

Voici le code R que j'ai utilisé:

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 soutient Monica
la source
1
C'est très clair, merci. J'ai eu cette idée que varier b, c'est comme déplacer l'hyperplan et donc avoir différent (TPR, FPR)! mais avec le classificateur SVM, le biais b est appris, donc il semble que ce soit le meilleur paramètre? non ?, si tel est le cas, il n'est pas nécessaire d'effectuer l'analyse ROC ?, non?
Abdelhak Mahmoudi
@AbdelhakMahmoudi: Je suppose que les paramètres appris par le modèle ne sont pas ce que vous voulez faire varier. Mais comme vous pouvez avoir une sortie de probabilité (je n'ai pas fouillé dans le code, donc je ne sais pas si les probabilités SVM sont vraiment équivalentes à celles "dures"), pourquoi ne pas l'utiliser? Il s'agit d'un résultat très courant à partir duquel le ROC est généré. La fonction svm de R est une interface avec la libsvm largement utilisée, vous n'êtes donc pas limité à utiliser R pour ce faire.
cbeleites prend en charge Monica le
these plots do have a meaning- quel est le sens de ces parcelles?
Gulzar
8

y^y^=signe(wTX+b)wb

y^={0si  wTX+b<01autrement

ηη

y^={0si  wTX+b<η1autrement

η

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
la source
3

La courbe ROC trace la spécificité en fonction de la sensibilité qui varie avec le seuil d'une covariable (qui peut être continue ou discrète). Je pense que vous confondez la covariable avec la réponse et que vous ne comprenez peut-être pas complètement ce qu'est une courbe ROC. C'est certainement une courbe si la covariable est continue et que nous regardons un seuil pour que la covariable change continuellement. Si la covariable est discrète, vous pouvez toujours tracer en fonction d'un seuil continu. La courbe serait alors plate avec des pas vers le haut (ou vers le bas) à des seuils qui correspondent aux valeurs discrètes de la covariable. Donc, cela s'appliquerait à SVM et à tout autre classificateur discret.

En ce qui concerne l'AUC, car nous avons encore un ROC (estimé), nous pouvons toujours calculer la zone en dessous. Je ne suis pas sûr de savoir ce que vous aviez en tête avec votre question sur la validation croisée. Dans le contexte des problèmes de classification, la validation croisée est utilisée pour obtenir des estimations sans biais ou presque sans biais des taux d'erreur pour le classificateur. Ainsi, il peut entrer dans la façon dont nous estimons les points sur le ROC.

Michael R. Chernick
la source
1
Ok, quels pourraient être les seuils pour le classificateur svm?
Abdelhak Mahmoudi
Je ne sais pas. Quelles sont les covariables? Si vous avez une covariable, toute valeur peut être un seuil. Si vous avez plusieurs covariables, les performances du classificateur dépendent du choix de plusieurs valeurs plutôt que d'un seul seuil, mais elles varient toujours dans l'espace des covariables.
Michael R. Chernick
Par exemple, les SVM linéaires sont basés sur l'hyperplan de séparation qui dépend de la valeur C choisie (un C bas tolère plus d'erreurs d'apprentissage), un ensemble de valeurs C pourrait-il être l'ensemble des seuils?
Abdelhak Mahmoudi
Oui et les valeurs C ne sont-elles pas des combinaisons linéaires des covariables?
Michael R. Chernick
2
C est le facteur de pénalité introduit pour contrôler le compromis entre la complexité de l'hyperplan et les erreurs d'entraînement. Une autre alternative pourrait être l'utilisation du biais b comme seuil puisque b est la distance entre le centre de l'espace caractéristique et l'hyperplan de séparation. Donc, faire varier b, c'est comme déplacer l'hyperplan et avoir ainsi des TP et FP différents! C'est ma compréhension!
Abdelhak Mahmoudi