什么是“对于某些标签,真阳性和误报的总和等于零。”意思?

时间:2014-06-22 05:50:09

标签: python machine-learning scikit-learn

我使用scikit学习使用StratifiedKFold进行交叉验证来计算f1 score,但它表示我的某些标签有真阳性和误差的总和等于某些标签为零。我以为使用StratifiedKFold应该阻止这个?为什么我会遇到这个问题?

另外,有没有办法从cross_val_score函数中获取混淆矩阵?

1 个答案:

答案 0 :(得分:0)

您的分类器可能将所有数据点分类为负数,因此没有正数。您可以通过查看混淆矩阵(docs and example here)来检查是否是这种情况。如果没有关于您的数据和分类器选择的信息,很难说出发生了什么,但常见的原因包括:

  • 代码中的错误。检查您的训练数据是否包含负数据点,以及这些数据点是否包含非零功能。

  • 不合适的分类器参数。如果使用Naive Bayes,请检查您的班级偏见。如果使用SVM,请尝试在参数值上使用网格搜索。

sklearn classification_report函数可能派上用场(docs)。

重新提出第二个问题:分层确保每个折叠包含来自所有类别的roughly the same proportion of data points。这并不意味着您的分类器将执行合理。


更新

在分类任务中(尤其是当存在类不平衡时),您将以精确度进行召回。根据您的应用程序,您可以设置分类器,使其在大多数时间(即高精度)处理得很好,或者它可以检测到您关注的几个点(即较小类的高召回率)。例如,如果任务是将支持电子邮件转发给正确的部门,则需要高准确性。将您每年收到的电子邮件错误分类是有些可接受的,因为您只会让一个人感到不安。如果你的任务是在儿童论坛上发现性侵犯者的帖子,你肯定不想错过任何一个,即使价格是一些帖子会被错误地标记。底线:您应该针对您的应用进行优化。

您是微观或宏观平均召回吗?在前一种情况下,频繁类别的权重会更多(类似于优化准确性),而后者所有类别的权重都相同。