支持向量机模型将概率得分大于0.1(默认阈值0.5)的实例预测为正值 [英] SVM model predicts instances with probability scores greater than 0.1(default threshold 0.5) as positives

查看:45
本文介绍了支持向量机模型将概率得分大于0.1(默认阈值0.5)的实例预测为正值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在处理一个二进制分类问题。在这种情况下,我使用了从skLearning导入的Logistic回归和支持向量机模型。这两个模型用相同的、不平衡的训练数据进行拟合,并调整了类权重。他们也取得了可比的成绩。当我使用这两个预先训练好的模型来预测新的数据集时。LR模型和SVM模型预测的实例数与正数相似。并且预测的实例共享很大的重叠。

然而,当我查看被归类为阳性的概率得分时,LR的分布是从0.5到1,而SVM从0.1左右开始。我调用函数model.predict(prediction_data)来找出作为每个类和函数预测的实例 model.predict_proba(prediction_data)给出分类为0(否定)和1(位置)的概率分数,并假设它们都有默认阈值0.5。

我的代码中没有错误,我也不知道为什么SVM预测的实例的概率得分也是正数<;0.5。对于如何解释这种情况,您有什么想法吗?

GitHub

当涉及到二进制分类问题时,sklearn中这是一个已知事实,例如,在这些推荐答案问题中报告了这一问题 (herehere)。而且,它也是 在User guide中报道说:

此外,概率估计可能与分数不一致: 分数的argmax可能不是概率的argmax;在二进制分类中,即使Forecast_Proba的输出小于0.5,也可以将样本标记为正类;同样,即使Forecast_Proba的输出大于0.5,也可以将其标记为负类。

或直接在libsvm faq内,据说

这里我们只考虑两类分类。在训练中获得概率信息后,当且仅当决策值>;=0时,我们没有Prob>;=0.5。

总而言之,重点是:

  • 一方面,预测基于decision_function值:如果在新实例上计算的决策值为正,则预测类为正类,反之亦然。

  • 另一方面,正如其中一个GitHub问题所述,np.argmax(self.predict_proba(X), axis=1) != self.predict(X)就是不一致的来源。换句话说,为了在二进制分类问题上始终保持一致性,您需要一个分类器,它的预测基于predict_proba()的输出(这是您考虑calibrators时将得到的结果),如下所示:

     def predict(self, X):
         y_proba = self.predict_proba(X)
         return np.argmax(y_proba, axis=1)
    

我还建议在该主题上this post

这篇关于支持向量机模型将概率得分大于0.1(默认阈值0.5)的实例预测为正值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆