【问题标题】:In sklearn, how can one-hot encoding help when building decision tree with categorical features?在 sklearn 中,one-hot encoding 如何在构建具有分类特征的决策树时提供帮助?
【发布时间】:2018-08-25 16:54:39
【问题描述】:

根据here,sklearn 无法处理分类变量。并建议使用 one-hot 编码来处理这些特征。但是,我不明白 one-hot 编码如何提供帮助?比如把country=USA or China or England转换成country=USA是真还是假,新的特征'country==USA'毕竟还是分类的(只能取0或1)。这不会改变任何事情。 Sklearn 仍然将 0 或 1 视为数值。

举一个真实的例子here,我转换了数据:

human,warm-blooded,hair,yes,no,no,yes,no,mammal
python,cold-blooded,scales,no,no,no,no,yes,reptile
salmon,cold-blooded,scales,no,yes,no,no,no,fish
whale,warm-blooded,hair,yes,yes,no,no,no,mammal
frog,cold-blooded,none,no,semi,no,yes,yes,amphibian
komodo dragon,cold-blooded,scales,no,no,no,yes,no,reptile
bat,warm-blooded,hair,yes,no,yes,yes,yes,mammal
pigeon,warm-blooded,feathers,no,no,yes,yes,no,bird
cat,warm-blooded,fur,yes,no,no,yes,no,mammal
leopard shark,cold-blooded,scales,yes,yes,no,no,no,fish
turtle,cold-blooded,scales,no,semi,no,yes,no,reptile
penguin,warm-blooded,feathers,no,semi,no,yes,no,bird
porcupine,warm-blooded,quills,yes,no,no,yes,yes,mammal
eel,cold-blooded,scales,no,yes,no,no,no,fish
salamander,cold-blooded,none,no,semi,no,yes,yes,amphibian
gila monster,cold-blooded,scales,no,no,no,yes,yes,

进入

[[1. 0. 1. 0. 0. 0. 1. 0. 1. 0. 1. 1. 0. 0. 0. 1. 0. 0. 0.]
 [1. 0. 1. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 0. 1. 1. 0. 1. 0. 1. 0. 1. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 0. 1. 0. 1. 0. 1. 1. 0. 1. 0. 0. 0. 1. 0. 0. 0.]
 [1. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 0.]
 [1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 1.]
 [0. 1. 1. 0. 0. 0. 1. 0. 1. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0.]
 [0. 1. 1. 0. 0. 0. 1. 1. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 0.]
 [1. 0. 1. 0. 0. 0. 1. 0. 1. 0. 1. 1. 0. 0. 1. 0. 0. 0. 0.]
 [1. 0. 0. 0. 1. 1. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 1. 0. 0. 1. 1. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 0.]
 [1. 0. 1. 0. 0. 0. 1. 0. 1. 0. 1. 0. 1. 0. 0. 0. 0. 1. 0.]
 [1. 0. 0. 0. 1. 1. 0. 1. 0. 1. 0. 1. 0. 0. 0. 0. 0. 0. 1.]
 [1. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 0.]
 [1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 0. 0. 0. 1.]]

并构建一个类似的决策树

decision tree(click to open) 分割点仍然很荒谬(例如 Give Birth=no

【问题讨论】:

  • 他们可能的意思是 sklearn 无法处理具有多个类别的特征。 sklearn 将所有内容都转换为浮点数,因此 1 和 0 都可以,但是像 3 标签类(数据 ∈ {0,1,2})这样的东西将具有隐式顺序。我认为你在这里很好。

标签: python scikit-learn decision-tree


【解决方案1】:

首先,我们还要记住SKlearn可以only build binary tree。例如,有一个颜色特征,对不同的颜色取 0,1,2,3,4,5。我们使用 color

one-hot 编码就像 Sklearn 可以处理分类数据一样。例如,如果数据中有一个真实的特征“country==USA”,取0或1作为分割特征,那么叶子是country==USA为0,country==USA为1。虽然Sklearn仍然使用数值分裂点如0.5(分裂点必须在0和1之间,否则不会很好分裂),如果country==USA

【讨论】:

    猜你喜欢
    • 2016-03-02
    • 2016-07-29
    • 2017-11-09
    • 2018-06-27
    • 1970-01-01
    • 2021-06-07
    • 2017-02-24
    • 2019-07-11
    • 2018-05-15
    相关资源
    最近更新 更多