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

2024-09-27 21:28:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个自定义度量来评估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中实现我想要的东西的想法


Tags: 模型none参数度量方式sqrtmlprecision
1条回答
网友
1楼 · 发布于 2024-09-27 21:28:12

如果您面临一个class-imbalance问题,那么通过标签supports(每个标签的位置样本数)加权的精度和召回率之间的multi-class geometric mean是一个很好的选择(这在您链接的IMBRearn API中是允许的,带有参数average='weighted'

然而,IIUC并不是你想要的。您试图在precisionrecall之间取一个weighted geometric mean

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

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

我已经基于以下definition(第一种形式是幂函数而不是指数函数)编写了weighted_geometric_mean函数-

enter image description here

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的全局精度和召回率。如果您想考虑类的权重来计算精度和回想(对于类不平衡情况),请将其设置为^ {CD14>}


编辑:在旁注中,全局精度和召回率之间的加权几何平均值(权重总和为1)(60:40或50:50等)将始终得到相同的最终值!您可以通过在TP、FP形式中写入精度,并为Recall写入相同的精度,从而得出这一结论。因此,我建议标签支持weighted精度和召回率

相关问题 更多 >

    热门问题