xgboost自定义评价函数:多分类F1 macro 2020-09-24

该博客介绍了如何在XGBoost训练过程中自定义评估指标,特别是针对f1_macro的需求。通过提供一个自定义的f1_macro函数,将它应用于XGBoost的eval_metric,实现了在模型训练时计算类别平衡的F1分数。示例代码展示了如何从预测概率转换为类别标签,并使用sklearn的f1_score函数进行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在训练xgboost时,评价指标需要使用f1 macro,但是官方eval_metric中没有,所有需要自定义。

def f1_macro(preds, dtrain):
    """
    自定义f1_macro用于XGBoost的eval_metric.
    输入是xgboost模型预测的类别概率(margin aka probability)

    :param preds: 'numpy.ndarray'
        Estimated targets as returned by a classifier. Its Shape is (num_sample, num_class)
    :param dtrain: Dmatrix
        Data with the train labels
    :return:
    """
    #
    y_train = dtrain.get_label() # 'numpy.ndarray'
    y_pred = [np.argmax(d) for d in preds]
    return 'f1_macro', metrics.f1_score(y_train, y_pred, average='macro')

 

Python custom objective demo

https://github.com/dmlc/xgboost/blob/master/demo/guide-python/custom_objective.py

# user defined evaluation function, return a pair metric_name, result

# NOTE: when you do customized loss function, the default prediction value is
# margin, which means the prediction is score before logistic transformation.
def evalerror(preds, dtrain):
    labels = dtrain.get_label()
    preds = 1.0 / (1.0 + np.exp(-preds))  # transform raw leaf weight
    # return a pair metric_name, result. The metric name must not contain a
    # colon (:) or a space
    return 'my-error', float(sum(labels != (preds > 0.5))) / len(labels)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值