无法理解 sklearn.metrics.f1_score 中标签参数的用法

数据挖掘 机器学习 scikit-学习 机器学习模型 准确性 网格搜索
2022-02-16 22:15:48

我正在尝试使用 RandomForest 分类器对数据集进行建模。我的数据集有 3 个类,即。A, B, C. 'A'是负类,'B''C'是正类。

在 GridSearch 中,我想优化,F1-score因为所有类中的样本数量不是均匀分布的,并且类'A'的样本数量最多。

那就是我想了解标签参数的用法的地方。医生

标签:列表,可选当平均!=“二进制”时要包含的标签集,如果平均为无,则它们的顺序。可以排除数据中存在的标签,例如计算忽略多数负类的多类平均值,而数据中不存在的标签将导致宏观平均值中的 0 个分量。

我无法正确理解它。这是否意味着,在我的 screnario 中,我应该将标签设置为labels = ['B', 'C'],只是正类?
请帮助

custom_scoring = make_scorer(f1_score, labels=[???],average='weighted')
clf = RandomForestClassifier(class_weight='balanced', random_state=args.random_state)
grid_search = GridSearchCV(clf, param_grid=param_grid, n_jobs=20, scoring=custom_scoring)
2个回答

F1 度量是一种类平衡精度度量——当只有两个类时,它非常简单,因为只有一种可能的计算方法。但是,对于 3 个类,您可以计算 A 和 B、B 和 C、C 和 A 或 A、B 和 C 三者之间的 F1 度量。

似乎“标签”参数告诉方法要计算您的度量的类。由于 F1 已经是类平衡的,因此您可能希望为您的度量包含所有三个标签。此参数可能对不平衡不敏感的度量(如原始准确度)更重要,因为它允许您计算数据子集的准确度 - 在文档示例中,他们使用它来排除多数类,允许用户评估只有少数人的准确性。如果您有很大的不平衡,例如 99% 的数据属于一个类别,那么您的准确度度量将完全由该类别中的准确度决定 - 因此,查看分类器在 1 中的表现可能会提供更多信息% 只要。

在数据集不平衡的情况下,采样算法的准确度得分达到 99%,这似乎令人印象深刻,但在数据集不平衡的情况下,少数类可以完全忽略。

如果数据集不平衡,则使用采样算法(例如 SMOTE)对数据集进行预处理并重新采样。它将基于邻居为类创建相等的示例集。

https://stackoverflow.com/questions/57205718/how-can-we-be-sure-of-the-efficiency-of-a-neural-network/57211888#57211888