通过将2个要素捆绑在一起来“帮助”决策树

时间:2018-10-31 08:33:24

标签: python algorithm machine-learning scikit-learn decision-tree

假设我在数据集中有2个(或多个)可以确定链接的特征(例如:特征B表示特征A的相关程度),有没有办法设计一个决策树,将两者要素在一起(明显的拆分将是如果要素B足够大地被A拆分,并且如果不忽略A的话)? 换句话说:我正在寻找一种“帮助”我的决策树的方法,以便在测试功能B之前不测试功能A。此外,不要单看每个功能的改进,而是要看“ B和后记”的改进。一种” 。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您可以在splitter中使用DecisionTreeClassifier参数。
为此创建自己的实现。

并使用:

my_decision_tree = sklearn.tree.DecisionTreeClassifier(splitter=mySplitter)

答案 1 :(得分:2)

您有几种可能性,

添加新功能以编码您要说的内容

您可以提供第三个功能,该功能是功能A和功能B的线性,政治或逻辑组合,并希望系统自己完成所有操作。为此,sklearn提出了Polinomial Features类和numpy的所有制作模块。

例如,如果特征B编码特征A的相关性。假设B从0变为10,则编码相关性。如果 B> i -10000 ,则可以创建新功能A_0, A_2,A_i,...,A_9 其他地方。

您还可以创建第三个特征,即A + B或A B或A B ^ 2。这些问题是,在拟合决策树之后,很难对结果进行很好的解释。

先对数据进行分区

您可以使用所需的条件对数据进行分区,然后为每个子数据集拟合不同的树。例如,您可以将数据划分为两个组:B> 5和B <= 5

制作不同的树

您可以仅将主树拟合到B的要素上,然后,对于决策树的每个叶子,现在可以考虑A和B的要素来拟合新的树。 就代码而言,这可能很麻烦,因为您需要处理多个分类器,并确保每片叶子有足够的样本,以便可以容纳更多的树。

制作自己的拆分器功能

如果您真的想掌握每一步树的决策方法,则必须按照Aditya的建议进行操作,在这种情况下,您将需要创建自己的分离器功能。

sklearn中的默认拆分器已实现here

您需要对其进行修改,以考虑到问题的所有变量