首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >精确度和召回率的几何平均值

精确度和召回率的几何平均值
EN

Stack Overflow用户
提问于 2021-01-03 05:33:10
回答 1查看 519关注 0票数 2

我正在尝试制定一个自定义指标来评估ML模型。我想让精度和召回率的加权几何平均值,并以一种优先于召回率而不是精确度的方式对其进行权衡。我知道几何平均值是sqrt(精确度*召回),但我不确定如何将其参数化,以便在python中更重视召回。这里有来自不平衡库的度量,但是我看不到我可以提供的任何权重

代码语言:javascript
运行
复制
imblearn.metrics.geometric_mean_score(y_true, y_pred, labels=None, pos_label=1, average='multiclass', sample_weight=None, correction=0.0)

你知道如何在python中实现我想要的东西吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-03 05:54:43

如果你正面临着一个class-imbalance问题,一个介于精度和召回率之间的multi-class geometric mean,由标签supports (每个标签的位置样本数量)加权是一个很好的选择(这在你已经链接的imblearn中是允许的,使用参数average='weighted')。

然而,并不是你想要的。您正试图在 precision 和之间建立

我在流行的库中找不到任何加权几何均值的实现,所以我为此编写了一个自定义函数。

您可以使用y_truey_pred的sklearn接口计算precisionrecall,然后使用函数计算weighted geometric mean

我基于下面的definition (第一种形式是幂而不是指数)编写了weighted_geometric_mean函数。

代码语言:javascript
运行
复制
from sklearn.metrics import precision_score, recall_score

y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]

precision = precision_score(y_true, y_pred, average='micro')
recall = recall_score(y_true, y_pred, average='micro')
#parameter 'micro' calculates metrics globally by counting the total TP, FN and FP

scores = [precision, recall]
weights = [0.6,0.4]  #60% precision, 40% recall

def weighted_geometric_mean(scores, weights):
    wgm = np.product(np.power(scores, weights))
    return wgm

weighted_geometric_mean(scores, weights)
代码语言:javascript
运行
复制
0.3333333333333333

上面的实现通过参数micro使用全局精度和召回率。如果您想要考虑基于类的权重来计算精度和召回率(对于类不平衡情况),请将其设置为weighted

编辑:在附注中,全局精度和召回率之间的加权几何平均值的权重总和为1 (60:40或50:50等)将始终得到相同的最终值!您可以通过在其TP、FP格式和用于调用的相同格式中写入精度来派生它。因此,我建议标签支持weighted精度和召回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65544322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档