一种热编码及其与 DecisionTreeClassifier 的组合

Posted

技术标签:

【中文标题】一种热编码及其与 DecisionTreeClassifier 的组合【英文标题】:One hot encoding and its combination with DecisionTreeClassifier 【发布时间】:2018-04-08 05:39:32 【问题描述】:

所以我的理解是,您执行一种热编码以将分类特征转换为整数,以使其适合 scikit learn 机器学习分类器。

假设我们有两个选择

一个。将所有特征拆分为一个热编码特征(如果 A 是一个分类特征,其取值 'a'、'b' 和 'c',那么它变成 A_a、A_b 和 A_c,其每一行中的二进制值都是二进制的值“1”表示观察具有特征,二进制值“0”表示它不具有特征!)。然后我会在上面安装一个 DecisionTreeClassifier。

b.不拆分所有特征,而是将每个类别转换为一个整数值而不执行一次热编码(如果 A 是一个类别特征,其取值 'a'、'b' 和 'c',那么 'a'、'b'和 'c' 被重命名为 1、2、3 并且没有创建新列,'A' 仍然是一个具有整数值 1、2、3 的单列,通过使用 pandas.factorize 或您适合的 DecisionTreeClassifier。

我的问题是,当您将 DecisionTreeClassifier 放在一个具有多列的热编码数据集上时,每个新列都会被视为一个单独的特征吗?

此外,如果您将 DecisionTreeClassifier 拟合到数据集上,其中分类特征被简单地转换为整数并保存在单个列中;它会产生与决策树分类器在具有单热编码特征的数据集上拟合的节点分裂相同的节点分裂吗?

就像,当你在这两种情况下可视化树时,

下面给出的解释是否正确?

对于具有单热编码的决策树分类器

如果属性 == A_a,那么是的

如果属性 == A_b,则没有

对于没有单热编码的决策树分类器(“a”由整数值 1 表示,“b”由值 2 表示)

如果属性 == 1 则为是

如果属性 == 2,则否

【问题讨论】:

【参考方案1】:

您描述的两个选项做了两个非常不同的事情。

如果您选择对变量的值进行二值化(单热编码),则它们没有顺序。每次拆分时的决策树都会考虑对每个新的二元变量进行二元拆分,并选择信息量最大的一个。所以是的,每个二元特征现在都被视为一个独立的特征。

第二个选项将值按顺序排列。如果转换a=1b=2c=3,则暗示您是在说a < b < c。如果您在决策树中使用此变量,算法会考虑拆分 1 与 2,3 和 1,2 与 3(但不考虑 3 与 1,2)。

所以变量的含义是非常不同的,我认为你不能期望得到相同的结果。

【讨论】:

以上是关于一种热编码及其与 DecisionTreeClassifier 的组合的主要内容,如果未能解决你的问题,请参考以下文章

一种热编码保留用于插补的 NA

字符串分类特征的一种热编码

一种热编码分类特征 - 仅稀疏形式

大型数据集的一种热编码

一种热编码标签和分层 K 折交叉验证

如何对变体长度特征进行一种热编码?