lightgbm的Python Dataset参考参数是什么意思?

9
我正在尝试使用Python中的LightGBM训练GBDT分类器,但在官方网站提供的示例中感到困惑。 按照列出的步骤,我发现验证数据来源不明确,并且关于valid_data的格式、是否使用它来训练模型以及其价值或可用性没有任何线索。 validation data creation step 另一个问题是,在文档中说:“验证数据应与训练数据对齐”,但我查看了数据集详细信息后发现有另一种说法:“如果这是验证集的数据集,则应使用训练数据作为参考”。 我的最后几个问题是:为什么验证数据应与训练数据对齐?数据集中“参考”的含义是什么,如何在训练过程中使用它?将参考设置为训练数据是否实现了对齐目标?此“参考”策略与交叉验证有何区别? 希望有人能帮我摆脱这个迷宫,谢谢!
2个回答

6
“验证数据应与训练数据对齐”的想法很简单:每次对训练数据进行预处理时,您都应该以同样的方式对验证数据进行处理,并且在生产中也是如此。这适用于每种机器学习算法。
例如,对于神经网络,您通常会对训练输入进行归一化(减去平均值并除以标准差)。假设您有一个变量“年龄”,在训练中平均为26岁。它将被映射到“0”以训练神经网络。对于验证数据,您希望以与训练数据相同的方式进行归一化(使用训练的平均值和标准差),以便在验证中,26岁仍然映射到0(相同的值->相同的预测)。
LightGBM也是如此。数据将被“bucketed”(简而言之,每个连续值都将被离散化),您希望在训练和验证中将连续值映射到相同的区间。这些区间将使用“参考”数据集计算得出。

关于没有验证的训练,大多数情况下你都不想这样做!如果没有验证来调整诸如“num_boost_round”之类的参数,使用增强树很容易在训练数据上过拟合。


谢谢@Florian Mutel,现在我明白了引用参数的意义,但我认为这与训练本身无关,仅在我们想要预测新样本时使用,对吧?您的意思是当我们提供valid_set时,lightGBM.train()方法包括训练和预测行为吗? - kuixiong
再次@FlorianMutel,这个训练方法只会进行一次验证,而实际上我们可以使用train方法进行k折交叉验证,而不提供valid_set,并使用predict方法自行验证模型。另一个大问题是我发现predict方法中没有'reference'参数?这怎么可能? - kuixiong
1
“reference”不会对您的模型训练产生任何影响,它对于创建验证数据集非常有用,该数据集在每次提升轮后由lightgbm用于计算验证性能。对于交叉验证,不要自己编写代码,可以看一下lightgbm.cv函数。对于预测,不再使用分桶:训练后,模型会进行后处理,例如lightgbm会用其边界值替换桶。这对于预测(不再需要参考)和模型解释(年龄> 26岁而不是年龄> bin122)更加方便。 - Florian Mutel

-1

仍然一切都很棘手 你能分享一个完整的例子,包括使用和不使用这个“reference=”吗? 例如 会有所不同吗

import lightgbm as lgbm
importance_type_LGB = 'gain'
d_train = lgbm.Dataset(train_data_with_NANs, label= target_train)
d_valid = lgbm.Dataset(train_data_with_NANs, reference= target_train)
lgb_clf = lgbm.LGBMClassifier(class_weight = 'balanced' ,importance_type = importance_type_LGB)
lgb_clf.fit(test_data_with_NANs,target_train)
test_data_predict_proba_lgb = lgb_clf.predict_proba(test_data_with_NANs)

来自

import lightgbm as lgbm
importance_type_LGB = 'gain'
lgb_clf = lgbm.LGBMClassifier(class_weight = 'balanced' ,importance_type = importance_type_LGB)
lgb_clf.fit(test_data_with_NANs,target_train)
test_data_predict_proba_lgb = lgb_clf.predict_proba(test_data_with_NANs)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接