【问题标题】:Decision Trees - Scikit, Python决策树 - Scikit,Python
【发布时间】:2021-08-19 04:50:15
【问题描述】:

我正在尝试根据一些训练数据创建决策树。我以前从未创建过决策树,但已经完成了一些线性回归模型。我有 3 个问题:

  1. 使用线性回归,我发现以迭代方式绘制图形、拟合模型、组因子水平、检查 P 统计量等相当容易,直到我最终得到一个良好的预测模型。我不知道如何评估决策树。有没有办法获得模型的摘要(例如,statsmodels 中的 .summary() 函数)?这应该是一个迭代过程,我决定一个因素是否重要 - 如果是,我怎么知道?

  2. 我在可视化决策树方面非常不成功。在我尝试过的各种不同方式上,代码似乎运行没有任何错误,但没有出现/绘图。我唯一能成功做的是tree.export_text(model),它只声明了feature_1、feature_2等等。我不知道任何功能实际上是什么。有没有人在可视化时遇到过这些困难/有一个简单的解决方案?

  3. 我生成的混淆矩阵如下:

    [[   0  395]
     [   0 3319]]
    

即该模型将所有行预测为相同的结果。有谁知道为什么会这样?

【问题讨论】:

    标签: scikit-learn decision-tree


    【解决方案1】:
    1. Scikit-learn 是一个旨在构建预测模型的库,因此没有显着性检验、置信区间等。您始终可以构建自己的统计数据,但这是一个乏味的过程。在 scikit-learn 中,可以使用 RFE、RFECV 等递归消除特征。可以找到feature selection algorithms here 的列表。在大多数情况下,这些算法会根据feature_importances 去除每个循环中最不重要的特征(其中每个特征的重要性定义为它对减少熵、基尼等的贡献)。

    2. visualize a tree 最直接的方式是tree.plot_tree()。特别是,您应该尝试将功能名称传递给feature_names。如果您想要更具体的答案,请向我们展示您迄今为止所做的尝试。

    3. 尝试另一个criterion,设置更高的max_depth,等等。有时数据集有无法识别的记录。例如,两个观测值在所有特征中具有完全相同的值,但目标标签不同。您的数据集中是这种情况吗?

    【讨论】:

    • 感谢您的详细回复。 1. 好的,我认为算法自己做出关于重要性的决定是否正确?如果是这样,评估模型的最佳方法是什么? 2. 谢谢,我设法让 tree.plot_tree() 工作,X[11]、X[10]、...等是否引用了我的训练数据中列名的索引? 3. 是的,就是这样。现在想一想,这是决策树的通病吗?这些因素是否必须具有高度的预测性/明确性才能使决策树产生良好的结果?
    • 1. Sklearn 算法不会根据显着性水平做出决策。如果无论其 p 值如何,它们都会降低成本函数,则选择预测变量。一种流行的方法是比较 x_trainx_test 上的 AUC 来决定是否应该删除某个功能。这通常被称为交叉验证。 2. 是的,功能名称与x_train 中的功能顺序相同。 3. 是的,这是因为树是一堆 if-else 分裂。如果您无法通过将变量一分为二来创建异构组,那么决策树可能不是一个好主意。
    猜你喜欢
    • 2016-05-31
    • 2017-02-23
    • 2020-04-05
    • 2018-05-15
    • 2017-03-26
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多