【问题标题】:Geometric mean of precision and recall精度和召回率的几何平均值
【发布时间】:2021-04-09 03:54:10
【问题描述】:

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

imblearn.metrics.geometric_mean_score(y_true, y_pred, labels=None, pos_label=1, average='multiclass', sample_weight=None, correction=0.0)

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

【问题讨论】:

    标签: python python-3.x machine-learning classification metrics


    【解决方案1】:

    如果您面临class-imbalance 问题,则在精确率和召回率之间的multi-class geometric mean,由标签supports(每个标签的位置样本数)加权是一个不错的选择(这在imblearn API 中是允许的,您已链接,参数average='weighted')。

    但是,IIUC 并不是您想要的。您正在尝试在precisionrecall 之间使用weighted geometric mean

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

    您可以使用y_truey_pred 中的sklearn api 计算precisionrecall,然后使用该函数计算weighted geometric mean

    我已经根据以下definition(第一种使用幂而不是指数的形式)编写了weighted_geometric_mean 函数-

    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)
    
    0.3333333333333333
    

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


    编辑:附带说明,全局精度和召回率之间的加权几何平均值总和为 1(60:40 或 50:50 等)将始终产生相同的最终值!您可以通过在其 TP、FP 形式中写入精度来得出这一点,对于 Recall 也是如此。因此,我建议标签支持 weighted 精度和召回率。

    【讨论】:

    • 非常感谢您的回答。我唯一不明白的是,每个权重在上面的函数中的哪个位置对应于精度或召回率(即,我们怎么知道 3 是召回权重,2 是精度权重?)
    • 我已经更新了代码以简化定义。现在您可以将权重视为百分比 (0.3 = 30%)
    • 查看this link 了解有关如何定义权重的更多详细信息。我也将其添加为答案的一部分。
    • 如果这解决了您的问题,请告诉我。谢谢!
    • 要么我不明白你的编辑声明“全局精度和召回之间的加权几何平均值总和为 1(60:40 或 50:50 等)将始终导致相同的最终结果价值!”或者我不明白这怎么可能是真的。你是说权重的选择对结果没有影响?
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2012-11-26
    • 2014-02-20
    • 1970-01-01
    • 2018-02-18
    • 2018-08-16
    • 2011-08-18
    相关资源
    最近更新 更多