如何手动实现一个简单的基于决策树的集成方法?如何重新分配样本权重?

问题描述 投票:0回答:1

我有一个二元分类任务在工作,目标是检测阳性 (1)。数据是不平衡的,我能够构建一个具有调整类权重和其他超参数的加权决策树。以 tree1 为例,它实际上表现非常好(高召回率,中等高精度)。然而,在特征工程等方面没有重大改进的情况下,我看到了使用单一树的顶峰。

然后我在考虑使用 Ensemble Methods 来寻找增量机会。需要注意的一件事是,我们的生产环境和/或公司合规性只允许最简单的规则,例如从决策树生成的 if-then-else 样式规则。如果 EM 可以实现,它必须保持在小迭代中(例如 3)并且所有弱学习必须是 DT,稍后可以手动编码为“规则”。

通常,集成方法从弱基学习器(默认或轻微调整)开始,但在这种情况下,我有一个微调的 DT 作为“强”基学习器。我想知道引入 EM 的可行性以及能带来多少增量性能;比如说,只有一两棵树。我希望答案是肯定的并且想尝试,所以我有以下问题:

一个。使用套袋(“随机”森林):

A1。我需要重新采样训练数据吗?

A2。我必须在 tree2 中使用不同的功能集吗?否则,它本质上是对 tree1 的重新创建?问题是我使用了 tree1 中所有好的特性(A、B、C、D、E)并且可能还剩下一个 OK 特性(特性 F)。我可以在 tree2 中使用类似 (A x B, F) 的东西吗,因为 A*B 仍然是一个强大的特征,与 tree1 的相关性降低。

A3。 tree2需要超调吗?

A4。我是否必须总共使用 3 棵树并采取多数票来决定最后一类?这对我来说没有意义,因为 tree1 的检测能力要强得多。也很难为 tree3 找到合适的特征。

乙。使用提升: B1.如何在每次迭代后重新分配样本权重?我的经理建议,一种快速的方法是删除 tree1 中所有标记为 1 的实例(TP 和 FP 的权重字面上变为 0),并使用其余数据来训练 tree2。但是我记得boosting的中心思想是增加错误分类样本(即FP和FN)的权重。这是如何运作的? FP 是否更可能被捕获为 TN 而 FN 是否更有可能被捕获为 TP?给予 FP 案例更高的权重是否会使它们更有可能再次成为 FP?

B2。我是否必须为 tree2 使用相同的功能集?如果 tree1 使用 (A, B, C, D, E),我可以在 tree2 中使用类似 (A x B, F) 的东西吗?

B3。同A3。

B4。与A4相同。如果多数表决没有意义,我可以使用“tree1 = 1 or tree2 = 1, then final = 1, else 0”吗?

首选环境是python Scikit-Learn,但我不太担心编码部分,应该不会很难。从数据科学的角度来看,我对工作流程确实有一些困惑。我真的很感谢你的回答,即使是上面的一些问题。

python machine-learning scikit-learn decision-tree ensemble-learning
1个回答
0
投票

澄清一下:您想创建一个“随机森林”,其中分类器输出是对森林的多数投票,而不是单个 DT。

如果您仅限于少数树木(这远非理想)“装袋”就是您想要做的。将您的训练数据分成随机子集并训练多个版本的 DT。

但是“提升”是解决方案。围绕它有很多理论和很多自动工具。不要尝试自己做,使用例如AdaBoost。 BDT 正在做的一件事是为您创建独立的 DT。你不能像你目前所做的那样影响个人决定。 BDT 针对最佳切割顺序进行了优化。

© www.soinside.com 2019 - 2024. All rights reserved.