В Lightgbm почему API-интерфейсы поезда и cv принимают аргумент categorical_feature, если он уже присутствует в конструкции набора данных

Ниже приведены API-интерфейсы .cv LightGBM.

Lightgbm.cv(params, train_set, num_boost_round=100,folds=None, nfold=5, stratified=True, shuffle=True, metrics=None, feval=None, init_model=None, Feature_name='auto', categorical_feature='auto ', fpreproc=None,seed=0, обратные вызовы=None, eval_train_metric=False, return_cvbooster=False)

Есть параметр cateogrical_feature

Категориальные особенности. Если список целых чисел, интерпретируется как индексы. Если список строк, интерпретируется как имена функций (необходимо также указать имя_функции).

Теперь API .train

Lightgbm.train(params, train_set, num_boost_round=100, valid_sets=None, valid_names=None, feval=None, init_model=None, Feature_name='auto', categorical_feature='auto', Keep_training_booster=False, обратные вызовы=None)

Здесь также есть параметр categorical_feature. Документация для этого такая же, как указано выше.

Теперь, как вы заметили, оба API используют набор данных lightgbm , который сам принимает параметр categorical_feature. Документация точно такая же

Вопросы:

  1. Если указаны оба, какой из них имеет приоритет?
  2. В каком месте рекомендуется указать categorical_feature?
  3. Отличаются ли эти два варианта каким-либо образом от работы конвейера LightGBM?

Я ответил ниже, но также хочу сказать... спасибо! Благодаря вашему сообщению это запутанное дублирование может быть удалено в будущей версии LightGBM: github.com/microsoft/LightGBM/issues/6435

James Lamb 01.05.2024 20:52
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Настройка гиперпараметров - это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения с целью оптимизации ее...
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
В рамках финального проекта Udacity Data Scietist Nanodegree я разработал алгоритм с использованием конволюционных нейронных сетей (CNN) для...
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
0
1
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эти конкурирующие шаблоны в lightgbm.cv() в пакете lightgbm находятся в библиотеке с сентября 2017 года (этот коммит). Возможность указать это в обоих интерфейсах добавлена ​​в основном для удобства. Функционально это не отличается от передачи этих аргументов в lightgbm.Dataset().

Если указаны оба, какой из них имеет приоритет?

В каком месте рекомендуется указать categorical_feature?

Отличаются ли эти два варианта каким-либо образом от работы конвейера LightGBM?

Всегда предпочитайте передавать его lightgbm.Dataset и игнорируйте аргумент lightgbm.cv()/lightgbm.train().

Аргумент categorical_feature, передаваемый в lightgbm.cv()/lightgbm.train(), используется только в одном месте, при вызове Dataset.set_categorical_feature() внутри функции lightgbm.cv()/lightgbm.train(). В лучшем случае это будет бесполезно и не обновит Dataset.

В худшем случае это может вызвать ошибку, если необработанные данные больше не доступны.

import lightgbm as lgb
from sklearn.datasets import make_regression

X, y = make_regression(n_samples=1_000, n_features=10)

dtrain = lgb.Dataset(
    X,
    label=y,
    categorical_feature=[1, 4],
    free_raw_data=True
)
dtrain.construct()

bst = lgb.train(
  params = {"objective": "regression"},
  train_set=dtrain,
  categorical_feature=[1, 3]
)
# lightgbm.basic.LightGBMError: Cannot set categorical feature after freed raw data,
# set free_raw_data=False when construct Dataset to avoid this.

В каком месте рекомендуется указать categorical_feature?

Другие вопросы по теме