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

标签 python machine-learning scikit-learn logistic-regression

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

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

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

我得到以下指标:

  • 分类准确度:metrics.accuracy_score(Y_test, predicted) = 0.92。 我对这个指标的理解是,该模型做出正确预测的可能性很高,因此在我看来该模型非常合适。

  • 对数损失:cross_val_score(LogisticRegression(), X, Y, scoring='neg_log_loss', cv=10) = -0.26 这对我来说可能是最令人困惑的指标,显然也是最重要的指标,因为它是预测概率的准确性。我知道分数越接近零越好——但有多接近才算足够接近?

  • AUC:metrics.roc_auc_score(Y_test, probs[:, 1]) = 0.9。同样,这看起来不错,因为 ROC 分数越接近 1 越好。

  • 混淆矩阵:metrics.confusion_matrix(Y_test, predicted) =

            [  88,  0]
               [8,  2]
    

    我的理解是对角线给出了训练集中正确预测的数量,所以这看起来没问题。

  • 报告:metrics.classification_report(Y_test, predicted) =

                precision    recall  f1-score   support
    
    0.0       0.92      1.00      0.96        88
    1.0       1.00      0.20      0.33        10
    
    avg / total       0.93      0.92      0.89        98
    

    根据这份分类报告,该模型具有良好的精度,因此非常适合。 我不确定如何解释召回,或者这份报告对我的模型来说是否是个坏消息——sklearn 文档指出召回是一种找到所有正样本的模型能力——所以预测为 1 的分数为 0.2 意味着它只在 20% 的时间内找到阳性结果?这听起来非常不适合数据。

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

如果这些不是很好的指标分数,我真的很感激关于下一步改进的方向。

谢谢!!

最佳答案

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

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

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

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

关于python - 如何确定 sklearn 逻辑回归的预测概率是否准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46392369/

相关文章:

python - Jupyter 和 IPython : What does %matplotlib inline do?

python - 向量化 numpy 多条件嵌套循环

python-3.x - GCP 中的训练对象检测终止并显示 : TypeError: Expected binary or unicode string, 没有

machine-learning - 如何使用 Java 中的 Weka 将文本转换为 TF-IDF 格式?

python - 以这种方式循环遍历 SQL 结果会返回期望的结果吗?

python - 如何在 groupby 和滚动总和之后创建一个包含值的新列?

hadoop - Windows 上的 Mahout+Hadoop

python-2.7 - sklearn 计数向量化器

python-3.x - ImportError:无法从“sklearn.base”导入名称“MultiOutputMixin”

python - 来自 sklearn 的 train_test_split 的 "Stratify"参数无法正常工作?