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

687    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.]]