我当前正在尝试找到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 = 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)
这里没有出现错误,但是当我想使用更多的自定义度量时,就会出现错误。
如果有人能在这里提供一些帮助,那将是非常棒的。 非常感谢。