sklearn SGDClassifier 模型阈值与模型分数有何关系?

How do sklearn SGDClassifier model thresholds relate to model scores?

我训练了一个模型并确定了一个 'threshold' 我想部署它,但我无法理解阈值与分数的关系。

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])

好的,现在我绘制精度和召回率与阈值的关系图,并决定我希望阈值为 .4

什么是阈值?

我的模型系数,据我所知是'scoring'事件通过计算coefficients['x']*event_values['x'],总和为29。阈值在0和1之间。

我如何理解从阈值到我猜是原始分数的翻译?对于所有特征(都是二元的)具有 1 的事件是否会计算出 29 分,因为这是所有系数的总和?

我是否需要为所有事件计算这个 'raw' 得分指标,然后根据精度而不是阈值绘制它?

编辑和更新:

所以我的问题取决于对逻辑函数缺乏理解,正如 Mikhail Korobov 在下面指出的那样。不管 'raw score' 是什么,logistic 函数都会强制使用 [0, 1] 范围内的值。

为了'unwrap'那个值回到我要找的'raw score',我可以做scipy.special.logit(0.8) - grad_des.intercept_和这个returns的'score'行。

  1. 概率不仅仅是 coefficients['x']*event_values['x'] - 将 logistic function 应用于这些分数以获得 [0, 1] 范围内的概率值。

  2. predict_proba方法returns这些概率;它们在 [0, 1].

  3. 范围内
  4. 要获得具体的 yes/no 预测,必须选择一个概率阈值。一个明显而明智的方法是使用 0.5:如果概率大于 0.5,则预测 "yep",否则预测 "nope"。这就是 .predict() 方法的作用。

  5. precision_recall_curve 尝试不同的概率阈值并为它们计算精度和召回率。如果基于精度和召回分数,您认为其他一些阈值更适合您的应用程序,您可以使用它而不是 0.5,例如bool_prediction = score_Y[:,1] > threshold.