【问题标题】:How to make a descriptive tree out of categorical variables with Python Decision Tree Classifier如何使用 Python 决策树分类器从分类变量中创建描述树
【发布时间】:2021-03-15 00:44:29
【问题描述】:

每次我们使用 Python (sklearn) 拟合树分类器时,我们都应该将分类数据转换为数值数据。转换后,如果我们想看看这棵树的实际样子,我们几乎无法观察到,因为我们只能看到数字。

那么,如果我想使用 Python 绘制一棵描述性树(只是想看看它在哪里分裂,它使用哪个类别。),我应该怎么做? R好像没有这种问题,但是Python有什么解决办法吗?

【问题讨论】:

    标签: python decision-tree


    【解决方案1】:

    很好的问题和解释模型的非常好的练习。这是我的意见。

    1. 根据您的要求准备数据。像往常一样对分类数据进行热编码。如果属性是有序的,请使用适当的预处理。

    2. 使用 sklearn 拟合决策树。根据需要执行超参数调整。后半部分很重要,因为有时如果数据很大,绘制的决策树会变得难以阅读。

    3. 现在可以通过多种方式绘制树 - 表示为文本或表示为树的图像。

    3.1 用于文本表示

    from sklearn import tree
    from sklearn.tree import DecisionTreeClassifier
    model_instance = DecisionTreeClassifier()
    model_instance.fit(X,y)
    text_representation = tree.export_text(model_instance)
    print(text_representation)
    

    3.2 绘制树

    import matplotlib.pyplot as plt
    fig = plt.figure(figsize=(15,8)) # I like 15,8 personally
    tree.plot_tree(model_instance,feature_names,class_names,filled=True) 
    
    # if you'd like to save the tree as .png
    
    fig.savefig("Tree.png")
    

    有用的资源:

    1. https://scikit-learn.org/stable/modules/generated/sklearn.tree.plot_tree.html
    2. https://mljar.com/blog/visualize-decision-tree/

    【讨论】:

    • 感谢您的回答!我尝试了这两种方法,但我没有得到原始特征的分割信息,它们仍然是数字。例如:|--- 特征_37 0.50 | | | |--- 等级:1 | |--- 特征_23 > 0.50 | | |--- 特征_0 51.50 | | | |--- 等级:1 |--- 特征_37 > 0.50 | |--- 类:0 什么是 feature_37?有没有办法将其映射回原始特征?
    • 嗨 Anuj,我尝试了“tree.plot_tree(dct,data_x.columns, data_y.columns,filled=True)”,但它从未奏效。我收到错误“索引 37 超出轴 0 大小为 1 的范围”。 dct 是我安装的模型。我只是意识到我可以使用“feature_37”来确定它与数字 37 一起使用的功能,但如果我仍然可以使第二个选项起作用会更好。
    • feature_37 等新功能是我理解的 one-hot 编码功能。因此,如果您的分类属性有 n 个唯一值,那么您现在将 feature_n、feature_n-1 等作为新特征。
    猜你喜欢
    • 2018-10-20
    • 2021-04-22
    • 2017-01-27
    • 2021-10-14
    • 2013-12-01
    • 1970-01-01
    • 2016-09-11
    • 2018-05-03
    • 2021-12-02
    相关资源
    最近更新 更多