Sklearn SGDClassifier模型阈值如何与模型得分有关



我已经训练了一个模型并确定了我想在以下部署的'阈值',但是我很难理解阈值与分数的关系。

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. 概率不仅仅是coefficients['x']*event_values['x']-将逻辑函数应用于这些分数,以在[0,1]范围内获取概率值。

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

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

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

相关内容

  • 没有找到相关文章

最新更新