多分类问题考察指标:宏平均(Macro-averaging)和微平均(Micro-averaging)

当我们的问题属于多分类问题时,考察在不同类别下综合考察分类器的优劣,需要引入宏平均(Macro-averaging)、微平均(Micro-averaging)。


宏平均(Macro-averaging)是指所有类别的每一个统计指标值的算数平均值,也就是宏精确率(Macro-Precision),宏召回率(Macro-Recall),宏F值(Macro-F Score),其计算公式如下:

宏查准率
m a c r o − P = 1 n ∑ i = 1 n P i macro-P = \frac{1}{n} \sum_{i=1}^n P_i macroP=n1i=1nPi

宏查全率
m a c r o − R = 1 n ∑ i = 1 n R i macro-R = \frac{1}{n} \sum_{i=1}^n R_i macroR=n1i=1nRi

宏F1
m a c r o − F 1 = 2 ∗ P m a c r o ∗ R m a c r o P m a c r o + R m a c r o macro-F1 = \frac{2 * P_{macro}*R_{macro}}{ P_{macro}+R_{macro}} macroF1=Pmacro+Rmacro2PmacroRmacro


微平均(Micro-averaging)是将各个混淆矩阵对应元素平均,得到TP、FP、TN、FN,然后计算相应的平均值。其计算公式如下:

微查准率
m i c r o − P = T P ‾ T P ‾ + F P ‾ micro-P = \frac{ \overline {TP}}{\overline {TP}+\overline {FP}} microP=TP+FPTP

微查全率
m i c r o − R = T P ‾ T P ‾ + F N ‾ micro-R= \frac{ \overline {TP}}{\overline {TP}+\overline {FN}} microR=TP+FNTP

微F1
m i c r o − F 1 = 2 ∗ P m i c r o ∗ R m i c r o P m i c r o + R m i c r o micro-F1 = \frac{2 * P_{micro}*R_{micro}}{ P_{micro}+R_{micro}} microF1=Pmicro+Rmicro2PmicroRmicro

参考文献
1、【机器学习理论】分类问题中常用的性能评估指标
2、李航,《统计学习方法》
3、周志华,《机器学习》

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用lgb模型进行6分类,并使用StratifiedKFold,评价指标macro-f1的示例代码: ```python import lightgbm as lgb from sklearn.model_selection import StratifiedKFold from sklearn.metrics import f1_score # 假设数据集的特征矩阵为 X,标签为 y # 定义模型参数 params = { 'boosting_type': 'gbdt', 'objective': 'multiclass', 'num_class': 6, 'metric': 'multi_logloss', 'num_leaves': 31, 'learning_rate': 0.05, 'feature_fraction': 0.9, 'bagging_fraction': 0.8, 'bagging_freq': 5, 'verbose': -1, 'random_state': 2021 } # 定义StratifiedKFold交叉验证 n_splits = 5 skf = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=2021) # 定义输出变量 oof_preds = np.zeros(X.shape[0]) class_preds = np.zeros(X.shape[0]) # 开始交叉验证 for fold, (train_idx, valid_idx) in enumerate(skf.split(X, y)): print("Fold", fold+1) X_train, X_valid = X[train_idx], X[valid_idx] y_train, y_valid = y[train_idx], y[valid_idx] # 定义训练数据 lgb_train = lgb.Dataset(X_train, y_train) lgb_valid = lgb.Dataset(X_valid, y_valid) # 训练模型 model = lgb.train(params, lgb_train, valid_sets=[lgb_valid], num_boost_round=10000, early_stopping_rounds=100, verbose_eval=100) # 对验证集进行预测 valid_preds = model.predict(X_valid, num_iteration=model.best_iteration) oof_preds[valid_idx] = valid_preds.argmax(axis=1) class_preds[valid_idx] = valid_preds.max(axis=1) print("-" * 50) # 输出交叉验证结果 macro_f1 = f1_score(y, oof_preds, average='macro') print("Overall Macro-F1:", macro_f1) ``` 在这个示例中,我们使用了sklearn中的f1_score函数来计算macro-f1。在计算f1_score时,需要将参数average设为'macro'。最终输出结果为整个数据集上的macro-f1。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值