lightgbm 自定义metric函数

自定义LightGBM评估指标实现与应用
本文介绍了如何在LightGBM中自定义评估指标,通过示例展示了二分类的accuracy和多分类的f1_score实现,并提供了一个自定义的auc评估函数。在实际训练过程中,自定义的my_auc与内置auc在epoch3时出现不一致,这可能是由于内部计算细节的差异。

lgb 自定义函数

模板:

# f(preds: array, train_data: Dataset) -> name: str, eval_result: float, is_higher_better: bool
def f(preds, train_data):
    '''
    :param preds:  array, 预测值
    :param train_data:  lgb Dataset, lgb的传入数据集
    :return:
    '''
    ###  返回 (评估指标名称, 评估计算值, 是否评估值越大模型性能越好)
    return meaticname: str, eval_result: float, is_higher_better: bool

示例:

二分类 accuracy:

def accuracy(preds, train_data):
    labels = train_data.get_label()
    preds = 1. / (1. + np.exp(-preds))
    return 'accuracy', np.mean(labels == (preds > 0.5)), True

多分类 f1_score:

# 多分类 f1_score  14分类
def MultiAuc_f1score(preds, train_data):
    y_label = train_data.get_label()
    preds = preds.reshape(14,-1).T  # 14 分类
    y_pred = np.argmax(preds, axis=-1)
    multi_f1_score = f1_score(y_pred, y_label, average='macro')

    return 'MultiAuc_f1score', multi_f1_score, True

测试案例:


                
### 创建自定义 MSE 损失函数 为了在 LightGBM实现自定义的均方误差 (MSE) 损失函数,可以利用 `lightgbm.LGBMRegressor` 或者 `lgb.train()` 方法中的 `custom_loss_` 参数来指定自定义的目标函数。下面展示了一个具体的例子: #### 自定义目标函数的要求 自定义目标函数应当返回两个列表:梯度和海森矩阵(Hessian)。对于回归问题来说,这两个量分别对应于预测值与真实标签之间的差值及其平方。 ```python import numpy as np import lightgbm as lgb from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split def custom_mse(y_true, y_pred): """计算并返回自定义的MSE损失""" grad = y_pred - y_true # 计算一阶导数即残差 hess = np.ones_like(grad) # 对于MSE而言,二阶导数恒等于1 return 'mse_custom', grad, hess # 构建数据集 X, y = make_regression(n_samples=1000, n_features=20, noise=0.1) train_x, test_x, train_y, test_y = train_test_split( X, y, test_size=0.2) # 将训练数据转换成Dataset对象 lgb_train = lgb.Dataset(train_x, label=train_y) params = { "objective": "regression", "metric": {"rmse"}, } evals_result = {} bst = lgb.train(params, lgb_train, valid_sets=[lgb_train], fobj=custom_mse, # 使用自定义loss function evals_result=evals_result, verbose_eval=False) print('Training finished.') ``` 此代码片段展示了如何通过传递给 `fobj` 参数来自定义目标函数的方式,在 LightGBM 的训练过程中应用自定义的 MSE 函数[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值