Scikit决策树分类特征

Posted

技术标签:

【中文标题】Scikit决策树分类特征【英文标题】:Scikit Decision tree categorical features 【发布时间】:2018-05-15 03:44:34 【问题描述】:

Tom's Mitchell Machine Learning 书中有一个众所周知的问题是根据以下数据构建决策树,其中 Play ball 是目标变量。

生成的树如下

我想知道是否可以使用 scikit-learn 构建这棵树。我发现了几个可以将决策树描述为的示例

export_graphviz(clf) 
Source(export_graphviz(clf, out_file=None))

但是看起来 scikit 不能很好地处理分类数据,数据必须被二值化成几列。因此,不可能完全按照图片构建树。对吗?

【问题讨论】:

可用数据的文本形式? 标签编码? 我自己没有用过,但是这里有一个快速搜索的结果,来自 cmets,看起来很有希望。 github.com/scikit-learn/scikit-learn/pull/4899 正如@Adorn 所说,您可以将分类变量编码为一次性编码项,然后运行 ​​scikit 并检查结果。你只需要以正确的方式解释结果。 Passing categorical data to Sklearn Decision Tree的可能重复 【参考方案1】:

是的,用 scikit-learn 无法构建这样的树是正确的。

主要原因是这是一棵三叉树(节点最多有三个子节点)但是scikit-learn implements only binary trees - 节点正好有两个子节点或没有子节点:

cdef class Tree:
    """Array-based representation of a binary decision tree.
...

但是,可以得到一个等价的二叉树的形式

Outlook == Sunny
    true  => Humidity == High
        true  => no
        false => yes      
    false => Outlook == Overcast
        true  => yes
        false => Wind == Strong
            true  => no
            false => yes 

【讨论】:

@com 这就是我在解释 one-hot 编码特征的结果时所说的。

以上是关于Scikit决策树分类特征的主要内容,如果未能解决你的问题,请参考以下文章

关于决策树和随机森林分类器(scikit)的疑问

如何在 Scikit Learn 决策树中根据分类变量拆分节点?

[机器学习与scikit-learn-15]:算法-决策树-分类问题代码详解

决策树与随机森林

scikit-learn 决策树 分类问题

scikit-learn决策树算法类库使用小结