私はScikit学習を使用してSVMバイナリ分類器をトレーニングしています。
私の問題の性質上、私は偽陰性を避ける必要があります。何も無料ではないので、偽陰性の数を減らすために偽陽性率を高くしても大丈夫です。どうすればそれができますか(理想的にはScikit学習で)
つまり、SVM分類器を使用して偽陰性を最小限に抑えるにはどうすればよいでしょうか。偽陰性よりも偽陽性を優先するためにハイパーパラメータを調整する方法はありますか?
私はScikit学習を使用してSVMバイナリ分類器をトレーニングしています。
私の問題の性質上、私は偽陰性を避ける必要があります。何も無料ではないので、偽陰性の数を減らすために偽陽性率を高くしても大丈夫です。どうすればそれができますか(理想的にはScikit学習で)
つまり、SVM分類器を使用して偽陰性を最小限に抑えるにはどうすればよいでしょうか。偽陰性よりも偽陽性を優先するためにハイパーパラメータを調整する方法はありますか?
回答:
SVMバイナリ分類器のScikit学習実装では、他のコメント/返信が示唆しているように、カットオフしきい値を設定できません。クラスの確率を与えるのではなく、デフォルトのカットオフを適用してクラスのメンバーシップを与えます(例:1または2)。
偽陰性を最小限に抑えるには、陽性クラスとしてラベル付けされたトレーニングサンプルに高い重みを設定できます。デフォルトでは、すべてのクラスの重みが1に設定されています。これを変更するには、hyper-parameterを使用しますclass_weight
。
理想的には、カットオフの選択を避け、分類子に基づいて決定するときに適用するカットオフを決定できるエンドユーザーにクラス確率を提供するだけです。
分類子を比較するためのより良いメトリックは、適切なスコアリング関数です。https://en.wikipedia.org/wiki/Scoring_ruleおよびscore()
svm分類子モジュールのメソッドを参照してくださいsklearn.svm.SVC
。
多くの予測モデルと同様に、SVMは確率スコアを出力し、確率にしきい値を適用して、正または負のラベルに変換します。
@Sycoraxがコメントで述べたように、カットオフしきい値を調整して、偽陽性と偽陰性の間のトレードオフを調整できます。
これがRの例です。
library(kernlab)
library(mlbench)
graphics.off()
set.seed(0)
d=mlbench.2dnormals(500)
plot(d)
# using 2nd order polynominal expansion
svp <- ksvm(d$x,d$classes,type="C-svc",kernel="polydot",
kpar=list(degree=2),C=10,prob.model=T)
plot(svp)
p=predict(svp,d$x, type="prob")[,1]
cut_off=0.5
caret::confusionMatrix(d$classes,ifelse(p<cut_off,2,1))
cut_off=0.8
caret::confusionMatrix(d$classes,ifelse(p<cut_off,2,1))
を変更するcut_off
と、混同行列(偽陽性、偽陰性など)が変化することに注意してください。
> caret::confusionMatrix(d$classes,ifelse(p<cut_off,2,1))
Confusion Matrix and Statistics
Reference
Prediction 1 2
1 253 16
2 38 193
Accuracy : 0.892
95% CI : (0.8614, 0.9178)
No Information Rate : 0.582
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.7813
Mcnemar's Test P-Value : 0.004267
Sensitivity : 0.8694
Specificity : 0.9234
Pos Pred Value : 0.9405
Neg Pred Value : 0.8355
Prevalence : 0.5820
Detection Rate : 0.5060
Detection Prevalence : 0.5380
Balanced Accuracy : 0.8964
'Positive' Class : 1
> cut_off=0.8
> caret::confusionMatrix(d$classes,ifelse(p<cut_off,2,1))
Confusion Matrix and Statistics
Reference
Prediction 1 2
1 223 46
2 10 221
Accuracy : 0.888
95% CI : (0.857, 0.9143)
No Information Rate : 0.534
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.7772
Mcnemar's Test P-Value : 2.91e-06
Sensitivity : 0.9571
Specificity : 0.8277
Pos Pred Value : 0.8290
Neg Pred Value : 0.9567
Prevalence : 0.4660
Detection Rate : 0.4460
Detection Prevalence : 0.5380
Balanced Accuracy : 0.8924
'Positive' Class : 1