支持向量机模型将概率得分大于0.1(默认阈值0.5)的实例预测为正值 [英] SVM model predicts instances with probability scores greater than 0.1(default threshold 0.5) as positives
问题描述
我正在处理一个二进制分类问题。在这种情况下,我使用了从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
中这是一个已知事实,例如,在这些推荐答案问题中报告了这一问题
(here和here)。而且,它也是
在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屋!