キャレットパッケージを使用すると、特定のしきい値の混同マトリックスを取得できますか?


13

trainバイナリ応答のロジスティック回帰モデル(を介して)を取得し、confusionMatrixin を介してロジスティック混同行列を取得しましたcaret。ロジスティックモデルの混同マトリックスが得られますが、それを取得するためにどのしきい値が使用されているのかはわかりません。confusionMatrixin を使用して特定のしきい値の混同マトリックスを取得するにはどうすればよいcaretですか?


回答はありませんが、このような質問はヘルプファイルでよく回答されます。それが失敗した場合、ソースコード自体を見ることができます。confusionmatrix括弧なしでを入力して、ソースをコンソールに印刷できます。
シャドウトーカー14

正確に何をしたかは明確ではありません。パッケージglmから関数を呼び出し、statsその結果を渡しましたconfusionMatrixか?私はそれができるとは知りませんでした。マニュアルを読むと、それができることははっきりしません。それともpredict何かした?短い例が役立ちます。
カリモ14

1
@Calimoこのtrain関数caretを使用してモデルに適合させました。これにより、二項族を持つglmとして指定できます。次に、predictを介して生成されたオブジェクトに対して関数を使用しましたtrain
ブラックミルク

回答:


10

Rのほとんどの分類モデルは、クラス予測と各クラスの確率の両方を生成します。バイナリデータの場合、ほとんどすべての場合、クラス予測は50%の確率カットオフに基づいています。

glm同じです。でcaret、を使用predict(object, newdata)すると予測クラスpredict(object, new data, type = "prob")が得られ、クラス固有の確率が得られます(objectが生成される場合train)。

独自のモデル定義し、必要なカットオフを適用することによりさまざまなことを行うことができます。caret ウェブサイトはまた、持っている確率カットオフを最適化するために、リサンプリング使用します。

tl; dr

confusionMatrix 予測されたクラスを使用するため、50%の確率のカットオフ

マックス


14

以下を前提とする非常に簡単な方法がありますtune <- train(...)

probsTest <- predict(tune, test, type = "prob")
threshold <- 0.5
pred      <- factor( ifelse(probsTest[, "yes"] > threshold, "yes", "no") )
pred      <- relevel(pred, "yes")   # you may or may not need this; I did
confusionMatrix(pred, test$response)

明らかに、「最高」の値を試すか選択するために、しきい値を設定することができます。ここで、最高とは、特異性と感度の最高の組み合わせを意味します。

library(pROC)
probsTrain <- predict(tune, train, type = "prob")
rocCurve   <- roc(response = train$response,
                      predictor = probsTrain[, "yes"],
                      levels = rev(levels(train$response)))
plot(rocCurve, print.thres = "best")

Maxが投稿した例を見てから、私のアプローチがあまり望ましくない統計的なニュアンスがあるかどうかはわかりません。


出力されたrocCurveプロットでは、3つの値はどういう意味ですか?たとえば、私のデータでは0.289(0.853、0.831)と書かれています。0.289は、バイナリの結果を区別するために使用する必要がある最適なしきい値を示していますか?つまり、caretパッケージのデフォルトのしきい値0.5ではなく、0.289を超える予測確率を持つすべてのケースが「1」とコーディングされ、0.289より小さい予測確率を持つすべてのケースが「0」とコーディングされます。
coip

2
うん、それはまさに正しいです、そして括弧内の他の2つの値は感度と特異性です(正直なところ、どちらがどちらかは忘れています)
-efh0888

2
また、それを使用してroc曲線から抽出できることrocCurve$thresholds[which(rocCurve$sensitivities + rocCurve$specificities == max(rocCurve$sensitivities + rocCurve$specificities))]もわかったので、必要に応じて異なる重みを付ける柔軟性も得られます...最後に注意することは、現実的には、おそらくMaxがここで説明しているように、任意のモデルハイパーパラメータを使用します)。
efh0888
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.