栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

from sklearn.tree import _treedef tree_to_pre(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语句,只需一个就可以了。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号