如何在xgboost中的每次增强迭代期间更改数据集功能?

时间:2018-01-10 11:42:34

标签: python algorithm data-structures xgboost

我想在本文中复制算法 - https://www.ii.pwr.edu.pl/~tomczak/PDF/[MZSTJT].pdf

我理解它的方式我需要:

  1. 使用初始数据集训练基础学习者。
  2. 从训练有素的模型中获取特征的重要性,并通过阈值去除不重要的特征(例如,所有分裂的至少5%)。
  3. 从其余部分根据他们的f分数(分裂数量)进行简单的概率分布。
  4. 使用此分布样本替换两个特征并在它们之间进行随机数学运算(+, - ,*,/)(例如:f1 * f2)。这样做几次。
  5. 将生成的新功能添加到新数据集中。
  6. 使用新数据集训练下一个基础学习者,该数据集包含上次迭代中最重要的特征加上新生成的特征。
  7. 我正在使用xgboost的Python API。有没有办法在迭代之间控制Dmatrix,所以我可以添加新功能?

1 个答案:

答案 0 :(得分:0)

据我所知,开箱即用是不可能的。问题是整体的每个树都有不同的特征,而算法并不是为了这个特征而做的(据我所知)。

您可以做的是使用您的Dmatrix训练模型,进行特征选择/生成并创建包含新功能的新Dmatrix并训练新的增强树模型。

只是浏览一下这篇文章,我会说他们提出的建议主要是我上面提出的建议。它们不包括以前基础学习者的新功能,基本上学习者可以是任何模型(可能只是梯度提升的树在近期表现得非常好 - 除了CNN之外)。他们的算法结果只是一组“基础”模型。他们把它称为增强树木的集合(所以是一个整体的集合)。

他们的方法主要是普通特征选择程序的包装变体,其特殊之处在于它们还可以创建合成特征。

另一方面,他们的结果看起来并不那么好,确定它很重要,但没有给出足够的数据。您也可以使用原始的XGBoost算法,并且很可能在现实世界性能方面不会变得更糟(仅仅是我的两分钱)。