回答:
精度(別名、正の予測値PPV)と再現(別名、感度)の定義を詳しく説明すると、他のクラスから独立した1つのクラスに関連していることがわかります。
リコールまたはsenstitivityは正しくクラスに属するものとして識別例の割合であるC真にクラスに属しているすべてのケースの中で、C。
(本当に「c」に属するケースがあるとすると、これを正しく予測する確率はどれくらいですか?)
精度または正の予測値PPVは、分類子がクラスcに属していると分類者が主張するすべてのケースのうち、クラスcに属していると正しく識別されたケースの割合です。
言い換えれば、クラスcに属すると予測されたケースのうち、どの部分が本当にクラスcに属しているのでしょうか。(予測 " c "を仮定すると、正しい確率はどのくらいですか?)
クラスcに属さないと予測されたケースの負の予測値NPV、どの部分が本当にクラスcに属さないのか?(「cではない」という述語を考えると、正しい確率はどれくらいですか?)
したがって、クラスごとに精度と再現率を計算できます。マルチクラスの混同表の場合、これは対角要素をそれぞれ行と列の合計で割ったものです。
最も簡単な方法は、confusion_matrixをまったく使用しないことです。これは、classification_report()を使用して、必要なものすべてを提供します。
編集:
これはconfusion_matrix()の形式です:
[[TP、FN]
[FP、TN]]
そして分類レポートはすべてこれを与えます
単に結果が必要な場合は、自由にツールを考えすぎて使用しないことをお勧めします。Pythonでこれを行う方法を次に示します。
import pandas as pd
from sklearn.metrics import classification_report
results = pd.DataFrame(
[[1, 1],
[1, 2],
[1, 3],
[2, 1],
[2, 2],
[2, 3],
[3, 1],
[3, 2],
[3, 3]], columns=['Expected', 'Predicted'])
print(results)
print()
print(classification_report(results['Expected'], results['Predicted']))
次の出力を取得するには
Expected Predicted
0 1 1
1 1 2
2 1 3
3 2 1
4 2 2
5 2 3
6 3 1
7 3 2
8 3 3
precision recall f1-score support
1 0.33 0.33 0.33 3
2 0.33 0.33 0.33 3
3 0.33 0.33 0.33 3
avg / total 0.33 0.33 0.33 9
以下は、クラスラベルがA、B、Cであると仮定したマルチクラス混同行列の例です。
A / P A B C合計
A 10 3 4 17
B 2 12 6 20
C 6 3 9 18
合計18 18 19 55
次に、PrecisionとRecallの3つの値をそれぞれ計算し、Pa、Pb、Pcと呼びます。同様に、Ra、Rb、Rc。
精度= TP /(TP + FP)であることがわかっているため、Paの場合、真の陽性はAとして予測される実際のA、つまり10であり、その列の残りの2つのセルは、BでもCでも、偽陽性になります。そう
Pa = 10/18 = 0.55 Ra = 10/17 = 0.59
現在、クラスBの精度と再現率はPbとRbです。クラスBの場合、真陽性はBとして予測される実際のBです。つまり、値12を含むセルであり、その列の2つのセルの残りが偽陽性になります。
Pb = 12/18 = 0.67 Rb = 12/20 = 0.6
同様にPc = 9/19 = 0.47 Rc = 9/18 = 0.5
分類子の全体的なパフォーマンスは、平均精度と平均再現率によって決まります。このために、各クラスの精度値に、そのクラスの実際のインスタンス数を乗算し、それらを追加して、インスタンスの総数で割ります。お気に入り 、
平均精度=(0.55 * 17 + 0.67 * 20 + 0.47 * 18)/ 55 = 31.21 / 55 = 0.57平均再現率=(0.59 * 17 + 0.6 * 20 + 0.5 * 18)/ 55 = 31.03 / 55 = 0.56
それが役に立てば幸い