5

谁能告诉我sklearn(Python)中的集成(如随机森林、梯度提升、Adaboost)和树(如决策树)如何处理连续变量?在建造树木时,它们是否被视为每个单独的价值?还是他们自动装箱?如果它们被分箱 - 遵循的逻辑是什么。如果它们没有被装箱,我肯定我错过了一些东西。应该有一些可用的智能分箱(内置?),它将根据类分布将变量值分箱(至少在二进制分类的情况下)

深入:当我在 weka 中加载我的 arff(高度倾斜的数据集中的数百万行和数百个特征)并滚动浏览变量/目标(二进制)图时,我可以看到其中许多都有强大的 bin(目标为正的区域)。这些垃圾箱,即 >=x <=y 是否被 sklearn 中提到的上述模型自动拾取?见附图(如果你能看到它,变量/目标图中有非常细的 6 条红线)

非常感谢您对此的任何见解

问候

在此处输入图像描述

4

2 回答 2

5

使用默认设置(非随机拆分),每次通过拆分数据集来生成决策树或回归树时,正在考虑的数据集部分按所考虑的每个特征的值依次排序(随机森林或ExtraTrees森林,每次可能随机选择特征)。然后将每对相邻f[i], f[j]特征值的平均值视为候选分割,除非这对特征值之间的距离小于 1e-7(当前在代码中硬连线的任意常数)。根据 Gini/entropy/other 拆分标准,最佳拆分用于将数据集拆分为具有 的点f < (f[i] + f[j]) / 2和具有较高值的​​点f

Iow,不执行显式分箱。

(我实际上并不是一个决策树专家,但我确实致力于 scikit-learn 的实现,特别是我通过为其编写更快的排序算法来优化拆分代码。)

于 2014-08-16T17:28:43.047 回答
1

我不确切知道 scikit-learn 做了什么,但我怀疑没有分箱,它只是使用连续值。在最简单的决策树形式中,您测试的规则只是 x_j >= x_ij 对于每个变量以及对于该变量的每个观察到的实现。

文档(参见 1.8.7 数学公式)建议他们使用这种简单的方法。只需测试每个变量的每个(或某些子集)可能的阈值。

于 2014-08-13T14:30:42.313 回答