DET曲線

目次

1. DET曲線とは
2. sci-kit learnのDET曲線
3. 実験
_3.1 環境構築
_3.2 データ生成
_3.3 モデル作成
_3.4 DET曲線の計算
_3.5 DET曲線の可視化

 

1. DET曲線とは

DET曲線とは、Detection Error Tradeoff curvesの略称で、二項分類システムのエラー率のグラフプロットであり、偽陽性率(False positive rate)と偽陰性率(False negative rate)をプロットします。DET曲線には、2種類の試行の基礎となるスコア分布が正常である場合、曲線が直線になるという特性があります。

 

2. sci-kit learnのDET曲線

sklearn.metrics.det_curve(y_true, y_score, pos_label=None, sample_weight=None)

パラメーター

y_truendarray of shape (n_samples,)

ラベルが{-1、1}または{0、1}のいずれでもない場合は、pos_labelを明示的に指定する必要があります。

 

y_scorendarray of shape of (n_samples,)

ターゲットスコアは、正のクラスの確率推定値、信頼値、またはしきい値以外の決定の尺度(一部の分類子の「decision_function」によって返される)のいずれかです。

 

pos_labelint or str, default=None

ポジティブクラスのラベル。 pos_label = Noneの場合、y_trueが{1、1}または{0、1}の場合、pos_labelは1に設定されます。それ以外の場合は、エラーが発生します。

 

sample_weightarray-like of shape (n_samples,), default=None

サンプルの重み。

 

sklearn.metrics.plot_det_curve(estimatorXy*sample_weight=Noneresponse_method=’auto’name=Noneax=Nonepos_label=None**kwargs)

パラメーター

estimatorestimator instance

適合分類器または最後の推定量が分類器である適合パイプライン。

 

X{array-like, sparse matrix} of shape (n_samples, n_features)

入力値

 

yarray-like of shape (n_samples,)

目標値

 

sample_weightarray-like of shape (n_samples,), default=None

サンプルの重み。

 

response_method{‘predict_proba’, ‘decision_function’, ‘auto’} default=’auto’

予測されるターゲット応答としてpredict_probaまたはdecision_functionのどちらを使用するかを指定します。 「auto」に設定されている場合、predict_probaが最初に試行され、存在しない場合は、decision_functionが次に試行されます。

 

namestr, default=None

ラベル付け用のDET曲線の名前。 Noneの場合、推定量の名前を使用します。

 

axmatplotlib axes, default=None

プロットするオブジェクトを軸します。 Noneの場合、新しい図と軸が作成されます。

 

pos_labelstr or int, default=None

ポジティブクラスのラベル。 pos_label = Noneの場合、y_trueが{1、1}または{0、1}の場合、pos_labelは1に設定されます。それ以外の場合は、エラーが発生します。

 

3. 実験

環境:Colab

データセット:1,000件のデータセットを生成します。

モデル:svm

モデル評価:DET曲線

 

3.1 環境構築

Sci-kit learnのバージョンを更新します。

!pip install -U scikit-learn==0.24.1

 

Sci-kit learnのバージョンを確認します。

import sklearn

sklearn.__version__

0.24.1

 

ライブラリインポート

import matplotlib.pyplot as plt

from sklearn.datasets import make_classification

from sklearn.model_selection import train_test_split

from sklearn import datasets, metrics, model_selection, svm

from sklearn.metrics import plot_det_curve

 

3.2 データ生成

1000件のセータセットを生成します。

N_SAMPLES = 1000

 

X, y = make_classification(

n_samples=N_SAMPLES, n_features=2, n_redundant=0, n_informative=2,

random_state=1, n_clusters_per_class=1)

 

print(X.shape, y.shape)

(1000, 2) (1000,)

 

学習とテストデータを分けます。

X_train, X_test, y_train, y_test = train_test_split(

X, y, test_size=.4, random_state=0)

 

print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)

(600, 2) (400, 2) (600,) (400,)

 

3.3 モデル作成

SVMモデルを学習します。

clf = svm.SVC(random_state=0)

clf.fit(X_train, y_train)

 

3.4 DET曲線の計算

det_curveでDET曲線を計算します。下記の出力を計算します。

False positive rate (FPR):偽陽性率

False negative rate (FNR):偽陰性率

Threshold:最小になる閾値

y_pred = clf.predict(X_test)

fpr, fnr, thresholds = metrics.det_curve(y_test, y_pred)

print(fpr, fnr, thresholds)

[1.         0.14691943] [0.         0.03174603] [0 1]

 

3.5 DET曲線の可視化

DET曲線図をプロットします。

metrics.plot_det_curve(clf, X_test, y_test)

plt.show()

 

担当者:KW
バンコクのタイ出身 データサイエンティスト
製造、マーケティング、財務、AI研究などの様々な業界にPSI生産管理、在庫予測・最適化分析、顧客ロイヤルティ分析、センチメント分析、SaaS、PaaS、IaaS、AI at the Edge の環境構築などのスペシャリスト