LIhgtbgm在二元目标下产生非二元预测?

2024-04-25 19:48:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

模型总是给我一个概率数组,我找不到任何设置来得到一个二进制预测。你知道吗


Tags: columns二进制trainvalparams概率datasetlabel
1条回答
网友
1楼 · 发布于 2024-04-25 19:48:08

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

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

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

现在,回到您最初的疑问,设置参数objective:'binary',只通知模型关于问题的种类,在本例中是在二进制分类中。 这将要求目标变量为{0,1}。你知道吗

有关LightGBM参数的更多信息,请参阅下面的document。你知道吗

希望这有帮助。你知道吗

祝你今天愉快。你知道吗

相关问题 更多 >