一次热编码后决策树中的特征解释

Posted

技术标签:

【中文标题】一次热编码后决策树中的特征解释【英文标题】:Feature interpretation in decision tree after OneHotEncoding 【发布时间】:2020-06-24 07:17:04 【问题描述】:

我试图了解在对数据执行 OneHotEncoding 以转换分类数据后,决策树如何解释特征


假设在训练数据中我们有 3 个特征(都是分类的),分别是 X1、X2、X3。

X1 有 3 个不同的值 (a,b,c), X2 有 2 个不同的值 (e,f) 和 X3 有 4 个不同的值 (m,n,o,p)。

编码后,sparse = False,结果矩阵的形状为 (X.shape[0], 9)。


现在在拟合决策树模型时,为了计算信息增益,模型会将其视为 9 个特征的训练集还是 3 个特征的训练集?

如果是 3,模型将如何知道编号。与功能关联的列数。

如果是 9,特征会不会失去重要性?

【问题讨论】:

【参考方案1】:

在任何情况下,您的模型都将与您提供给它的东西一起工作:

如果您的数据集的形状为 (X.shape[0], 9),则意味着您的 3 个类别将生成 9 个特征。在这种情况下,每个特征都成为一个布尔指示符(即:如果X1对应的列和值“a”在一行中的值为1,则表示该行在X1中添加了值“a”)。

1234563 =0.66; "c"=1.0),有效地对分类变量中的字符进行编码。

准确回答您的问题:

现在在拟合决策树模型时,为了计算信息增益,模型会将其视为 9 个特征的训练集还是 3 个特征的训练集?

模型会考虑你给它什么,如果你给他形状为 (X.shape[0], 9) 的数据,它将计算 9 个特征的信息增益,如果 (X.shape[0], 3),它将计算 3 个特征的信息增益。

如果是 3,模型将如何知道编号。与功能关联的列数。

OneHotEncoding 的意义在于将唯一字符串集合转换为唯一浮点数/整数集合。本质上,如果增益不关心您的数据是什么样的,它只是 scikit-learn 算法不接受分类变量。为了获得 IF 增益,您的 OneHotEncoding 结果与您的原始数据具有相同的“值”。

如果是 9,特征会不会失去重要性?

如果你的特征是布尔指标而不是编码的分类列,你会丢失任何信息吗?在我看来,不,您只是以另一种格式表示原始数据集中存在的信息!

理论上,没有深度限制,两种方法都应该保持相似的结果,因为您只是更改了表示,而不是数据与您所在的类之间的关系努力学习。

唯一的区别将是,如果分割规则只考虑一个特征(在 sklearn 中就是这种情况),则基于编码特征 (X1 : "a" = 0.33 ; "b"=0.66; "c"=1.0) 可以在一次拆分中分离更多案例,而不是布尔指示符。

【讨论】:

以上是关于一次热编码后决策树中的特征解释的主要内容,如果未能解决你的问题,请参考以下文章

将字符串表示为决策树中的特征,词汇量为 200(带或不带 one-hot 编码)

应用一个热编码器后如何改变决策树的特征阈值?

如何使用决策树中的 feature_importances_ 删除所有非零重要特征?

决策树中的特征重要性、离散化和标准

决策树中的特征重要性、离散化和标准

如何在 Weka 构建的决策树中找到特征重要性