如何确定 sklearn 逻辑回归的预测概率是否准确?

How to determine if the predicted probabilities from sklearn logistic regresssion are accurate?

我是机器学习的新手,我正在尝试使用 scikit-learn 制作一个简单的逻辑回归模型,其中包含 1 个输入变量 (X) 和一个二元结果 (Y)。我的数据包含 325 个样本,其中 39 个成功,286 个失败。数据被分成训练和测试 (30%) 集。

我的目标实际上是根据我的数据获得任何给定 X 的预测成功概率,而不是分类预测本身。也就是说,我将在我正在构建的单独模型中使用预测概率,并且根本不会使用逻辑回归作为分类器。因此,预测概率实际适合数据很重要。

但是,我无法理解我的模型是否适合数据,或者计算的概率是否真的准确。

我得到以下指标:

如果有人可以澄清我以正确的方式解释这些指标,我将不胜感激 - 也许可以阐明我的模型是好的还是假的。另外,如果我可以做任何其他测试来确定计算的概率是否准确,请告诉我。

如果这些不是很好的指标分数,我非常感谢您就下一步的改进方向提供一些指导。

谢谢!!

您的数据集不平衡,因为失败的次数远远多于成功的次数。一直猜测失败的分类器将获得 86%,因此 92% 的精度并不那么令人印象深刻。

然后混淆矩阵显示了正在发生的事情。 88 次它正确预测失败,8 次错误预测失败。它实际上只有两次正确预测成功。

精度是它做出正确猜测的次数:因此 (88 + 2)/98 = 0.92% 总体。成功的召回率仅为 (8+2) 次总成功中的 2 次(或 20%)。

所以这个模型不太合适。有很多方法可以处理不平衡的数据集,例如对示例进行加权或在预测之前应用先验。混淆矩阵是查看实际情况的好方法。

您的数据存在 class 不平衡问题。在训练您的 classifier 时,您没有指定任何方式来处理它。然而,即使你的准确性很高,也可能是因为失败样本的数量非常大,因此你的测试集也可能被填充。

要处理它,您可以使用 Stratified split in sklearn 来洗牌和拆分数据以解决 class 不平衡问题。

您还可以尝试其他技术来改进您的 classifier,例如 GridSearch as well. You can read more about model evaluation here in this link. For model specific cross-validation techniques check this section in sklearn.

您还可以做的一件事是,与其将准确性用作训练 classifier 的指标,不如将重点放在召回率和精确率上(在您的情况下甚至是真阳性率)。您将需要使用 make_scorer in sklearn. An example can be found here and 。您可能还想查看 F1 分数或 F_beta 分数。

您还可以查看 this Github repository 各种采样技术来解决 sklearn 中的 class 不平衡问题。

您还可以查看 this answer 以了解更多技巧。