Curva ROC para classificadores discretos como SVM: Por que ainda a chamamos de "curva" ?, Não é apenas um "ponto"?


25

Na discussão: como gerar uma curva roc para classificação binária , acho que a confusão foi que um "classificador binário" (que é qualquer classificador que separa duas classes) foi para Yang o que é chamado de "classificador discreto" (que produz saídas discretas 0/1 como um SVM) e não saídas contínuas como classificadores ANN ou Bayes ... etc. Portanto, a discussão foi sobre como o ROC é plotado para "classificadores contínuos binários", e a resposta é que as saídas são classificadas por suas pontuações, uma vez que os resultados são contínuos e um limite é usado para produzir cada ponto na curva ROC.

Minha pergunta é para "classificadores discretos binários", como SVM, os valores de saída são 0 ou 1. Portanto, o ROC produz apenas um ponto e não uma curva. Estou confuso por que ainda chamamos isso de curva? !! Ainda podemos falar sobre limites? Como alguém pode usar limites no SVM em particular? Como calcular a AUC ?, A validação cruzada desempenha algum papel aqui?


10
Um SVM gera um valor de decisão real, ou seja, a distância assinada para o hiperplano de separação no espaço de recurso. Na classificação, o rótulo é atribuído com base no sinal desse valor de decisão. Como tal, SVMs fazer de saída mais do que apenas um valor binário, sua saída é apenas binarizadas como uma etapa de pós-processamento na classificação.
Marc Claesen

Respostas:


15
  • Sim, há situações em que a curva operacional normal do receptor não pode ser obtida e existe apenas um ponto.

  • Os SVMs podem ser configurados para gerar probabilidades de associação à classe. Esse seria o valor usual para o qual um limite seria variado para produzir uma curva operacional do receptor .
    É isso que você está procurando?

  • As etapas no ROC geralmente acontecem com um pequeno número de casos de teste, em vez de ter algo a ver com variação discreta na covariável (particularmente, você acaba com os mesmos pontos se escolher seus limites discretos para que, para cada novo ponto, apenas uma amostra mude sua atribuição).

  • A variação contínua de outros (hiper) parâmetros do modelo produz, obviamente, conjuntos de pares de especificidade / sensibilidade que fornecem outras curvas no sistema de coordenadas FPR; TPR.
    A interpretação de uma curva, é claro, depende de qual variação gerou a curva.

Aqui está um ROC usual (isto é, solicitando probabilidades como saída) para a classe "versicolor" do conjunto de dados da íris:

  • FPR; TPR (γ = 1, C = 1, limiar de probabilidade):
    ROC

O mesmo tipo de sistema de coordenadas, mas TPR e FPR como função dos parâmetros de ajuste γ e C:

  • FPR; TPR (γ, C = 1, limiar de probabilidade = 0,5):
    gama

  • FPR; TPR (γ = 1, C, limiar de probabilidade = 0,5):
    custo

Esses gráficos têm um significado, mas o significado é decididamente diferente daquele do ROC!

Aqui está o código R que eu usei:

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)))

11
Isso está muito claro, obrigado. Tive a ideia de que variar b é como mover o hiperplano e, assim, ter diferentes (TPR, FPR)! mas com o classificador SVM, o viés b é aprendido, então parece ser o melhor parâmetro? não ?, se for esse o caso, não há necessidade de realizar a análise ROC ?, não?
Abdelhak Mahmoudi

@AbdelhakMahmoudi: Eu acho que os parâmetros aprendidos pelo modelo não são o que você deseja variar. Mas como você pode ter uma saída de probabilidade (eu não procurei no código, então não sei se a probabilidade SVM é realmente equivalente aos "difíceis"), por que não usá-la? Este é um resultado muito comum a partir do qual o ROC é gerado. A função svm de R é uma interface para a libsvm amplamente usada, portanto você não está restrito a usar R para fazer isso.
cbeleites suporta Monica

these plots do have a meaning- qual é o significado dessas parcelas?
Gulzar

8

Normalmente, o rótulo previsto do SVM é fornecido por , onde é o SVM otimizado pesos do hiperplano e é a interceptação otimizada para SVM. Isso também pode ser reescrito da seguinte forma: y =sinal(wo tx+b)wb yy^y^=placa(WTx+b)Wb

y^={0 0E se  WTx+b<0 01 1de outra forma

No entanto, se introduzirmos um limite , podemos controlar a taxa de detecção positiva variando , ou seja, r | yηη

y^={0 0E se  WTx+b<η1 1de outra forma

Ao variar , podemos produzir um ROC usando SVM e, assim, ajustar a taxa de sensibilidade e especificidade.η

Por exemplo, se queremos fazê-lo em python, podemos extrair e usando limiar como segue. 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)

3

A curva ROC representa a especificidade versus sensibilidade, que varia com o limiar de uma covariável (que pode ser contínua ou discreta). Acho que você está confundindo a covariável com a resposta e talvez não entenda completamente o que é uma curva ROC. Certamente é uma curva se a covariável é contínua e observamos um limiar para a covariável mudar continuamente. Se a covariável for discreta, você ainda pode plotar em função de um limite contínuo. Então a curva seria plana com etapas para cima (ou para baixo) em limites que correspondem aos valores discretos da covariável. Portanto, isso se aplica ao SVM e a qualquer outro classificador discreto.

Em relação à AUC, uma vez que ainda temos um ROC (estimado), ainda podemos calcular a área sob ele. Não tenho certeza do que você tinha em mente com sua pergunta sobre validação cruzada. No contexto dos problemas de classificação, a validação cruzada é usada para obter estimativas imparciais ou quase imparciais das taxas de erro do classificador. Assim, pode-se entender como estimamos os pontos no ROC.


11
Ok, quais poderiam ser os limites para o classificador svm?
Abdelhak Mahmoudi

Eu não sei. Quais são as covariáveis? Se você tiver uma covariável, qualquer valor poderá ser um limite. Se você tiver mais de uma covariável, o desempenho do classificador dependerá da escolha de vários valores, em vez de um único limite, mas ainda assim varia no espaço das covariáveis.
Michael R. Chernick 22/09/12

Por exemplo, SVMs lineares são baseados no hiperplano de separação, que depende do valor C escolhido (C baixo tolera mais erros de treinamento). Um conjunto de valores C seria o conjunto de limites?
Abdelhak Mahmoudi

Sim e os valores C não são apenas combinações lineares das covariáveis?
Michael R. Chernick

2
C é o fator de penalidade introduzido para controlar o trade-off entre a complexidade do hiperplano e os erros de treinamento. Uma outra alternativa poderia ser o uso do viés b como limite, uma vez que b é a distância do centro do espaço do recurso ao hiperplano de separação. Portanto, variar b é como mover o hiperplano e, assim, ter diferentes TP e FP! Este é o meu entendimento!
Abdelhak Mahmoudi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.