当前位置: 首页 > 面试题库 >

Python-如何从scikit-learn决策树中提取决策规则?

山鸿彩
2023-03-14
问题内容

我可以从决策树中经过训练的树中提取出基本的决策规则(或“决策路径”)作为文本列表吗?

就像是:

if A>0.4 then if B<0.2 then if C>0.8 then class='X'

谢谢你的帮助。


问题答案:

我相信这个答案比这里的其他答案更正确:

from sklearn.tree import _tree

def tree_to_code(tree, feature_names):
    tree_ = tree.tree_
    feature_name = [
        feature_names[i] if i != _tree.TREE_UNDEFINED else "undefined!"
        for i in tree_.feature
    ]
    print "def tree({}):".format(", ".join(feature_names))

    def recurse(node, depth):
        indent = "  " * depth
        if tree_.feature[node] != _tree.TREE_UNDEFINED:
            name = feature_name[node]
            threshold = tree_.threshold[node]
            print "{}if {} <= {}:".format(indent, name, threshold)
            recurse(tree_.children_left[node], depth + 1)
            print "{}else:  # if {} > {}".format(indent, name, threshold)
            recurse(tree_.children_right[node], depth + 1)
        else:
            print "{}return {}".format(indent, tree_.value[node])

    recurse(0, 1)

这会打印出有效的Python函数。这是尝试返回其输入的树的示例输出,该数字介于0到10之间。

def tree(f0):
  if f0 <= 6.0:
    if f0 <= 1.5:
      return [[ 0.]]
    else:  # if f0 > 1.5
      if f0 <= 4.5:
        if f0 <= 3.5:
          return [[ 3.]]
        else:  # if f0 > 3.5
          return [[ 4.]]
      else:  # if f0 > 4.5
        return [[ 5.]]
  else:  # if f0 > 6.0
    if f0 <= 8.5:
      if f0 <= 7.5:
        return [[ 7.]]
      else:  # if f0 > 7.5
        return [[ 8.]]
    else:  # if f0 > 8.5
      return [[ 9.]]

这是我在其他答案中看到的一些绊脚石:

  1. 使用tree_.threshold == -2来决定一个节点是否为叶是不是一个好主意。如果它是阈值为-2的真实决策节点,该怎么办?相反,你应该查看tree.feature或tree.children_*。
  2. 该行在features = [feature_names[i] for i in tree_.feature]我的sklearn版本中崩溃,因为某些值tree.tree_.feature是-2(特别是对于叶节点)。
  3. 递归函数中不需要有多个if语句,只需一个就可以了。


 类似资料:
  • 问题内容: 我是否可以从决策树中经过训练的树中提取出基本的决策规则(或“决策路径”)作为文本列表? 就像是: 谢谢你的帮助。 问题答案: 我相信这个答案比这里的其他答案更正确: 这会打印出有效的Python函数。这是一个试图返回其输入的树的示例输出,该数字介于0和10之间。 这是我在其他答案中看到的一些绊脚石: 使用来决定一个节点是否为叶是不是一个好主意。如果它是阈值为-2的真实决策节点怎么办?相

  • 问题内容: 我正在尝试在Python中使用scikit-learn设计一个简单的决策树(我在Windows OS上将Anaconda的Ipython Notebook与Python 2.7.3结合使用),并将其可视化如下: 但是,出现以下错误: 我使用以下博客文章作为参考:Blogpost链接 以下stackoverflow问题似乎也不适合我:问题 有人可以帮助我如何在scikit-learn中可

  • 问题内容: 有没有办法在scikit-learn中打印经过训练的决策树?我想为自己的论文训练决策树,并希望将论文的图片放入论文中。那可能吗? 问题答案: 有一种方法可以导出为graph_viz格式:http ://scikit- learn.org/stable/modules/generation/sklearn.tree.export_graphviz.html 因此,从在线文档中: 然后,您

  • 问题内容: 我是使用sciki-learn的菜鸟,所以请多多包涵。 我正在查看示例:http : //scikit-learn.org/stable/modules/tree.html#tree from sklearn.datasets import load_iris from sklearn import tree iris = load_iris() clf = tree.Decision

  • 决策树 概述 决策树(Decision Tree)算法是一种基本的分类与回归方法,是最经常使用的数据挖掘算法之一。我们这章节只讨论用于分类的决策树。 决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是 if-then 规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。 决策树学习通常包括 3 个步骤:特征选择、决策树的生成和决策树的修剪。 决策树 场景

  • 决策树是一种常见的机器学习方法,它基于二元划分策略(类似于二叉树),如下图所示 一棵决策树包括一个根节点、若干个内部节点和若干个叶节点。叶节点对应决策的结果,而其他节点对应一个属性测试。决策树学习的目的就是构建一棵泛化能力强的决策树。决策树算法的优点包括 算法比较简单; 理论易于理解; 对噪声数据有很好的健壮性。 使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选