pulearning中oob_decision_function_与predict函数的差异及选型疑问
PU学习中两种预测概率方法的区别与选择
核心区别
方法1(袋外OOB概率)
这段代码提取集成模型的袋外预测结果,过滤NaN后得到概率:res = bc.oob_decision_function_[:,1] prdict_proba = np.array([i for i in res if not np.isnan(i)])它的概率来自没见过当前样本的基模型——每个训练样本会被部分基模型选中训练,剩下没选中它的基模型会对其做预测,这些预测的集成结果就是OOB概率。若某个样本被所有基模型都选中训练,就会出现NaN,因此需要过滤。
本质上这是训练样本的「无偏验证概率」,因为预测该样本的模型完全没用到它的训练信息,能反映模型的真实泛化能力。方法2(模型直接预测概率)
这段代码调用集成模型的predict_proba方法直接计算概率:y_pred_prob = bagging_model.predict_proba(train_x)它是用所有基模型对输入样本做预测后集成的结果,对于训练集样本来说,大部分基模型都见过该样本,所以这个概率是模型对训练数据的拟合结果,可能存在过拟合偏差。
选用场景
- 若要评估模型的泛化能力,或需要训练样本的无偏概率估计(比如PU学习里修正正负样本权重),选方法1的OOB概率,它不需要额外拆分验证集,结果更可靠。
- 若需要对新的未知样本做预测,或直接用模型输出任意输入的概率,必须选方法2的
predict_proba——OOB概率仅针对训练集中的袋外样本,无法用于新样本。
内容的提问来源于stack exchange,提问作者Green_John
相关产品推荐
相关产品推荐

