5

最近準備したデータセットで既製のアルゴリズムの精度と再現率を計算しています。

これはバイナリ分類の問題であり、作成した各分類子の精度、再現率、および f スコアを計算しようとしています。

test_x, test_y, predics, pred_prob,score = CH.buildBinClassifier(data,allAttribs,0.3,50,'logistic')

build classifier メソッドは、基本的に分類器を構築し、トレーニング データに適合させ、test_x (テスト データの特徴)、test_y (グラウンド トゥルース ラベル)、predict (分類器によって行われた予測)、red_prob (LogisiticRegression.predict_probaメソッドからの予測確率) を返します。 .

以下は、精度と再現率を計算するためのコードです。

from sklearn.metrics import precision_recall_curve

pr, re, _ = precision_recall_curve(test_y,pred_prob,pos_label=1)
pr
(array([ 0.49852507,  0.49704142,  0.49554896,  0.49702381,  0.49850746,
         0.5       ,  0.5015015 ,  0.50301205,  0.50453172,  0.50606061,
         . . . . . . . 
         0.875     ,  1.        ,  1.        ,  1.        ,  1.        ,
         1.        ,  1.        ,  1.        ,  1.        ])
re
array([ 1.        ,  0.99408284,  0.98816568,  0.98816568,  0.98816568,
         0.98816568,  0.98816568,  0.98816568,  0.98816568,  0.98816568,
         . . . . . . . 
         0.04142012,  0.04142012,  0.03550296,  0.0295858 ,  0.02366864,
         0.01775148,  0.01183432,  0.00591716,  0.        ]))

なぜ精度配列と再現率配列なのかわかりません。それらは単一の数字であるべきではありませんか?

精度はtpf/(tpf+fpf)定義として計算され、同様にリコールされるためですか?

次のコードで精度と再現率の平均を計算することは知っていますが、tpf、fpf、精度、再現率の代わりに配列を見ると、何が起こっているのか疑問に思います。

from sklearn.metrics import precision_recall_fscore_support as prf

precision,recall,fscore,_ = prf(test_y,predics,pos_label=1,average='binary')

編集:ただし、パラメーターがないaveragepos_label、各クラスの精度が報告されます。誰かがこれら 2 つの方法の出力の違いを説明できますか?

4

2 に答える 2

1

二項分類の問題では、pred_prob はインスタンスが各クラスに含まれる確率であるため、実際には予測値 (クラス) はこの確率と、しきい値と呼ばれるもう 1 つの値に依存します。pred_prob がしきい値よりも大きいすべてのインスタンスは、1 つのクラスに分類され、小さいクラスには別のクラスに分類されます。デフォルトのしきい値は 0.5 です。

したがって、しきい値を変更すると、異なる予測結果が得られます。多くの問題では、しきい値を調整することで、より良い結果が得られる場合があります。これが、precision_recall_curve を提供するものです。

于 2016-09-05T05:06:36.160 に答える