lightgbm手动计分功能:F1_SCORE

时间:2018-09-20 08:06:43

标签: python-3.x machine-learning lightgbm

在这里,我尝试实施手动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

1 个答案:

答案 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()