How to extract the underlying decision-rules (or 'decision paths') from a trained tree in a decision tree as a textual list?

792    Asked by AshishSinha in Data Science , Asked on Nov 4, 2019
Answered by Ashish Sinha

if A>0.4 then if B0.8 then class='X'

In order to extract the decision rules, we can use the following code.

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)


It will return a valid Python function. Also we try an example output for a tree that is trying to return its input, a number between 0 and 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.]]



Your Answer

Interviews

Parent Categories