从决策树的叶子节点中提取特征

数据挖掘 决策树 特征工程 特征提取 卡格尔 课程
2022-02-10 17:03:05

最近遇到了一个关于“如何赢得 Kaggle 比赛”的课程,其中解释了我们如何从决策树的每个叶节点设计一个分类特征。

[视频链接][1]

我无法理解这个概念。任何有助于理解这一点的建议或指示都会很棒。

例如假设以下随机训练数据:

Gender  Age Sample_Ftre

 M      25   1.5
 M      26   1.5
 F      28   1.5
 F      27   1.5
 M      26   1.5

任何人都可以解释engineered_feature决策树中 new 的值是什么以及如何计算它。

1个回答

我将描述我个人的方法来实现您提到的课程中所教的内容,我认为这是一个令人兴奋的课程!

为您的训练集生成 DT 特征:

首先,将您的训练数据拆分为 k 折。有必要避免过拟合。然后:

  1. 隐藏一个折叠并使用剩余的 (k-1) 个折叠构建一个 DT。使用sklearnmax_leaf_nodes中的参数控制 DT 中叶节点的数量将其设置为新分类特征中所需的类别(级别)数。
  2. 预测保留折叠的输出。当您使用 DT 进行预测时,每个观察结果都会落入一片叶子​​中。因此,新特征的值将是每个观察结果所在的叶子的索引。您可以使用sklearnapply中的命令获取此索引

对 k 个折叠中的每一个重复这 2 个步骤。

为您的测试集生成 DT 特征:

  1. 使用整个训练集构建一个 DT。不要忘记将max_leaf_nodes参数设置为与上面使用的相同。
  2. 预测测试集的输出。获取每个测试观察的叶子索引。

现在您有了一个新的分类特征,其中包含 DT 预测中的叶索引。

此过程的问题

  • 由于您无法控制每个 DT 中的拆分顺序,因此在每个 CV 折叠中找到的索引可能不匹配。例如,在第一个折叠中找到的类别“0”可能与在第二个折叠中找到的类别“0”不同。
  • 同时,不建议(按照课程中的建议)使用整个训练集构建 DT,然后使用相同的 DT 预测训练集和测试集的叶索引。这可能会导致过度拟合,因为您在训练集中引入了目标信息。

所以,我们能做些什么?

您可以不使用叶子索引作为特征值,而是计算每个观察经过的节点数,直到它落入叶子中,并将其用作特征值。简而言之,它是从根节点到叶节点的路径长度。我认为这是一个更具信息性的价值。这就是隔离森林背后的原理