[英]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.