1

モデルをトレーニングし、それをデプロイしたい「しきい値」を特定しましたが、しきい値がスコアにどのように関係しているかを理解するのに苦労しています。

X = labeled_data[features].reset_index(drop=True)
Y = np.array(labeled_data['fraud'].reset_index(drop=True))

# (train/test etc.. settle on an acceptable model)

grad_des = SGDClassifier(alpha=alpha_optimum, l1_ratio=l1_optimum, loss='log')
grad_des.fit(X, Y)

score_Y = grad_des.predict_proba(X)
precision, recall, thresholds = precision_recall_curve(Y, score_Y[:,1])

では、適合率と再現率としきい値をプロットして、しきい値を 0.4 にすることにします。

閾値とは?

私のモデル係数は、計算による「スコアリング」イベントであると理解していますがcoefficients['x']*event_values['x']、合計は 29 です。しきい値は 0 から 1 の間です。

しきい値から何への変換をどのように理解すればよいでしょうか。生のスコアだと思いますか? 1すべての機能 (すべてがバイナリ) を持つイベントは、すべての係数の合計であるため、29 の計算スコアを持ちますか?

すべてのイベントについてこの「生の」スコア メトリックを計算し、それをしきい値ではなく精度に対してプロットする必要がありますか?

編集および更新:

したがって、私の質問は、ミハイル・コロボフが以下で指摘したように、ロジスティック関数についての理解の欠如にかかっていました. 「生のスコア」に関係なく、ロジスティック関数は [0, 1] の範囲の値を強制します。

その値を探していた「生のスコア」に「アンラップ」するためにscipy.special.logit(0.8) - grad_des.intercept_、行の「スコア」を返すことができます。

4

1 に答える 1

2
  1. 確率は単なるものではありませんcoefficients['x']*event_values['x']ロジスティック関数がこれらのスコアに適用され、[0, 1] の範囲の確率値が取得されます。

  2. predict_proba メソッドはこれらの確率を返します。それらは範囲 [0, 1] にあります。

  3. 具体的なイエス/ノーの予測を得るには、確率のしきい値を選択する必要があります。明白で健全な方法は、0.5 を使用することです。確率が 0.5 より大きい場合は「はい」と予測し、それ以外の場合は「いいえ」と予測します。これが.predict()メソッドの機能です。

  4. precision_recall_curveさまざまな確率しきい値を試行し、それらの適合率と再現率を計算します。精度と再現率のスコアに基づいて、他のしきい値の方がアプリケーションに適していると思われる場合は、0.5 の代わりにそれを使用できますbool_prediction = score_Y[:,1] > threshold

于 2016-12-15T19:55:40.817 に答える