繁体   English   中英

未调用 XGBoost fit() 自定义 eval_metric。 为什么?

[英]XGBoost fit() custom eval_metric is not called. Why?

我将自定义评估指标 function 传递给 XGB fit(),但 Python API 丢弃了可调用(即自定义)函数。 为什么? 我们应该如何传递这个 function? 还是 Python/Scikit API 不支持此功能?

model = XGBClassifier(scale_pos_weight=scale_pos_weight)
model.fit(X_train, y_train, eval_metric=xgb_f1)

在 sklearn.py(第 755 行)中:

def fit(self, X, y, sample_weight=None, base_margin=None,
            eval_set=None, eval_metric=None,
            early_stopping_rounds=None, verbose=True, xgb_model=None,
            sample_weight_eval_set=None, callbacks=None):
...
        feval = eval_metric if callable(eval_metric) else None
        if eval_metric is not None:
            if callable(eval_metric):
                eval_metric = None           # <<<<<<<<<< If eval_metric is callable, it's discarded
            else:
                xgb_options.update({"eval_metric": eval_metric})

如果您更深入地查看源代码,您的自定义评估指标确实正在使用,如果您查看此行,请在上面发布的代码片段中:

feval = eval_metric if callable(eval_metric) else None

您的自定义评估指标(这是一个可调用的)被分配给这个名为feval的变量,然后将其传递给实际方法train ,该方法会按照此处完成的方式进行拟合。 现在,当您查看train方法的文档字符串时,您会发现feval对应于Customized evaluation function 由于xgboost使用术语feval来指代自定义评估指标,而sklearn使用术语eval_metric ,因此 xgboost 的作者保留了变量名称,以便于理解并在内部进行此转换。

啤酒花这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM