Macro和Micro F1

我有一个二分类问题,由于数据不平衡,我尝试计算Macro/Micro F1。我以为可以使用Sickitlearn来实现,但在查看了这里的文档后,发现当分类是二元时,计算只会针对正类进行。因此,我尝试自己计算。首先,我使用以下函数计算TP、TN、FP、FN:

def calculate(y_actual, y_pred):    TP = 0    FP = 0    TN = 0    FN = 0    for i in range(len(y_pred)):         if y_actual[i]==y_pred[i]==1:    # 真阳性           TP += 1    for i in range(len(y_pred)):         if y_actual[i]==1 and y_pred[i]==0:              FN += 1    for i in range(len(y_pred)):         if y_actual[i]==y_pred[i]==0:    # 真阴性           TN += 1    for i in range(len(y_pred)):         if y_actual[i]==0 and y_pred[i]==1:           FP += 1    return(TP, FP, TN, FN)

为了计算Micro/Macro F1,我需要分别计算每个类的精确度和召回率(我不知道如何做!),然后,例如,Macro F1可以按如下方式计算(如果我理解正确的话):

类一的F1: 2(精确度*召回率)/(精确度+召回率)类二的F1: 2(精确度*召回率)/(精确度+召回率)Macro F1 = (类一的F1 + 类二的F1)/2 

关于计算Macro和Micro F1的参考资料可以在这里找到

那么,基于上述函数(calculate),是否有方法分别计算每个类的这些指标(TP/TN/FP/FN & 精确度 & 召回率)?任何帮助都将不胜感激。


回答:

你确实可以使用scikit-learn的例程。如果你想在二分类问题上使用指定的平均值,可以设置pos_label=None。然而,这些度量并不是特别有用。对于二分类或多分类问题,Micro平均F1与普通的准确率相同。Macro平均召回率,也称为平衡准确率,在二分类问题中比Macro平均F1更受欢迎且更有用。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注