LightGBM 'Using categorical_feature in Dataset.' 警告?

LightGBM 'Using categorical_feature in Dataset.' Warning?

根据我对 LightGBM 文档的阅读,应该在 Dataset 方法中定义分类特征。所以我有以下代码:

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

但是,我收到以下错误消息:

/app/anaconda3/anaconda3/lib/python3.7/site-packages/lightgbm/basic.py:1243: UserWarning: Using categorical_feature in Dataset. warnings.warn('Using categorical_feature in Dataset.')

为什么我会收到警告消息?

我推测您是在调用 lgb.train 时收到此警告的。这个函数也有参数 categorical_feature,它的默认值是 'auto',这意味着从 pandas.DataFrame 中获取分类列(documentation). The warning, which is emitted at this line,表明尽管 lgb.train 有要求自动识别分类特征,LightGBM 将使用数据集中指定的特征。

为避免警告,您可以为 lgb.Datasetlgb.train 提供相同的参数 categorical_feature。或者,您可以使用 categorical_feature=None 构建数据集,并仅在 lgb.train.

中指定分类特征

如用户 andrey-popov 所述,您可以使用 lgb.traincategorical_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)