Python XGBoost fit()未调用自定义评估度量。为什么?

Python XGBoost fit()未调用自定义评估度量。为什么?,python,scikit-learn,xgboost,Python,Scikit Learn,Xgboost,我正在将一个自定义求值度量函数传递给xgbfit(),但Python API丢弃了可调用(即自定义)函数。为什么? 我们应该如何通过这个函数?或者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(自身、X、y、样本重量=无、基准余量

我正在将一个自定义求值度量函数传递给xgbfit(),但Python API丢弃了可调用(即自定义)函数。为什么? 我们应该如何通过这个函数?或者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(自身、X、y、样本重量=无、基准余量=无、,
评估集=无,评估度量=无,
提前停止轮数=无,详细轮数=真,xgb\U模型=无,
示例(权重、评估集=无,回调=无):
...
feval=eval_度量(如果可调用)(eval_度量)否则无
如果eval_metric不是None:
如果可调用(评估度量):

eval_metric=None#如果您深入查看源代码,您的自定义评估指标确实正在使用,如果您查看这一行,请查看上面发布的代码片段:

feval = eval_metric if callable(eval_metric) else None
您的自定义评估指标(可调用)将分配给名为
feval
的变量,然后将该变量传递给实际方法
train
,该方法按完成的方式进行拟合。现在,当您查看
train
方法的属性时,您可以发现
feval
对应于
自定义评估函数。由于
xgboost
使用术语
feval
来引用自定义评估指标,而
sklearn
使用术语
eval_metric
,因此xgboost的作者保留了变量名称,以便于理解,并在内部进行此转换


希望这有帮助

实际上,我对代码进行了更深的跟踪,feval值在某个点消失,并且没有被使用。我可以肯定地告诉您,我的自定义eval_metric函数没有被调用。我在里面放了一个print()和一个断点,两个都没有被击中。你有适合你的示例代码,我可以试试吗?
feval = eval_metric if callable(eval_metric) else None