只有 2 个类时使用 average='weighted' 是错误的吗?

数据挖掘 机器学习 文本挖掘 准确性
2022-03-04 15:08:02

在“Text Analytics with Python”一书中,作者提供了model_evaluation_utils.py

在 .py 的代码中,他这样做:

metrics.precision_score(true_labels, predicted_labels,average='weighted')

我对此有两个问题:

1-根据文档average='weighted'只能在有 2 个以上的类时使用,对吗?为什么他只使用 2 个类时使用average='weighted'

2-为什么我跑步时得到不同的结果?

print('Recall:', metrics.recall_score(test_sentiments,predicted_sentiments,pos_label='positive'))
print('Recall:', metrics.recall_score(test_sentiments,predicted_sentiments,average='weighted'))

(我的数据中只有 2 个类) 在此处输入图像描述

ps:我认为通过使用average='weighted'他给出了错误的结果,因为代码不知道哪个是正类,这里是model_evaluation_utils.py https://github的代码。 com/dipanjanS/practical-machine-learning-with-python/blob/master/notebooks/Ch05_Building_Tuning_and_Deploying_Models/model_evaluation_utils.py

1个回答

如您所知,精度分数(或召回率或 f 分数)是针对单个类的,而在函数中,参数pos_label说明了哪个类。

现在我要猜测 whenpos_label没有提供,而是average提供了该函数可能会计算每个类的度量,然后返回这些值的平均值

可以使用任意数量的类计算加权平均值,并且由于没有提供预定义的权重,我们可以合理地假设该函数将两个类的比例作为权重。所以结果:

metrics.recall_score(test_sentiments,predicted_sentiments,average='weighted')

可能是以下的加权平均值(按实例的比例):

metrics.recall_score(test_sentiments,predicted_sentiments,pos_label='positive')
metrics.recall_score(test_sentiments,predicted_sentiments,pos_label='negative')

如果我没记错的话,这相当于微平均召回。