我是机器学习的新手,我正在尝试使用scikit-learn来制作一个简单的逻辑回归模型,其中包含1个输入变量(X)和一个二元结果(Y)。我的数据包括325个样本,39个成功和286个失败。数据被分成训练和测试(30%)集。
我的目标实际上是根据我的数据获得任何给定X的预测成功概率,而不是分类预测本身。也就是说,我将把预测的概率用于我正在构建的单独模型中,并且根本不会使用逻辑回归作为分类器。因此,预测的概率实际上符合数据非常重要。
但是,我无法理解我的模型是否适合数据,或者计算的概率是否真实准确。
我得到以下指标:
分类准确度:metrics.accuracy_score(Y_test,预测) = 0.92。 我对这个指标的理解是模型很有可能做出正确的预测,所以我觉得这个模型非常合适。
记录丢失:cross_val_score(LogisticRegression(),X,Y,得分='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]
我的理解是,对角线给出了训练集中正确预测的数量,所以看起来没问题。
报告: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
根据该分类报告,该模型具有良好的精度,因此非常适合。 我不确定如何解释召回或者如果这个报告对我的模型来说是个坏消息 - sklearn文档指出召回是一种模型能力,可以找到所有正样本 - 因此预测为1时得分为0.2意味着它只有20%的时间才能找到积极因素?这听起来非常不适合数据。
如果有人能够澄清我正在以正确的方式处理这些指标,我真的很感激 - 并且可能会说明我的模型是好还是虚假。此外,如果我还有其他测试可以确定计算的概率是否准确,请告诉我。
如果这些不是很好的度量标准分数,我真的很感谢在改进方面的下一步方向。
谢谢!
答案 0 :(得分:5)
您的数据设置不平衡,因为失败多于成功。一直猜测失败的分类器将获得86%,因此92%的精度并不令人印象深刻。
然后混淆矩阵显示正在发生的事情。 88次正确预测失败,8次错误预测失败。实际上只有两次才能正确预测成功。
精确度是它所做出的猜测次数是正确的:所以(88 + 2)/ 98 =总体上0.92%。成功召回仅占(8 + 2)总成功中的2成(或20%)。
因此该模型不太合适。有许多方法可以处理不平衡的数据集,例如加权示例或应用预测之前的数据集。混淆矩阵是了解真实情况的好方法。
答案 1 :(得分:3)
您的数据存在类别不平衡问题。在训练分类器时,您没有指定任何方式来处理它。但是,即使您的准确性很高,也可能是因为失败样本的数量非常大,因此您的测试集也可能会填充它。
要解决此问题,您可以使用Stratified split in sklearn对数据进行随机播放和拆分,以解决类不平衡问题。
您还可以尝试其他技术来改进分类器,例如GridSearch。您可以阅读有关模型评估here in this link的更多信息。对于特定于模型的交叉验证技术,请检查this section in sklearn.。
您可以做的另一件事是,您可以专注于回忆和精确度(或者甚至是您的情况下的真阳性率),而不是将精确度作为训练分类器的指标。您需要使用make_scorer in sklearn。可以找到一个示例here和here。您可能还想查看F1分数或F_beta分数。
您还可以查看this Github repository各种采样技巧,以解决sklearn中的类不平衡问题。
您还可以结帐this answer以获取更多技巧。