LIhgtbgm 在二进制 objective 下产生非二进制预测?

LIhgtbgm produces non-binary predictions under binary objective?

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

从文档中,我认为参数-objective : binary 用于二进制预测,cross-entropy 用于概率预测。

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 ])

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

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

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

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

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

关于LightGBM参数的更多信息参考以下document

希望对您有所帮助。

祝你有美好的一天。