微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对高度不平衡的数据进行适当的 f1 评分

如何解决对高度不平衡的数据进行适当的 f1 评分

我对三种不同的 f1 计算感到困惑。对于严重不平衡的数据,我应该使用哪个 f1 评分?我正在研究严重不平衡的二元分类

‘f1’
‘f1_micro’
‘f1_macro’
‘f1_weighted’

另外,我想在 balanced_accuracy_score(y_true,y_pred,adjusted=True) 评分参数中添加 balanced_accuracy。如何将其合并到我的代码中?

from sklearn.model_selection import cross_validate
from sklearn.metrics import make_scorer
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from imblearn.metrics import geometric_mean_score
X,y = load_breast_cancer(return_X_y=True)

gm_scorer = make_scorer(geometric_mean_score,greater_is_better=True)
scores = cross_validate(LogisticRegression(max_iter=100000),X,y,cv=5,scoring={'gm_scorer': gm_scorer,'F1': 'f1','Balanced Accuracy': 'balanced_accuracy'}
)
scores

解决方法

f1_micro 用于全局 f1,而 f1_macro 取单个类的 f1,然后取平均值。

它类似于 precision 及其在 sklearn 中的微观、宏观、权重参数。请检查 SO 帖子 Type of precision,其中我解释了差异。 f1 score 基本上是一种同时考虑precision和recall的方法。

另外,根据documentation

'micro':通过计算真阳性、假阴性和假阳性的总数来全局计算指标。

'macro':计算每个标签的指标,并找到它们的未加权平均值。这没有考虑标签不平衡。

'weighted':计算每个标签的指标,并找到它们按支持度加权的平均值(每个标签的真实实例数)。这会改变“宏”以解释标签不平衡;它可能导致 F-score 不在精确率和召回率之间。

对于您的具体情况,您可能希望使用 f1_macro(类 f1 的未加权平均值)或 f1_weighted(类 f1 的权重平均值),因为 f1_micro高对 f1 的类别贡献。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。