CNTK-分類モデル
この章は、CNTKで分類モデルのパフォーマンスを測定する方法を理解するのに役立ちます。混同行列から始めましょう。
混同行列
混同行列-予測出力と期待出力の表は、分類問題のパフォーマンスを測定する最も簡単な方法であり、出力は2つ以上のタイプのクラスである可能性があります。
それがどのように機能するかを理解するために、クレジットカード取引が正常であったか不正であるかを予測するバイナリ分類モデルの混同行列を作成します。次のように表示されます-
実際の詐欺 | 実際の正常 | |
---|---|---|
Predicted fraud |
真のポジティブ |
偽陽性 |
Predicted normal |
偽陰性 |
真のネガティブ |
ご覧のとおり、上記のサンプル混同行列には2つの列が含まれています。1つはクラス詐欺用で、もう1つはクラス通常用です。2つの行があるのと同じように、1つはクラス詐欺用に追加され、もう1つはクラス通常用に追加されます。以下は、混同行列に関連する用語の説明です。
True Positives −データポイントの実際のクラスと予測されたクラスの両方が1の場合。
True Negatives −データポイントの実際のクラスと予測されたクラスの両方が0の場合。
False Positives −データポイントの実際のクラスが0で、データポイントの予測クラスが1の場合。
False Negatives −データポイントの実際のクラスが1で、データポイントの予測クラスが0の場合。
混同行列からさまざまなものの数を計算する方法を見てみましょう-
Accuracy−これは、ML分類モデルによって行われた正しい予測の数です。次の式を使用して計算できます-
Precision-予測したすべてのサンプルのうち、正しく予測されたサンプルの数がわかります。次の式を使用して計算できます-
Recall or Sensitivity−リコールは、ML分類モデルによって返されたポジティブの数です。つまり、データセット内の不正事例のうち、モデルによって実際に検出されたものの数がわかります。次の式を使用して計算できます-
Specificity−思い出すのとは反対に、ML分類モデルによって返されるネガの数を示します。次の式を使用して計算できます-
Fメジャー
混同行列の代わりにFメジャーを使用できます。この背後にある主な理由は、再現率と適合率を同時に最大化できないことです。これらの指標の間には非常に強い関係があり、それは次の例の助けを借りて理解することができます-
DLモデルを使用して、細胞サンプルを癌性または正常として分類するとします。ここで、最大の精度に到達するには、予測の数を1に減らす必要があります。ただし、これにより約100%の精度に到達できますが、再現率は非常に低くなります。
一方、最大のリコールを達成したい場合は、できるだけ多くの予測を行う必要があります。これにより、約100%のリコールに到達できますが、精度は非常に低くなります。
実際には、適合率と再現率のバランスをとる方法を見つける必要があります。Fメジャーメトリックは、適合率と再現率の間の調和平均を表すため、これを行うことができます。
この式はF1メジャーと呼ばれ、適合率と再現率の比率を等しくするために、Bと呼ばれる追加の項が1に設定されます。想起を強調するために、係数Bを2に設定できます。一方、精度を強調するために、係数Bを0.5に設定できます。
CNTKを使用した分類パフォーマンスの測定
前のセクションでは、アイリスフラワーデータセットを使用して分類モデルを作成しました。ここでは、混同行列とFメジャーメトリックを使用してそのパフォーマンスを測定します。
混同行列の作成
すでにモデルを作成しているので、検証プロセスを開始できます。 confusion matrix、同じように。まず、の助けを借りて混同行列を作成しますconfusion_matrix からの機能 scikit-learn。このためには、テストサンプルの実際のラベルと同じテストサンプルの予測ラベルが必要です。
次のPythonコードを使用して混同行列を計算しましょう-
from sklearn.metrics import confusion_matrix
y_true = np.argmax(y_test, axis=1)
y_pred = np.argmax(z(X_test), axis=1)
matrix = confusion_matrix(y_true=y_true, y_pred=y_pred)
print(matrix)
出力
[[10 0 0]
[ 0 1 9]
[ 0 0 10]]
ヒートマップ関数を使用して、次のように混同行列を視覚化することもできます。
import seaborn as sns
import matplotlib.pyplot as plt
g = sns.heatmap(matrix,
annot=True,
xticklabels=label_encoder.classes_.tolist(),
yticklabels=label_encoder.classes_.tolist(),
cmap='Blues')
g.set_yticklabels(g.get_yticklabels(), rotation=0)
plt.show()
また、モデルを比較するために使用できる単一のパフォーマンス数値が必要です。このために、を使用して分類誤差を計算する必要がありますclassification_error 分類モデルの作成中に行われた、CNTKのメトリックパッケージからの関数。
次に、分類エラーを計算するために、データセットを使用して損失関数でテストメソッドを実行します。その後、CNTKは、この関数の入力として提供したサンプルを取得し、入力特徴X_に基づいて予測を行います。test。
loss.test([X_test, y_test])
出力
{'metric': 0.36666666666, 'samples': 30}
Fメジャーの実装
F-Measuresを実装するために、CNTKにはfmeasuresと呼ばれる関数も含まれています。セルを交換することでNNをトレーニングしながら、この機能を使用できますcntk.metrics.classification_error、への呼び出しで cntk.losses.fmeasure 基準ファクトリ関数を次のように定義する場合-
import cntk
@cntk.Function
def criterion_factory(output, target):
loss = cntk.losses.cross_entropy_with_softmax(output, target)
metric = cntk.losses.fmeasure(output, target)
return loss, metric
cntk.losses.fmeasure関数を使用した後、異なる出力が得られます。 loss.test 次のように与えられたメソッド呼び出し-
loss.test([X_test, y_test])
出力
{'metric': 0.83101488749, 'samples': 30}