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

non*_*one 1 python machine-learning scikit-learn logistic-regression

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

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

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

我得到以下指标:

  • 分类准确度:metrics.accuracy_score(Y_test,预测) = 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,预测) =

            [  88,  0]
               [8,  2]
    
    Run Code Online (Sandbox Code Playgroud)

    我在这里的理解是,对角线给出了训练集中正确预测的数量,所以这看起来不错.

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

                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
    
    Run Code Online (Sandbox Code Playgroud)

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

如果有人能够澄清我正在以正确的方式处理这些指标,我真的很感激 - 也许可以说明我的模型是好还是虚假.此外,如果我还有其他测试可以确定计算的概率是否准确,请告诉我.

如果这些不是很好的度量标准分数,我真的很欣赏在改进方面的下一步方向.

谢谢!!

Rya*_*Jay 5

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

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

精确度是它所做的正确猜测的数量:所以(88 + 2)/ 98 =总体上0.92%.成功召回仅占(8 + 2)总成功中的2成(或20%).

所以这个模型不太适合.有许多方法可以处理不平衡的数据集,例如加权示例或应用预测之前的数据集.混淆矩阵是了解真实情况的好方法.