【问题标题】:LIhgtbgm produces non-binary predictions under binary objective?LIhgtbgm 在二元目标下产生非二元预测?
【发布时间】:2020-01-27 10:03:46
【问题描述】:

我正在使用lightbgm 来预测二元:分类问题。 但我无法得到二元预测[0;1]

从文档中,我认为参数目标:二进制用于二进制预测,交叉熵用于概率预测。

d_train = lgb.Dataset(train_X[features], label=train_y,categorical_feature=Cat_columns)
d_valid = lgb.Dataset(val_X[features], label=val_y,categorical_feature=Cat_columns)

params = {
 'objective':'binary',
 'boosting':'goss',
 'metric': 'binary_error',
 'learning_rate': 0.1,
 'num_leaves': 31,
 'max_depth': 9,
 'min_data_in_leaf': 20,
 'max_delta_step': 0,
 'device_type':'cpu',
 'verbosity':1}

Model2 = lgb.train(params, d_train,categorical_feature=Cat_columns, num_boost_round =10, valid_sets=[d_train,d_valid],feval=None,early_stopping_rounds=50)

Model2.predict(train_X[features])

array([0.00510775, 0.00510775, 0.00510775, ..., 0.00510775, 0.00510775,
       0.0319719 ])

模型总是给我一个概率数组,我找不到任何设置来获得二元预测。

【问题讨论】:

    标签: python lightgbm


    【解决方案1】:

    基于LightGBMdocumentation, 我不认为你可以直接从 LightGBM 获得预测类。当然,默认预测是预测概率。

    您可以使用阈值将概率转换为类别。 现在,确定阈值很棘手,取决于您要解决的问题的性质以及训练数据的不平衡程度。

    对于高度不平衡的数据集,使用标准 0.5 作为阈值是不正确的。

    现在,回到你最初的疑问,设置参数objective:'binary',只会告知模型问题的类型,在这种情况下是二进制分类。 这将要求您的目标变量为 {0,1}。

    有关 LightGBM 参数的更多信息,请参阅以下document

    希望这会有所帮助。

    祝你有美好的一天。

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 2016-12-13
      • 2018-04-13
      • 2019-04-12
      • 2018-07-29
      • 2018-04-01
      相关资源
      最近更新 更多