关于LightGBM predict函数输出值超出0-1范围的疑问
关于LightGBM predict函数输出值超出0-1范围的疑问
嗨,我来帮你搞懂这个问题——你得到的超出0-1范围的数值根本不是概率,而是LightGBM默认回归任务下的原始预测值,这都是因为训练模型时漏了关键的参数配置!
问题根源
LightGBM的train函数如果传入空的参数字典,会默认使用objective='regression'(回归任务),而不是你需要的二分类任务配置。回归任务的输出是不受限制的连续实数值,自然会出现小于0或者大于1的情况,完全没有经过概率转换。
而你做的是二分类任务(预测Survived是0或1),必须显式指定二分类的目标函数,这样模型才会用sigmoid函数把输出压缩到0-1的概率区间里。
修复方法
只需要在训练模型时,给参数字典加上二分类相关的配置就行:
# 新增二分类任务的参数配置 params = { 'objective': 'binary', # 指定二分类任务 'metric': 'binary_logloss', # 可选,用来监控训练时的损失 'random_state': 42 } # 用带参数的配置训练模型 initial_model = lgb.train(params, lgb.Dataset(X_train, label=y_train), 100)
修改后你再运行代码,y_pred_initial就会变成0到1之间的概率值,用y_pred_initial > 0.5转换为类别也完全合理,计算出来的F1分数和混淆矩阵也会更符合二分类任务的预期。
额外小提醒
你可以对比一下修改前后的y_pred_initial:修改前是回归任务的无界输出,修改后就是标准的二分类概率值,不会再出现负数或者大于1的数啦。
备注:内容来源于stack exchange,提问作者Legna
相关产品推荐
相关产品推荐

