Попытка извлечь фрейм данных, созданный в приведенном ниже коде, в формат csv. Однако он выводит только 1-ю строку, а остальные строки не извлекаются. Причина в том, что рекурсия l oop просто выводит первую строку в csv и игнорирует другие. Лучший способ оптимизировать это для вывода всех строк (правил) в csv?
def tree_to_code(tree, feature_names):
tree_ = tree.tree_
value = tree.tree_.value
samples = tree.tree_.n_node_samples
mse = tree.tree_.impurity
feature_name = [
feature_names[i] if i != _tree.TREE_UNDEFINED else "undefined!"
for i in tree_.feature
]
pathto=dict()
global k
k = 0
def recurse(node, depth, parent):
global k
listobj = []
samples = tree_.n_node_samples[node]
mse = tree_.impurity[node]
value = tree_.value[node]
indent = " " * depth
if tree_.feature[node] != _tree.TREE_UNDEFINED:
name = feature_name[node]
threshold = tree_.threshold[node]
s= "{} <= {} ".format( name, threshold )
if node == 0:
pathto[node]=s
else:
pathto[node]=pathto[parent]+' & ' +s
recurse(tree_.children_left[node], depth + 1, node)
s="{} > {} ".format( name, threshold)
if node == 0:
pathto[node]=s
else:
pathto[node]=pathto[parent]+' & ' +s
recurse(tree_.children_right[node], depth + 1, node)
else:
k=k+1
dict_obj = {'Node': node, 'Features': pathto[parent], 'Samples': samples, 'mse': mse, 'value':value}
listobj.extend([dict_obj])
df = pd.DataFrame(listobj,columns=['Node', 'Features', 'Samples', 'mse', 'value'])
print(df.head())
recurse(0, 1, 0)
tree_to_code (имя модели, список функций)