2016-12-22 15 views
2

私はF1スコアがsklearnである理由を理解しようとしています。なぜこれらの三つの値私は理解していないsklearnを使ってF1スコアを計算する

0.785744255639 0.769527615775 0.984532095901 

F1 = 2 * (precision * recall)/(precision + recall) 

マイコード:

from sklearn.metrics import f1_score, precision_score, recall_score 
... 
fmeasure1 = f1_score(true_output, predicted_output, average="macro") 
fmeasure2 = f1_score(true_output, predicted_output, average="micro") 

precision = precision_score(true_output, predicted_output, average="macro") 
recall = recall_score(true_output, predicted_output, average="macro") 

print 2*(precision*recall)/(precision + recall), fmeasure1, fmeasure2 

私は私のデータの取得値があるが、私はそれは次のように計算されていることを理解します互いに異なる。私は文書hereを読んでみましたが、私はまだかなり失われています。

私のデータセットはmutliクラスであり、本質的に高度に不均衡です。ここでの値のうち、「正しい」値はどれですか、また拡張子は「平均」(つまり「なし」、「ミクロ」、「マクロ」、「ウェイト」)のどちらのパラメータですか?

ありがとうございました。洞察力は非常に貴重です。戻り値で

答えて

2

ルック:

Returns:  
f1_score : float or array of float, shape = [n_unique_labels] 
F1 score of the positive class in binary classification or weighted average of the F1 scores of each class for the multiclass task. 

各値は、その特定のクラスのF1スコアであるため、各クラスが異なるスコアと予測することができます。

最高のスコアは何ですか?サイドノートでは

best value at 1 and worst score at 0.[ \[From documentation\]][1] 

あなたは非常に不均衡なデータを扱っている場合、それは許可されていれば、あなたの既存のデータからサンプリング方法を検討して検討し、または単にサブサンプルなければならない設定します。

あなたが予測average='weighted'の平均場合:

sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average='weighted') 
+0

を私は理解していません。各F1スコアは特定のクラスのためのものですか? – meraxes

+0

ドキュメントの6行目:マルチクラスとマルチラベルの場合、これは各クラスのF1スコアの加重平均です。 – SerialDev

+0

申し訳ありませんが、入力いただきありがとうございます。私の質問はまだ残っています:なぜこれらの値が返される値と異なるのですか?2 *(precision * recall)/(precision + recall)? – meraxes

関連する問題