knitr::opts_chunk$set(
echo = FALSE,
message = FALSE,
warning = FALSE
)
source(here::here("R/load.R"))
该文档的主要目的是对比,同一 nround 下,学习率 eta 不同,产生的相对的欠拟合状态(样本迁移),进而导致的重要性分布不同。 并且对可能产生的原因进行讨论。
如上,两个模型训练时,超参数一致,除了学习率一高一低,这衡量了模型梯度下降的速度,如果速度太忙,那么训练的效果会不佳,但是这种不佳是很隐藏的,从普通的 KS 和 AUC 上难以察觉。
iter | train_auc | validation_auc |
---|---|---|
11 | 0.649063 | 0.640536 |
12 | 0.649919 | 0.641373 |
13 | 0.651292 | 0.642500 |
14 | 0.651284 | 0.642772 |
15 | 0.652287 | 0.643144 |
16 | 0.653008 | 0.644152 |
iter | train_auc | validation_auc |
---|---|---|
11 | 0.656236 | 0.642508 |
12 | 0.657834 | 0.641979 |
13 | 0.660345 | 0.642079 |
14 | 0.660750 | 0.642316 |
15 | 0.662785 | 0.642846 |
16 | 0.664995 | 0.643786 |
如上图比较,两个模型在 boosting 16次后,auc 差不多,并且也没有发现典型的过拟合情况(训练集和测试集 AUC 差异很大)。 检查的问题的关键是查看样本迁移。
## y_hat_eta01 y_hat_eta03 y
## 0.13764141 0.05311849 0.04821518
如上所示,
eta = 0.1
的模型,测试集中样本预测值的均值在 compare_eta[1]
,远高于真实值,也就是样本迁移的情况。 样本迁移的情况很多,但是在二分类情况下很少见,因为一般是回归模型中,被解释变量是连续变量,出现双峰等情况才会造成。eta = 0.3
的模型,测试集中样本预测值的均值在 compare_eta[2]
,接近于真实值。因此我们会发现eta = 0.3
的模型避免了欠拟合的情况。
以上是铺垫,是训练模型的层面,对于一个变量,如果需要他 robust,那么我们必须保证它在不同情况下都能很显著,因此我们比较两个模型下的变量重要性分布情况。