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,因为这是所有系数的总和?

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

编辑和更新:

因此,正如 Mikhail Korobov 在下面指出的那样,我的问题在于对逻辑功能缺乏了解。无论“原始分数”如何,逻辑函数都会强制 [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,则预测“yep”,否则预测“nope”。这就是.predict()方法的作用。

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

于 2016-12-15T19:55:40.817 回答