OneHotEncoding之后决策树中的特征解释



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


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

X1具有3个不同的值(a、b、c(,X2具有两个不同的值(e,f(,并且X3具有4个不同的值(m,n,o,p(。

编码后,稀疏=False,得到的矩阵将具有形状(X.shape[0],9(。


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

如果是3,模型将如何知道与特征相关联的列数。

如果是9,这些功能不会失去重要性吗?

在任何情况下,您的模型都将使用您给予它的东西:

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

  • 在另一种情况下,如果形状为(X.shape[0],3(,则每列都将有一组数值(即:对于X1:"a"=0.33;"b"=0.66;"c"=1.0(,从而有效地对类别变量中的字符进行编码。

要准确回答您的问题:

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

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

如果是3,模型将如何了解与功能相关联的列数。

OneHotEncoding的点,如果只是将唯一字符串的集合转换为唯一浮点的集合。本质上,IF增益不在乎你的数据是什么样子的,它只是scikit学习算法不接受类别变量。为了IF增益,您的OneHotEncoding结果具有与原始数据相同的"值"。

如果是9,这些功能不会失去重要性吗?

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

理论上,在没有深度限制的情况下,这两种方法都应该具有类似的结果,因为您刚刚改变了表示,而不是数据和您试图学习的类之间的关系。

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

最新更新