[分类问题的评估指标] Macro-F1和Micro-F1

分类问题的评估指标

在利用K_means 、LR、SVM 分类,评估Embedding 结果的好坏时,遇到如下代码: 不理解当中 micro_f1,macro_f1的含义,开此篇学习记录。
    def classification(x, y, method='XGBoost'):
        x_train, x_valid, y_train, y_valid = train_test_split(x, y, test_size=0.2) #random_state=9

        if method == 'SVM':
            classifier = SVC()
        elif method == 'LR':
            classifier = LogisticRegression()
        else:
            classifier = XGBClassifier()

        classifier.fit(x_train,y_train)

        y_valid_pred = classifier.predict(x_valid)
        micro_f1 = f1_score(y_valid, y_valid_pred,average='micro')
        macro_f1 = f1_score(y_valid, y_valid_pred,average='macro')
        print ('Macro-F1: {}'.format(macro_f1))
        print ('Micro-F1: {}'.format(micro_f1))

分类的评估指标有很多,这里考虑如下几个:Precision,Recall,F1,macro-F1,micro-F1

预测/真实 1 0
1 TP FP
0 FN TN

Positive/Negative 表示预测的正负

True/False 表示预测是否正确

  • Precision: P=TPTP+FPP=TPTP+FP​

而macro-F1和micro-F1,宏观F1值和微观F1值,考虑的是在多标签(Multi-label)情况下,分类效果的评估方式。

比如Multi-label 性别男或女(0/1)以及是否是学生(0/1);当然Multi-class也可以通过一定的编码方式转化为Multi-label,如原始类别1,2,3,4,独热编码后可用四元向量表示[0,1,0,0]即表示类标2。

macro-F1和micro-F1正是基于分类目的的多样性,将只适用于Binary分类的F1值推广了:

  • micro-F1:

统计各个类标的TP、FP、FN、TN,加和构成新的TP、FP、FN、TN,然后即可计算micro-Precision和micro-Recall,得到micro-F1

  • macro-F1: F1macro

  • 统计各个类标的TP、FP、FN、TN,分别计算各自的Precision和Recall,得到各自的F1值,然后取平均值得到macro-F1

    从上面二者计算方式上可以看出,macro-F1平等地看待各个类别,它的值会受到稀有类别的影响;而micro-F1则更容易受到常见类别的影响。

    你可能感兴趣的:(机器学习)