У меня есть код Python с деревом решений и случайными лесами. Дерево решений находит наибольшего участника, используя:
contr = decisiontree.feature_importances_.max() * 100
contr_full = decisiontree.feature_importances_ * 100
#Showing name
location = pd.to_numeric(np.where(contr_full == contr)[0][0])
result = list(df_dmy)[location + 1]
Возвращает самый большой вклад в мой набор данных и затем экспортируется в формат Graphviz с использованием:
tree.export_graphviz(rpart, out_file=path_file + '\\Decision Tree Code for Graphviz.dot', filled=True,
feature_names=list(df_dmy.drop(['Reason of Removal'], axis=1).columns),
impurity=False, label=None, proportion=True,
class_names=['Unscheduled', 'Scheduled'], rounded=True)
В случае случайных лесов мне удалось экспортировать каждое дерево, которое там используется (100 деревьев):
i = 0
for tree_data in rf.estimators_:
with open('tree_' + str(i) + '.dot', 'w') as my_file:
my_file = tree.export_graphviz(tree_data , out_file = my_file)
i = i + 1
Это, конечно, генерирует 100 файлов слов с разными деревьями. Однако не каждое дерево содержит необходимую информацию, поскольку некоторые деревья показывают другой результат. Я знаю самого крупного участника классификатора, но я также хочу увидеть дерево решений с таким результатом.
То, что я пробовал, было:
i= 0
for tree_data in rf.estimators_:
#Feature importance
df_trees = tree_data.tree_.threshold
contr = df_trees.max() * 100
contr_full = df_trees * 100
#Showing name
location = pd.to_numeric(np.where(contr_full == contr)[0][0])
result = print(list(df_dmy)[location + 1])
Используя это, я получаю ошибку:
IndexError: список индексов вне диапазона
для которого я понятия не имею, что здесь не так.
Я хотел получить таблицу данных о самых крупных участниках вместе с их факторами, чтобы отфильтровать их до фактического крупнейшего участника и самого большого вклада. Смотрите пример:
Результат (в кадре данных) =
Result Contribution
0 Car 0.74
1 Bike 0.71
2 Car 0.79
Python уже знает, что результат случайных лесов дал «машине» в качестве крупнейшего участника, первый фильтр должен удалить все, кроме «машины»:
Result Contribution
0 Car 0.74
2 Car 0.79
Затем он должен найти самый большой вклад и получить индекс.
Result Contribution
2 Car 0.79
Затем он должен экспортировать информацию дерева, соответствующую этому индексу.
Я знаю, что это довольно длинная история, но я надеюсь, что кто-то знает, как закончить этот код.
С уважением, Ганеш