我想用自定义指标训练一个 lgb 模型:f1_score
平均weighted
。
我在这里浏览了 lightgbm 的高级示例,发现了自定义二进制错误函数的实现。我实现了类似的函数来返回 f1_score,如下所示。
def f1_metric(preds, train_data):
labels = train_data.get_label()
return 'f1', f1_score(labels, preds, average='weighted'), True
我尝试通过传递feval
参数来训练模型,f1_metric
如下所示。
evals_results = {}
bst = lgb.train(params,
dtrain,
valid_sets= [dvalid],
valid_names=['valid'],
evals_result=evals_results,
num_boost_round=num_boost_round,
early_stopping_rounds=early_stopping_rounds,
verbose_eval=25,
feval=f1_metric)
然后我得到ValueError: Found input variables with inconsistent numbers of samples:
训练集被传递给函数而不是验证集。
如何配置以通过验证集并返回 f1_score。?