sklearn SGDClassifier模型阈值如何与模型得分相关联?

时间:2016-12-15 19:27:41

标签: python scikit-learn classification gradient-descent

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

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

什么是门槛?

我的模型系数,我理解的是通过计算coefficients['x']*event_values['x']来'得分'事件,总计达到29。阈值介于0和1之间。

我如何理解从阈值到什么的翻译,我猜是原始分数?所有要素(均为二进制)的1事件的计算得分为29,因为这是所有系数的总和吗?

我是否需要为所有事件计算此“原始”得分指标,然后根据精度而非阈值对其进行绘制?

编辑和更新:

所以我的问题取决于对物流功能缺乏了解,正如Mikhail Korobov在下面指出的那样。无论“原始得分”如何,逻辑函数都会强制[0,1]范围内的值。

为了将这个值“解包”回我想要的“原始分数”,我可以scipy.special.logit(0.8) - grad_des.intercept_并返回该行的“得分”。

1 个答案:

答案 0 :(得分:1)

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

  2. predict_proba方法返回这些概率;它们在[0,1]范围内。

  3. 要获得具体的是/否预测,必须选择概率阈值。一个明显且理智的方法是使用0.5:如果概率大于0.5,则预测"是的",预测" nope"除此以外。这是.predict()方法的作用。

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