4

我正在使用 LightGBM,并希望使用平均精度召回作为指标。我尝试定义 feval:

cv_result = lgb.cv(params=params, train_set=lgb_train, feature_name=Rel_Feat_Names, feval=APS)

其中 APS 定义为:

def APS(preds, train_data):
    y_pred_val = []
    y_test_val = []
    for i, stat in enumerate(train_data.get_label.isnull()):
        if ~stat:
            y_pred_val.append(preds[i])
            y_test_val.append(train_data.get_label[i])
    aps = average_precision_score(np.array(y_test_val), np.array(y_pred_val))
    return aps

我得到一个错误:

TypeError:未知类型的参数:feval,得到:函数

我也尝试使用“MAP”作为指标

cv_result = lgb.cv(params=params, train_set=lgb_train, feature_name=Rel_Feat_Names, "metric="MAP")

但出现以下错误:

“lightgbm.basic.LightGBMError:对于MAP metric,应该有查询信息”

我找不到所需的查询信息。

如何正确使用 feval 并定义“MAP”所需的查询

谢谢

4

1 回答 1

0

现在,您可以将map(alias mean_average_precision) 作为您的指标,如此所述,但要回答feval正确应用的问题:

自定义指标的输出应该是名称、值和更大的_is_better 的元组,所以在你的情况下:

def APS(preds, train_data):
    aps = average_precision_score(train_data.get_label(), preds)
    return 'aps', aps, False

然后还包括params以下内容:'objective': 'binary', 'metric': 'None'

于 2021-08-05T13:43:41.243 回答