在这里,我尝试实施手动f1_score 函数进行评估,但是在代码中,这并未调用manual_scoring函数{No print o / p}而不是失败并出现错误:
“ 呼叫()缺少1个必需的位置参数:'y_true'”
如果我删除feval代码,效果很好。
def maual_scoring(y_hat, data):
print("I am here")
y_true = data.get_label()
y_hat = np.argmax(y_hat, axis =1 ) #multi classification problem
return 'f1', f1_score(y_true, y_hat), True
model = lgb.train(
params = lgb_params.copy(),
train_set=lgb_model,
valid_sets=[lgb_model, lgb_val],
valid_names=['Train', 'Validation'],
verbose_eval=100,
feval=maual_scoring,
num_boost_round=99999,
early_stopping_rounds=100
)
注意事项: 需要重塑pred
答案 0 :(得分:0)
def maual_scoring(preds, dtrain):
labels = dtrain.get_label()
preds = preds.reshape(-1, 4) # I should have reshaped pred
preds = preds.argmax(axis = 1)
f_score = f1_score(preds, labels, average = 'macro')
return 'f1_score', f_score, True
feval(可调用或无,可选(默认=无))–自定义 评估功能。应该接受两个参数:preds,train_data。 对于多类别任务,preds首先按class_id分组,然后分组 通过row_id。如果要在第j类中获取第i行pred,则访问 方式是preds [j * num_data + i]。注意:应返回(eval_name, eval_result,is_higher_better)或此类元组的列表。忽略 对应于所使用目标的默认指标,设置指标 参数中字符串“ None”的参数。
因为这是多分类问题,所以我们需要重塑预测以获得
o / p的形状类似于model.predict_proba()