我正在使用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,得到了:function
我也尝试使用“ MAP”作为指标
cv_result = lgb.cv(params=params, train_set=lgb_train, feature_name=Rel_Feat_Names, "metric="MAP")
但出现以下错误:
“ lightgbm.basic.LightGBMError:对于MAP指标,应该有查询信息”
我找不到所需的查询信息。
如何正确使用feval并定义“ MAP”所需的查询
谢谢
答案 0 :(得分:0)
现在您可以将 map
(别名 mean_average_precision
)作为指标,如 here 所述,但要正确回答应用 feval
的问题:
自定义指标的输出应该是名称、值和greater_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'