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。
希望对您有所帮助。
祝你有美好的一天。
我正在使用 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。
希望对您有所帮助。
祝你有美好的一天。