(新手)决策树分类器拆分程序

数据挖掘 机器学习 Python 分类 scikit-学习 决策树
2021-10-13 05:56:06

我有一个具有 4 个分类特征(胆固醇、收缩压、舒张压和吸烟率)的数据集。我使用决策树分类器来查找中风的概率。我正在尝试验证我对 Python Sklearn 完成的拆分过程的理解。因为它是一棵二叉树,所以有三种可能的方法来分割第一个特征,或者将类别 {0 和 1 分组到一个叶子,2 到另一个叶子} 或 {0 and 2, 1} 或 {0, 1和 2}。我所知道的(请在此处纠正我)是选择的拆分是具有最高信息增益的拆分。

我已经计算了三个分组场景中的每一个的信息增益:

{0 + 1 , 2} --> 0.17

{0 + 2 , 1} --> 0.18

{1 + 2 , 0} --> 0.004

但是,sklearn 的决策树选择了第一个场景而不是第三个场景(请查看图片)。

任何人都可以帮助澄清选择第一个场景的原因吗?是否存在导致纯节点的拆分的优先级。因此选择这样的场景虽然它的信息增益较少?

我添加了每个类/特征/类别的频率,因此很容易计算基尼指数在此处输入图像描述

2个回答

sklearn 不知道您的特征是分类的;它把它当作连续的,只有形式的分裂xα已检查,因此您列出的第二个拆分候选人实际上不是候选人。

一般来说,sklearn 不支持分类变量(还没有?),如果你想要不同的行为,你需要对它进行不同的编码(one-hot?)。

另请参阅
https://datascience.stackexchange.com/a/52103/55122
当我的数据集中有连续变量和分类变量时如何制作决策树?

你是说第一到第二,不是第三?

在任何情况下可能的解释:

您在决策树中的参数是什么。例如,对于不同的min_samples_split,您可以期望不同的 GINI 值。您获得了为数据集的所有样本(行)计算的信息增益值(很可能),但这不是决策树计算它的方式(尤其是当您设置此参数时)(GINI 或 inf.gain)