如何为不平衡数据集在lightgbm中设置muticlass(4类)分类中的权重?

时间:2019-08-07 02:03:25

标签: lightgbm

我正在尝试使用lightgbm对4类问题进行分类。但是这四个类别是不平衡的,接近2000:1:1:1。

在lightgbm中,参数'is_unbalance'和scale_pos_weight仅用于二进制分类。

params = {
    'objective':'multiclassova',
    'num_class':4,
    'is_unbalance':True,
    'metric': 'multi_logloss',
    'max_depth':2,
    'learning_rate':0.15,
    'feature_fraction':0.8,
    'bagging_fraction':0.8,
    'bagging_freq':4,
    'reg_alpha':5,
    'reg_lambda':3,
    'cat_smooth':0,
    'num_iterations':53, 
}
lgb_train = lgb.Dataset(X_train,Y_train, 
categorical_feature=category_feature)
gbm = lgb.train(params,lgb_train)

2 个答案:

答案 0 :(得分:0)

您可以参考以下链接: https://github.com/Microsoft/LightGBM/blob/master/docs/Parameters.rst#weight_column

详细信息: 参数名称:weight_column,默认=“”,类型= int或字符串,别名:weight

关于使用的一些注意事项:

  • 用于指定重量列
  • 使用数字作为索引,例如weight = 0表示column_0是重量
  • 添加前缀名称:用于列名,例如weight = name:weight
  • 仅在直接从文件加载数据的情况下起作用
  • 索引从0开始,并且在传递类型为int时不计算标签列,例如当label为column_0,权重为column_1时,正确的参数为weight = 0

答案 1 :(得分:0)

要使用lightgbm构建分类器,请使用LGBMClassifier。 LGBMClassifier具有参数 class_weight ,通过它可以直接处理不平衡数据。

对于您的特定问题,您可以执行以下操作:(最后添加参数class_weight)

params = {
'objective':'multiclassova',
'num_class':4,
'is_unbalance':True,
'metric': 'multi_logloss',
'max_depth':2,
'learning_rate':0.15,
'feature_fraction':0.8,
'bagging_fraction':0.8,
'bagging_freq':4,
'reg_alpha':5,
'reg_lambda':3,
'cat_smooth':0,
'num_iterations':53, 
'class_weight':{'class_label1':2000, 'class_label2':1, 'classlabel3':1, 'classlabel4':1}

}

有关更多信息,请查看LGBMClassifier的文档,尤其是参数https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMClassifier.html