LightGBM «Использование категорийной функции в наборе данных». Предупреждение? - PullRequest
1 голос
/ 07 марта 2020

Из моего прочтения документа LightGBM предполагается определить категориальные признаки в методе набора данных. Итак, у меня есть следующий код:

cats=['C1', 'C2']
d_train = lgb.Dataset(X, label=y, categorical_feature=cats)

Однако я получил следующее сообщение об ошибке:

/ app / anaconda3 / anaconda3 / lib / python3 .7 / site -packages / lightgbm / basi c .py: 1243: Предупреждение пользователя: Использование категорийной характеристики в наборе данных. warnings.warn ('Использование categoryorical_feature в наборе данных.')

Почему я получил предупреждение?

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

Полагаю, вы получаете это предупреждение при звонке на lgb.train. Эта функция также имеет аргумент categorical_feature, и ее значение по умолчанию равно 'auto', что означает взятие категориальных столбцов из pandas.DataFrame ( документация ). Предупреждение, которое выдается в этой строке , указывает на то, что, несмотря на то, что lgb.train запросил автоматическое определение категориальных признаков, LightGBM будет использовать функции, указанные в наборе данных.

Для Во избежание предупреждения вы можете дать один и тот же аргумент categorical_feature обоим lgb.Dataset и lgb.train. Кроме того, вы можете создать набор данных с помощью categorical_feature=None и указывать категориальные признаки только в lgb.train.

1 голос
/ 23 апреля 2020

Как и пользователь andrey-popov, описанный, вы можете использовать параметр lgb.train categorical_feature, чтобы избавиться от этого предупреждения.

Ниже приведен простой пример с некоторым кодом, как вы можете это сделать:

# Define categorical features
cat_feats = ['item_id', 'dept_id', 'store_id', 'cat_id', 'state_id', 'event_name_1', 
             'event_type_1', 'event_name_2', 'event_type_2']
...

# Define the datasets with the categorical_feature parameter
train_data = lgb.Dataset(X.loc[train_idx], Y.loc[train_idx], 
    categorical_feature=cat_feats, free_raw_data=False)
valid_data = lgb.Dataset(X.loc[valid_idx], Y.loc[valid_idx], 
    categorical_feature=cat_feats, free_raw_data=False)

# And train using the categorical_feature parameter
lgb.train(lgb_params, train_data, valid_sets=[valid_data], verbose_eval=20, 
    categorical_feature=cat_feats, num_boost_round=1200)
...