【问题标题】:how extraction decision rules of random forest in python如何在python中提取随机森林的决策规则
【发布时间】:2018-11-09 01:11:27
【问题描述】:

我有一个问题。我从某人那里听说,在 R 中,您可以使用额外的包来提取在 RF 中实现的决策规则,我尝试在 python 中搜索相同的东西,但没有运气,如果对如何实现这一点有任何帮助。 提前致谢!

【问题讨论】:

    标签: machine-learning scikit-learn deep-learning random-forest decision-tree


    【解决方案1】:

    假设您使用 sklearn RandomForestClassifier,您可以找到单个决策树为 .estimators_。每棵树将决策节点存储为tree_ 下的多个 NumPy 数组。

    这里是一些示例代码,它只是按数组的顺序打印每个节点。在一个典型的应用程序中,我们会通过跟随孩子来遍历。

    import numpy
    from sklearn.model_selection import train_test_split
    from sklearn import metrics, datasets, ensemble
    
    def print_decision_rules(rf):
    
        for tree_idx, est in enumerate(rf.estimators_):
            tree = est.tree_
            assert tree.value.shape[1] == 1 # no support for multi-output
    
            print('TREE: {}'.format(tree_idx))
    
            iterator = enumerate(zip(tree.children_left, tree.children_right, tree.feature, tree.threshold, tree.value))
            for node_idx, data in iterator:
                left, right, feature, th, value = data
    
                # left: index of left child (if any)
                # right: index of right child (if any)
                # feature: index of the feature to check
                # th: the threshold to compare against
                # value: values associated with classes            
    
                # for classifier, value is 0 except the index of the class to return
                class_idx = numpy.argmax(value[0])
    
                if left == -1 and right == -1:
                    print('{} LEAF: return class={}'.format(node_idx, class_idx))
                else:
                    print('{} NODE: if feature[{}] < {} then next={} else next={}'.format(node_idx, feature, th, left, right))    
    
    
    digits = datasets.load_digits()
    Xtrain, Xtest, ytrain, ytest = train_test_split(digits.data, digits.target)
    estimator = ensemble.RandomForestClassifier(n_estimators=3, max_depth=2)
    estimator.fit(Xtrain, ytrain)
    
    print_decision_rules(estimator)
    

    输出示例:

    TREE: 0
    0 NODE: if feature[33] < 2.5 then next=1 else next=4
    1 NODE: if feature[38] < 0.5 then next=2 else next=3
    2 LEAF: return class=2
    3 LEAF: return class=9
    4 NODE: if feature[50] < 8.5 then next=5 else next=6
    5 LEAF: return class=4
    6 LEAF: return class=0
    ...
    

    我们在 emtrees 中使用类似的东西将随机森林编译为 C 代码。

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2017-03-15
      • 2021-03-24
      • 1970-01-01
      • 2019-11-09
      • 2017-05-03
      • 2019-09-09
      • 2017-12-20
      • 1970-01-01
      相关资源
      最近更新 更多