метрика f1_score в лайтбм

1

Я хочу обучить модель lgb с пользовательской метрикой: f1_score со weighted значением.

Я прошел через передовые примеры lightgbm над здесь и нашел implimentation пользовательской бинарной функции ошибки. Я реализовал как аналогичный functon для возврата 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.?

Теги:
machine-learning
lightgbm

1 ответ

1
Лучший ответ

Документы немного запутывают. При описании сигнатуры функции, которую вы передаете feval, они называют ее параметрами preds и train_data, что немного вводит в заблуждение.

Но, похоже, работает следующее:

from sklearn.metrics import f1_score

def lgb_f1_score(y_hat, data):
    y_true = data.get_label()
    y_hat = np.round(y_hat) # scikits f1 doesn't like probabilities
    return 'f1', f1_score(y_true, y_hat), True

evals_result = {}

clf = lgb.train(param, train_data, valid_sets=[val_data, train_data], valid_names=['val', 'train'], feval=lgb_f1_score, evals_result=evals_result)

lgb.plot_metric(evals_result, metric='f1')

Чтобы использовать более одной индивидуальной метрики, определите одну общую настраиваемую функцию показателей, как описано выше, в которой вы вычисляете все показатели и возвращаете список кортежей.

Изменение: исправленный код, конечно, с F1 больше, лучше установить значение True.

  • 0
    Я постараюсь запустить это и держать вас в курсе
  • 0
    Я получаю сообщение об ошибке, и f1_score не рассчитывается. Ошибка: C:\ProgramData\Anaconda3\lib\site-packages\sklearn\metrics\classification.py:1135: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню