SVMのような離散分類器のROC曲線:なぜそれを「曲線」と呼ぶのですか?、単なる「点」ではないのですか?


25

議論:バイナリ分類のroc曲線を生成する方法混乱は、「バイナリ分類子」(2つのクラスを分離する任意の分類子)がヤンの「離散分類子」( SVMのような離散出力0/1)およびANNやBayes分類器のような連続出力ではない...など。したがって、議論はROCが「バイナリ連続分類器」に対してどのようにプロットされるかについてであり、答えは出力がソートされることです出力は連続的であり、ROC曲線上の各ポイントを生成するためにしきい値が使用されるため、スコアによって。

私の質問は、SVMなどの「バイナリ離散分類器」に関するもので、出力値は0または1です。したがって、ROCは曲線ではなく1つのポイントのみを生成します。なぜそれを曲線と呼ぶのか混乱しています!まだしきい値について話せますか?特にSVMでしきい値を使用するにはどうすればよいですか?AUCを計算するにはどうすればよいですか?


10
SVMは、真の決定値、つまり特徴空間の分離超平面までの符号付き距離を出力します。分類では、この決定値の符号に基づいてラベルが割り当てられます。そのため、SVM 単なるバイナリ値以上の出力を行うため、その出力は分類における後処理ステップとして2値化されます。
マーククレセン14

回答:


15
  • はい、通常の受信機動作曲線を取得できず、1つのポイントしか存在しない状況があります。

  • SVMは、クラスメンバーシップの確率を出力するように設定できます。これらは受信機動作曲線を作り出すために敷居が変えられる通常の値でしょう。
    それはあなたが探しているものですか?

  • ROCのステップは通常、共変量の個別の変動とは関係なく、少数のテストケースで発生します(特に、新しいポイントごとに1つのサンプルのみが変更されるように個別のしきい値を選択すると、同じポイントになりますその割り当て)。

  • もちろん、モデルの他の(ハイパー)パラメーターを連続的に変化させると、FPR; TPR座標系に他の曲線を与える特異性/感度のペアのセットが生成されます。
    もちろん、曲線の解釈は、どのバリエーションが曲線を生成したかによって異なります。

以下は、アイリスデータセットの「versicolor」クラスの通常のROC(つまり、出力として確率を要求する)です。

  • FPR; TPR(γ= 1、C = 1、確率しきい値):
    ROC

同じタイプの座標系ですが、調整パラメーターγおよび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)))

1
これは非常に明確です、ありがとう。私は、bを変えることは超平面を動かし、したがって異なる(TPR、FPR)を持っているようなものだという考えを持っていました!しかし、SVM分類器では、バイアスbが学習されるので、それが最良のパラメーターであるように思われますか?いいえ、そうである場合、ROC分析を実行する必要はありませんか?
アブデル

@AbdelhakMahmoudi:モデルによって学習されたパラメーターは、あなたが変えたいものではないと思います。しかし、確率の出力を得ることができるので(コードを掘り下げなかったので、確率SVMが実際に「ハード」なものと同等であるかどうかはわかりません)、それを使用しないのはなぜですか。これは、ROCが生成される非常に一般的な結果です。Rのsvm関数は、広く使用されているlibsvmへのインターフェースであるため、Rを使用してこれを行うことに制限されません。
cbeleitesは

these plots do have a meaning-それらのプロットの意味は何ですか?
グルザー

8

y^y^=符号wTバツ+bwb

y^={0もし  wTバツ+b<01さもないと

ηη

y^={0もし  wTバツ+b<η1さもないと

η

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およびその他の離散分類器に適用されます。

AUCについては、ROC(推定値)がまだあるため、その下の面積を計算できます。相互検証についての質問であなたが念頭に置いていたのかどうかはわかりません。分類問題のコンテキストでは、交差検証を使用して、分類器のエラー率の不偏またはほぼ不偏の推定値を取得します。したがって、ROC上のポイントを推定する方法を入力できます。


1
わかりました、svm分類子のしきい値は何ですか?
アブデルハクマフムディ

知りません。共変量とは何ですか?1つの共変量がある場合、任意の値がしきい値になります。複数の共変量がある場合、分類子のパフォーマンスは、単一のしきい値ではなく複数の値の選択に依存しますが、それでも共変量の空間は異なります。
マイケルR.チャーニック

たとえば、線形SVMは選択されたC値に依存する分離超平面に基づいています(低Cはより多くのトレーニングエラーを許容します)。C値のセットをしきい値のセットにできますか?
アブデルハクマフムディ

はい、C値は共変量の線形結合ではありませんか?
マイケルR.チャーニック

2
Cは、超平面の複雑さとトレーニングエラーのトレードオフを制御するために導入されるペナルティファクターです。bは特徴空間の中心から分離する超平面までの距離であるため、他の選択肢としては、バイアスbをしきい値として使用することができます。したがって、bを変化させることは、超平面を動かし、TPとFPが異なることに似ています!これは私の理解です!
アブデルハクマフムディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.