Microsoft-cognitive-toolkit-classification-model
CNTK-分類モデル
この章は、CNTKで分類モデルのパフォーマンスを測定する方法を理解するのに役立ちます。 混同行列から始めましょう。
混同行列
混同行列-予測された出力と予測された出力の表は、分類問題のパフォーマンスを測定する最も簡単な方法です。
それがどのように機能するかを理解するために、クレジットカードトランザクションが正常であるか不正であるかを予測するバイナリ分類モデルの混同行列を作成します。 それは次のように示されています-
Actual fraud | Actual normal | |
---|---|---|
Predicted fraud | True positive | False positive |
Predicted normal | False negative | True negative |
ご覧のように、上記のサンプル混同行列には2つの列が含まれています。1つは詐欺のクラス、もう1つは通常のクラスです。 2行と同じように、1つは詐欺のクラスに追加され、もう1つは通常のクラスに追加されます。 以下は、混乱行列に関連する用語の説明です-
- 真陽性-データポイントの実際のクラスと予測されたクラスの両方が1の場合。
- True Negatives -データポイントの実際のクラスと予測されたクラスの両方が0の場合。
- False Positives -データポイントの実際のクラスが0で、予測されたデータポイントのクラスが1の場合。
- False Negatives -データポイントの実際のクラスが1で、予測されたデータポイントのクラスが0の場合。
見てみましょう、混同行列からさまざまなものの数を計算する方法-
- 精度-これは、ML分類モデルによって行われた正しい予測の数です。 それは次の式の助けを借りて計算することができます-
- Precision -予測したすべてのサンプルのうち、正しく予測されたサンプルの数を示します。 それは次の式の助けを借りて計算することができます-
- 再現率または感度-再現率は、ML分類モデルによって返されたポジティブの数です。 つまり、データセット内の不正ケースのうち、モデルによって実際に検出されたものの数がわかります。 それは次の式の助けを借りて計算することができます-
- 特異性-思い出すのとは逆に、ML分類モデルによって返される否定の数を示します。 それは次の式の助けを借りて計算することができます-
Fメジャー
混同行列の代替としてFメジャーを使用できます。 この背後にある主な理由は、リコールとプレシジョンを同時に最大化できないことです。 これらのメトリックの間には非常に強い関係があり、それは次の例の助けを借りて理解することができます-
DLモデルを使用して、細胞サンプルを癌性または正常として分類するとします。 ここで、最大精度に到達するには、予測の数を1に減らす必要があります。 ただし、これにより約100%の精度に到達できますが、再現率は非常に低くなります。
一方、再現率を最大にしたい場合は、できるだけ多くの予測を行う必要があります。 ただし、これにより約100%の再現率が得られますが、精度は非常に低くなります。
実際には、精度と再現率のバランスを取る方法を見つける必要があります。 Fメジャーメトリックは、精度と再現率の間の調和平均を表すため、これを可能にします。
この数式はF1メジャーと呼ばれ、Bと呼ばれる追加の項が1に設定されて、精度と再現率の比率が等しくなります。 想起を強調するために、因子Bを2に設定できます。 一方、精度を強調するために、係数Bを0.5に設定できます。
CNTKを使用した分類パフォーマンスの測定
前のセクションでは、アイリスの花のデータセットを使用して分類モデルを作成しました。 ここでは、混同行列とFメジャーメトリックを使用してそのパフォーマンスを測定します。
混同行列の作成
すでにモデルを作成しているので、混同行列*を含む検証プロセスを同時に開始できます。 まず、 *scikit-learn の confusion_matrix 関数を使用して混同行列を作成します。 そのためには、テストサンプルの実際のラベルと、同じテストサンプルの予測ラベルが必要です。
次の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)
出力
[[We can also use heatmap function to visualise a confusion matrix as follows −
[source,prettyprint,notranslate]
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()
image:/microsoft_cognitive_toolkit/iris.jpg[Iris]
We should also have a single performance number, that we can use to compare the model. For this, we need to calculate the classification error by using *classification_error* function, from the metrics package in CNTK as done while creating classification model.
Now to calculate the classification error, execute the test method on the loss function with a dataset. After that, CNTK will take the samples we provided as input for this function and make a prediction based on input features X_*test*.
[source,result,notranslate]
loss.test([X_test、y_test])
==== Output
[source,result,notranslate]
{'metric':0.36666666666、 'samples':30}
=== Implementing F-Measures
For implementing F-Measures, CNTK also includes function called fmeasures. We can use this function, while training the NN by replacing the cell *cntk.metrics.classification_error*, with a call to *cntk.losses.fmeasure *when defining the criterion factory function as follows −
[source,prettyprint,notranslate]
import cntk @ cntk.Function def criteria_factory(output、target):loss = cntk.losses.cross_entropy_with_softmax(output、target)metric = cntk.losses.fmeasure(output、target)リターンロス、メトリック
After using cntk.losses.fmeasure function, we will get different output for the* loss.test* method call given as follows −
[source,result,notranslate]
loss.test([X_test、y_test])
==== Output
[source,result,notranslate]
{'metric':0.83101488749、 'samples':30}