Python sklearn集合和树中连续变量的分块

Python sklearn集合和树中连续变量的分块,python,machine-learning,scikit-learn,decision-tree,ensemble-learning,Python,Machine Learning,Scikit Learn,Decision Tree,Ensemble Learning,有人能告诉我sklearn(Python)中的集成(如随机林、梯度增强、Adaboost)和树(如决策树)是如何处理连续变量的吗?在建造树木时,它们是否被视为每个单独的值?或者它们是自动装箱的?如果它们被装箱,遵循的逻辑是什么。如果它们没有被丢弃,我肯定我错过了什么。应该有一些可用的智能装箱(内置?),根据类别分布将变量值装箱(至少在二进制分类的情况下) 深入:当我在weka中加载我的arff(一个高度倾斜的数据集中有数百万行和几百个特征)并滚动变量/目标(二进制)图时,我可以看到其中许多都有很

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


深入:当我在weka中加载我的arff(一个高度倾斜的数据集中有数百万行和几百个特征)并滚动变量/目标(二进制)图时,我可以看到其中许多都有很强的BIN(目标为正的区域)。我不知道scikit learn到底做什么,但我怀疑没有装箱,它只是使用连续值。在决策树的最简单形式中,对于每个变量以及该变量的每个观察实现,您测试的规则只是x_j>=x_ij

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

使用默认设置(非随机拆分),每次通过拆分数据集生成决策树或回归树时,所考虑的数据集部分将依次按照所考虑的每个特征的值进行排序(在随机林或树外林中,每次可随机选择特征)。然后特征值的每个相邻对
f[i],f[j]
的平均值被视为候选分割,除非该对之间的间隔小于1e-7(代码中当前硬连接的任意常数)。根据基尼/熵/其他分割标准,使用最佳分割将数据集分割为
f<(f[i]+f[j])/2
f
值较高的点

I.o.w.,未执行明确的装箱


(实际上,我不是一名决策树专家,但我确实参与了scikit学习实现,特别是我通过编写更快的排序算法优化了拆分代码。)

当有数百万行的值彼此接近时(在每个功能中),但不同的是,这种树的建造不会很好地工作。如果你看到上图-有坚固的箱子,可能有脆弱的豆子(你看不到红色,因为它可能太薄了)在每个功能中。如果我们可以获得每个功能的强容器,并通过组合它们来创建规则,与检查单个值相比,这可能会提供更好的分类。特别是在倾斜数据中,容器中也有大量的0值。肯定存在某些问题。是的,但在这种情况下,您可能应该在自己的计算机上进行分类如果我在设计一个通用决策树实现,我会觉得很不舒服。这种功能转换需要领域和数据知识。当然,请记住,我实际上不知道sk learn实现,我只是离开他们的文档。嗯-好的-谢谢罗杰。我会等待,看看是否有其他人给出任何其他建议。WEKA是如何进行分类的?如果我将鼠标悬停在WEKA的栏上,我可以看到它对每个功能都进行了分类。Larsmans-太好了,来自马口的st。谢谢。我想知道为什么相邻的两个功能。例如,house_sqft、house_pincode、house_hasdeck是选定的功能s表示一棵树决定house_highvalue(是或否)。如果我没有弄错,首先将数据集拆分为house_sqft(sum(house_sqft)+sum(house_pincode)/2,然后计算基尼/熵。然后将数据集拆分为house_sqft(sum(house_sqft)+sum(house_hasdeck)/2等等…?但这肯定需要跨功能(不常用)和松散信息进行规范化。我肯定必须这样做wrong@Run2:我指的是排序后的相邻样本。因此,您可以在
sqft
上对房屋进行排序,然后比较所有n-1对
sqft[I],sqft[I+1]
,其中我对已排序房屋列表进行索引。(这实际上只是计算所有的分割,可能我讨论了太多的算法细节。scikit learn中的决策树算法就是你在ISLR等教科书中找到的算法。)谢谢,我理解。我肯定认为这里还有改进的余地。我很乐意去做并实现它。我对子组发现做了一些研究,它可能是这个拆分逻辑的一个很好的附加功能/额外功能。如果你有一些关于如何走这条路的建议,请提供建议。@Run2在邮件列表上注册并发布一个混乱年龄。它列在上面的某个地方。每棵树的每个节点本身就是一个由上游拆分规则定义的bin。很少有任何完美的binning程序,但许多低相关树模型的平均集合表现良好,甚至可以成为一个几乎平滑的函数估计器。如果连续变量的值为1:5(1到5)可能的拆分是1:2:5、1:2、3:5、1:3、4:5和1:4;5。尝试成百上千个可能的断点是相当快的。