【问题标题】:LightGBM 'Using categorical_feature in Dataset.' Warning?LightGBM '在数据集中使用 categorical_feature。警告?
【发布时间】:2020-03-07 03:07:26
【问题描述】:

根据我对 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:用户警告:在数据集中使用 categorical_feature。 warnings.warn('在数据集中使用 categorical_feature。')

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

【问题讨论】:

    标签: lightgbm


    【解决方案1】:

    我认为您在调用 lgb.train 时会收到此警告。这个函数也有参数categorical_feature,它的默认值是'auto',这意味着从pandas.DataFramedocumentation)中获取分类列。在this line 发出的警告表明,尽管lgb.train 已要求自动识别分类特征,但LightGBM 将使用数据集中指定的特征。

    为避免警告,您可以将相同的参数 categorical_feature 提供给 lgb.Datasetlgb.train。或者,您可以使用categorical_feature=None 构建数据集,并仅在lgb.train 中指定分类特征。

    【讨论】:

    • 谢谢,安德烈。我使用 lgb.cv。但你的想法也适用。
    • > 使用 categorical_feature=None 构造数据集 如果通过 sklearn API 使用 DataFrame,则不太可能。
    【解决方案2】:

    像用户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)
    

    【讨论】:

    • 抱歉回复晚了。我仍然收到以下警告消息:/home/dlin/.conda/envs/mybase/lib/python3.7/site-packages/lightgbm/basic.py:1279: UserWarning: Overriding the parameters from Reference Dataset。 warnings.warn('覆盖参考数据集中的参数。') /home/dlin/.conda/envs/mybase/lib/python3.7/site-packages/lightgbm/basic.py:1091: UserWarning: categorical_column in param dict被覆盖。 warnings.warn('{} 在 param dict 被覆盖。'.format(cat_alias))
    猜你喜欢
    • 2019-09-27
    • 2019-07-18
    • 2019-08-25
    • 1970-01-01
    • 2018-04-27
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多