我已经训练了一个模型,并确定了我想要部署它的“阈值”,但我无法理解阈值与分数的关系。
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_
并返回该行的“得分”。
答案 0 :(得分:1)
概率不仅仅是coefficients['x']*event_values['x']
- 对这些得分应用logistic function以获得[0,1]范围内的概率值。
predict_proba方法返回这些概率;它们在[0,1]范围内。
要获得具体的是/否预测,必须选择概率阈值。一个明显且理智的方法是使用0.5:如果概率大于0.5,则预测"是的",预测" nope"除此以外。这是.predict()
方法的作用。
precision_recall_curve
尝试不同的概率阈值,并为它们计算精度和召回率。如果基于精确度和召回分数,您认为某个其他阈值对您的应用程序更好,您可以使用它而不是0.5,例如bool_prediction = score_Y[:,1] > threshold
。