簡體   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