我正在尝试创建一个自定义度量来评估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中实现我想要的东西的想法
如果您面临一个
class-imbalance
问题,那么通过标签supports
(每个标签的位置样本数)加权的精度和召回率之间的multi-class geometric mean
是一个很好的选择(这在您链接的IMBRearn API中是允许的,带有参数average='weighted'
)然而,IIUC并不是你想要的。您试图在
precision
和recall
之间取一个weighted geometric mean。我在流行的库中找不到任何加权几何平均值的实现,所以我为此编写了一个自定义函数
您可以使用来自
y_true
和y_pred
的sklearn api计算precision
和recall
,然后使用函数计算weighted geometric mean
我已经基于以下definition(第一种形式是幂函数而不是指数函数)编写了
weighted_geometric_mean
函数-上述实现使用参数
micro
的全局精度和召回率。如果您想考虑类的权重来计算精度和回想(对于类不平衡情况),请将其设置为^ {CD14>}编辑:在旁注中,全局精度和召回率之间的加权几何平均值(权重总和为1)(60:40或50:50等)将始终得到相同的最终值!您可以通过在TP、FP形式中写入精度,并为Recall写入相同的精度,从而得出这一结论。因此,我建议标签支持
weighted
精度和召回率相关问题 更多 >
编程相关推荐