通过将 2 个功能绑定在一起的"帮助"决策树



假设我的数据集中有 2 个(或更多)确定链接的特征(例如:特征 B 表示特征 A 的相关性),有没有办法设计一个决策树将两个特征联系在一起(明显的分裂是如果特征 B 足够大被 A 分割,如果不忽略 A)? 换句话说:我正在寻找一种方法来"帮助"我的决策树在测试功能B之前不测试特征A.另外,不是单独查看每个功能的改进,而是查看"B和后记A"的改进。任何帮助将不胜感激!

您可以使用splitter参数在DecisionTreeClassifier中执行此操作。
为此,请创建自己的实现。

并使用:

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

你有几种可能性,

添加新功能,对您想说的内容进行编码

您可以给出第三个特征,即特征 A 和 B 的线性、极性或逻辑组合,并希望系统能够自行计算出所有特征。为此,sklearn提出了Polinomial Features类和numpy的所有制作模块。

例如,如果特征 B 对特征 A 的相关性量进行编码。假设 B 从 0 到 10,则对相关性量进行编码。您可以创建新功能A_0、A_2、A_i、...A_9,如果B> i-10000在其他任何地方都是 A 的值。

您还可以创建第三个特征,即 A+B或 A B 或 AB^2。这些问题的问题是,在拟合决策树后,它们更难对结果给出良好的解释。

事先对数据进行分区

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

制作不同的树

您只能对 B 中的特征拟合主树,然后,对于决策树的每个叶子,您现在可以考虑来自 A 和 B 的特征拟合新树。 这在代码方面可能很混乱,因为您需要处理多个分类器并确保每个叶子有足够的样本,以便可以容纳更多的树。

制作自己的分路器功能

如果你真的想掌握树在每一步的决定,你必须按照Aditya的建议去做,在这种情况下,你需要创建自己的拆分器函数。

sklearn 中的默认拆分器在这里实现

您需要修改它以考虑问题的所有变量

最新更新