我使用SciKit作为库来处理分类算法,如:NB,SVM.
这是" SPAM和HAM " 电子邮件的一个非常好的和精细的二进制分类实现:
confusion += confusion_matrix(test_y, predictions) score = f1_score(test_y, predictions, pos_label=SPAM) //note in my case 3-classes I do not need to set [pos_label]
如果我有三个类,如{SPAM,HAM,NORMAL}而不是两个,那么:我如何调整该代码以找到每个类的F1-Score以及所有类的平均值.
这里的问题是F1测量对多类问题没有多大意义.它是精确度和召回之间的调和平均值.
精确度是(随机选择的)正分类实例为正的概率.
召回是(随机选择的)阳性实例被分类为阳性的概率.
这些定义本质上是二进制的.通常我会分别为每个班级提供F1测量.这使您还可以决定哪种类型的故障是可以接受的.根据我的个人经验,我实际上会给予精确和回忆.在您的示例中,将火腿电子邮件分类为垃圾邮件会非常有害.因此,SpAM上的Precision比召回更重要.
为了更全面的介绍也包含了一系列措施,你也可以检查http://rali.iro.umontreal.ca/rali/sites/default/files/publis/SokolovaLapalme-JIPM09.pdf