2

マルチラベル分類器によって生成された結果があり、Python を使用してミクロ精度とマクロ精度、リコール、および F1 スコアを計算したいのですがsklearn.metrics、その方法がわかりません。

2 つのバイナリ スパース行列がdataOUTありdataGT、それぞれが同じデータセットの分類結果とグラウンド トゥルースを表しています。両方の行列のサイズはnLabels X nSamplesです。各サンプルは、1 つ以上のラベルでラベル付けできます。分類器が th 番目のサンプルをth ラベルでラベル付けした場合もそうですdataOUT[i,j]1ji0

特定の class について、から th 行を抽出することで、通常の精度、再現率、およびiF スコアを簡単に計算でき、それらを にフィードできます。たとえば、次のようになります。idataOUTdataGTsklearn.metrics.precision_recall_fscore_support

import numpy as np
from sklearn.metrics import precision_recall_fscore_support

iLabel = 5 # some specific label

yOUT = np.asarray(dataOUT[iLabel,:].todense()).reshape(-1)
yGT = np.asarray(dataGT[iLabel,:].todense()).reshape(-1)

ps,rs,fs,ss = precision_recall_fscore_support(yGT,yOUT)
p = ps[1]   # Precision for iLabel
r = rs[1]   # Recall for iLabel
f1 = fs[1]  # F1 for iLabel

しかし、データセット全体のミクロおよびマクロ測定値を計算するにはどうすればよいですか(dataOUT,dataGT)。ラベルごとに個別に?

どうも!

4

1 に答える 1

1

scikit-learn のメトリクスのほとんどは、マルチラベル引数をサポートしています。 sklearn.metrics.precision_recall_fscore_support ドキュメントに次のように記載されている場合:

1d 配列のような、またはラベル インジケーター配列/疎行列

メトリックにyマトリックス全体とグラウンドトゥルーマトリックスを入力するだけです。しかし、これらの行列は [n_samples, n_labels] の形をしている必要があります。つまり、その行列のすべての行が同じサンプルの一連のラベルに対応し、すべての列が何らかのラベルに対応している必要があります。したがって、行列を転置する必要があります。

ps,rs,fs,ss = precision_recall_fscore_support(dataGT.T, dataOUT.T)

このマルチクラスおよびマルチラベル分類もお読みください

于 2015-11-03T14:00:47.197 に答える