SKlearn 分类器的诅咒

Posted

技术标签:

【中文标题】SKlearn 分类器的诅咒【英文标题】:Curse of the SKlearn Classifiers 【发布时间】:2020-09-09 06:45:44 【问题描述】:

假设我们有 1000 颗珠子,其中 900 颗红色珠子和 100 颗蓝色珠子。当我通过 SKlearn 分类器集成运行问题时,

score = clf.score(X_test, y_test)

他们得出的分数约为 0.9,但是,当我查看预测时,我发现它预测所有这些都是红色的,这就是它得出 %90 准确率的原因!请告诉我我做错了什么?更好的是,发生这种情况意味着什么?有没有更好的方法来衡量准确性?

【问题讨论】:

【参考方案1】:

当您的数据集不平衡并且您选择 accuracy 作为指标时,可能会发生这种情况。原因是always 决定红色,模型在准确性方面实际上做得很好,但正如您所注意到的,模型没用! 为了克服这个问题,您有一些替代方案,例如: 1. 使用其他指标,如 AUC(roc 曲线下面积)等。 2. 对班级使用不同的权重,对少数班级给予更多的权重。 3. 使用简单的过采样或欠采样方法,或其他更复杂的方法,如 SMOTE、ADASYN 等。

你也可以看看this article。 您面临的这个问题在现实世界的应用程序中很常见。

【讨论】:

谢谢你的解释很有帮助【参考方案2】:

您有一个不平衡的分类问题。您写的是,默认情况下分数衡量准确性,但建议查看不平衡数据的召回率和精度。

This video explains it better than I could

上面的视频向您展示了如何衡量数据中的分类性能。要处理数据不平衡,请查看 imblearn 库:

https://imbalanced-learn.readthedocs.io/en/stable/api.html

【讨论】:

感谢您的解释

以上是关于SKlearn 分类器的诅咒的主要内容,如果未能解决你的问题,请参考以下文章

Sklearn:评估 GridSearchCV 中 OneVsRestClassifier 的每个分类器的性能

如何确定 sklearn 中 MLP 分类器的“损失函数”?

sklearn 绘制来自 SVM 分类器的结果

使用具有不同分类器的 sklearn precision_recall_curve 函数

sklearn:朴素贝叶斯分类器的准确性低

sklearn 如何计算二元分类器的 roc 曲线下面积?