SVM과 같은 이산 분류기의 ROC 곡선 : 왜 여전히 "곡선"이라고 부르나요? "단지"아닌가요?


24

토론 : 이진 분류에 대한 roc 곡선을 생성하는 방법에 대해서는 혼란이 "이진 분류기"(2 개의 클래스를 분리하는 분류기 임)가 양의 "이산 분류기"( ANN 또는 Bayes 분류기와 같은 연속 출력이 아닌 SVM과 같은 개별 출력 0/1) 따라서 ROC가 "이진 연속 분류기"에 대해 표시되는 방법에 대한 논의가 이루어졌으며 그 결과는 출력이 정렬됩니다. 출력이 연속적이기 때문에 점수에 따라 ROC 곡선의 각 점을 생성하는 임계 값이 사용됩니다.

내 질문은 SVM과 같은 "이진 이산 분류기"에 대한 것입니다. 출력 값은 0 또는 1입니다. 따라서 ROC는 곡선이 아닌 한 점만 생성합니다. 왜 우리가 여전히 커브라고 부르는지 혼란 스럽습니까? !! 여전히 임계 값에 대해 이야기 할 수 있습니까? 특히 SVM에서 임계 값을 어떻게 사용할 수 있습니까? AUC를 어떻게 계산할 수 있습니까? 교차 검증은 어떤 역할을합니까?


9
SVM은 실제 결정 값, 즉 피처 공간에서 분리 초평면까지의 서명 된 거리를 출력합니다. 분류에서이 결정 값의 부호에 따라 레이블이 지정됩니다. 따라서 SVM 이진 값 이상의 출력을 수행 하며, 출력은 분류에서 사후 처리 단계로 이진화됩니다.
Marc Claesen

답변:


14
  • 예. 일반적인 수신기 작동 곡선을 얻을 수없고 한 지점 만 존재하는 상황이 있습니다.

  • 클래스 멤버쉽 확률을 출력하도록 SVM을 설정할 수 있습니다. 이것은 수신기 작동 곡선 을 생성하기 위해 임계 값이 변경되는 일반적인 값입니다 .
    당신이 찾고있는 것입니까?

  • ROC의 단계는 일반적으로 공변량의 불연속 변화와 관련이있는 것이 아니라 적은 수의 테스트 사례에서 발생합니다 (특히, 새로운 점마다 하나의 샘플 만 변경되도록 불연속 임계 값을 선택하면 동일한 점으로 끝납니다) 할당).

  • 코스 모델의 지속적으로 변하는 다른 (하이퍼) 파라미터는 FPR; TPR 좌표계에서 다른 곡선을 제공하는 특이성 / 감도 쌍 세트를 생성합니다.
    곡선의 해석은 곡선을 생성 한 변형에 따라 다릅니다.

다음은 홍채 데이터 세트의 "versicolor"클래스에 대한 일반적인 ROC (즉, 출력으로 확률 요청)입니다.

  • FPR; TPR (γ = 1, C = 1, 확률 임계 값) :
    큰 괴조

튜닝 매개 변수 γ 및 C의 함수와 동일한 유형의 좌표계이지만 TPR 및 FPR :

  • FPR; TPR (γ, C = 1, 확률 임계 값 = 0.5) :
    감마

  • FPR; TPR (γ = 1, C, 확률 임계 값 = 0.5) :
    비용

이 도표에는 의미가 있지만 그 의미는 일반적인 ROC와는 다릅니다.

내가 사용한 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)))

이것은 매우 분명합니다. 감사합니다. 나는 b를 변화시키는 것이 초평면을 움직이는 것과 같으므로 다른 (TPR, FPR)을 갖는 것과 같은 생각을 가지고있었습니다! 그러나 SVM 분류기를 사용하면 바이어스 b가 학습되므로 가장 좋은 매개 변수 인 것 같습니다. 아니요,이 경우에는 ROC 분석을 수행 할 필요가 없습니까?
Abdelhak Mahmoudi

@ AbdelhakMahmoudi : 모델에서 학습 한 매개 변수가 변경하려는 것이 아니라고 생각합니다. 그러나 확률 출력을 얻을 수 있기 때문에 (코드를 파지하지 않았으므로 확률 SVM이 실제로 "하드"와 같은지 알 수 없습니다) 왜 사용하지 않습니까? 이것은 ROC가 생성되는 매우 일반적인 결과입니다. R의 svm 함수는 널리 사용되는 libsvm에 대한 인터페이스이므로 R을 사용하여이 작업을 수행 할 수 있습니다.
cbeleites는

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)

3

ROC 곡선은 공변량의 임계 값 (연속적이거나 불연속적임)에 따라 변하는 특이성 대 감도를 나타냅니다. 공변량을 반응과 혼동하고 있으며 ROC 곡선이 무엇인지 완전히 이해하지 못하고 있다고 생각합니다. 공변량이 연속적이고 공변량이 지속적으로 변하는 임계 값을 보면 확실히 곡선입니다. 공변량이 이산 인 경우에도 연속 임계 값의 함수로 플롯 할 수 있습니다. 그런 다음 공변량의 이산 값에 해당하는 임계 값에서 단계가 올라가거나 내려 가면서 곡선이 평평 해집니다. 따라서 이것은 SVM과 다른 개별 분류 자에 적용됩니다.

우리는 여전히 ROC (추정 된 것)를 가지고 있기 때문에 AUC와 관련하여 우리는 여전히 그 아래의 면적을 계산할 수 있습니다. 교차 유효성 검사에 대한 귀하의 질문을 염두에 두 셨는지 확실하지 않습니다. 분류 문제의 맥락에서, 교차 검증은 분류기의 오차율에 대한 편견 또는 거의 편견없는 추정치를 얻는 데 사용됩니다. ROC의 포인트를 어떻게 평가할 수 있는지에 대해 설명합니다.


1
좋아, svm 분류기의 임계 값은 무엇입니까?
Abdelhak Mahmoudi

모르겠어요 공변량은 무엇입니까? 공변량이 하나 있으면 모든 값이 임계 값이 될 수 있습니다. 공변량이 둘 이상인 경우 분류 자 ​​성능은 단일 임계 값이 아닌 여러 값의 선택에 따라 다르지만 공변량의 공간에 따라 여전히 다릅니다.
Michael R. Chernick

예를 들어, 선형 SVM은 선택한 C 값 (낮은 C가 더 많은 훈련 오류를 허용 함)에 따라 분리되는 초평면을 기반으로하며, C 값 세트가 임계 값 세트 일 수 있습니까?
Abdelhak Mahmoudi

예. C 값이 공변량의 선형 조합이 아닙니까?
Michael R. Chernick

2
C는 초평면 복잡성과 훈련 오류 간의 절충을 제어하기 위해 도입 된 페널티 요소입니다. 다른 대안은 b가 특징 공간의 중심으로부터 분리 초평면까지의 거리이기 때문에 바이어스 b를 임계 값으로 사용하는 것일 수있다. 따라서 b를 바꾸는 것은 초평면을 움직이고 다른 TP와 FP를 갖는 것과 같습니다! 이것은 나의 이해입니다!
Abdelhak Mahmoudi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.