gpt4 book ai didi

Python xgb.cv 使用多个评估指标

转载 作者:行者123 更新时间:2023-12-05 04:48:43 33 4
gpt4 key购买 nike

我目前正在尝试寻找 XGBoost 模型的最佳参数。找到最佳参数后,我想使用多个自定义评估指标通过交叉验证评估模型。

假设我想使用以下两个指标:(我想使用不同的指标,但文档中提供了第一个指标,我只想了解如何使用两个指标)

def rmsle(predt: np.ndarray, dtrain: xgb.DMatrix) -> Tuple[str, float]:
''' Root mean squared log error metric.'''
y = dtrain.get_label()
predt[predt < -1] = -1 + 1e-6
elements = np.power(np.log1p(y) - np.log1p(predt), 2)
return 'PyRMSLE', float(np.sqrt(np.sum(elements) / len(y)))

def rmsle2(predt: np.ndarray, dtrain: xgb.DMatrix) -> Tuple[str, float]:
''' Root mean squared log error metric.'''
y = dtrain.get_label()
predt[predt < -1] = -1 + 1e-6
elements = np.power(np.log1p(y) - np.log1p(predt), 2)
return 'PyRMSLE', float(2*np.sqrt(np.sum(elements) / len(y)))

现在我使用下面的代码来计算模型:

cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds=cv,
feval={rmsle,rmsle2}, early_stopping_rounds=early_stopping_rounds)

不幸的是,这不起作用。如果我只使用 feval 指标 feval=rmsle,就可以了。

我可以使用两个“标准指标”,例如 RMSE 或 MAE:

 cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds=cv,
metrics={'mae','rmse'}, early_stopping_rounds=early_stopping_rounds)

这里没有报错,但是当我想使用更多的自定义指标时,报错了。

如果有人能在这里为我提供一些帮助,那就太好了。非常感谢。

最佳答案

根据documentation , feval 参数是一个评估函数,用于对您的模型进行评分,您的 .cv 方法中应该只有其中一个。但是,您可以像以前一样使用 metrics 来评估您的 CV,但根据 this ,看起来您的字典可能缺少键值对。尝试将其定义如下:

 cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds=cv,
metrics={'first_score': rmsle, 'second_score': rmsle2}, early_stopping_rounds=early_stopping_rounds)

关于Python xgb.cv 使用多个评估指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67961821/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com