系列ラベリングのPrecision / Recall / Fってどうやってやるんだっけ?
定期的に忘れるけど、定期的に必要になる。なので、書き残して置こうと思った。
そもそもなんのために?
言語処理の系列ラベリングの評価方法は2値分類と違うところがある。
それは、Confusion matrixの項目のカウント基準だ。
なので、系列ラベリングモデルの性能評価をするときには、2値分類とは違った方法が必要。
どうやって計算するのが簡単?
Pypiにいつの間にか系列ラベリング評価用パッケージが上がっていた。その名も seqeval。
開発者はHirosan。いつもお世話になってるっす(パッケージ的な意味で)
使い方はくっそ簡単なので、あえてここではサンプルコードも載せない。
このパッケージが出てくる前は、scikit-learnの2値分類用の評価クラスはいじって、なんやらして評価クラスを作っていたっけ。
簡単にできるようになって、本当にありがたい。
Confusion Matrixの要素ってどうやって計算するんだっけ?
ここらへんの行にTP / FP / FN / TNの定義が書いてある。
1 2 3 4 5 6 7 |
performace_dict['TP'] = sum(y_t == y_p for y_t, y_p in zip(y_true, y_pred) if ((y_t != 'O') or (y_p != 'O'))) performace_dict['FP'] = sum(y_t != y_p for y_t, y_p in zip(y_true, y_pred)) performace_dict['FN'] = sum(((y_t != 'O') and (y_p == 'O')) for y_t, y_p in zip(y_true, y_pred)) performace_dict['TN'] = sum((y_t == y_p == 'O') for y_t, y_p in zip(y_true, y_pred)) |
言葉で書き下してみる。
ちなみに「Gold」とは正解ラベルのこと。「Prediction」とは予測ラベルを意味する。
- TP: まず、GoldかPredictionがOラベルではないこと。そして、GoldとPredictionが一致している。この時+1カウント
- FP: GoldとPredictionが一致していない。この時 +1カウント
- FN: GoldがOではなく、PredictionがOのとき +1カウント
- TN: GoldとPredictionがどちらもOのとき、+1カウント
TP / FP / FN / TNの定義を定期的に忘れるんだけど?
定期的に意味を忘れてConfustion matrixを参照しないといけなくなる。
ここらで、きっちりと覚えておきたいので、覚え方を見直ししておいた。
そもそもTはTrue で FはFalseのこと。PositiveとNegativeが予測ラベルの結果を示す。
- TP: True Positive「予測=Positiveという予測がTrue」な場合。つまり、「Positiveという予測が正しい場合」
- FP: False Positive「予測=Positiveという予測がFalse」な場合。つまり、「Positiveという予測が誤りの場合」
- FN: False Negative「予測=Negativeという予測がFalse」な場合。つまり、「Negativeという予測が誤りの場合」
- TN: True Negative 「予測=Negativeという予測がTrue」な場合。つまり、「Negativeという予測が正しい場合」
ディスカッション
コメント一覧
まだ、コメントがありません