es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Exportar / Graficar Árbol de Decisión de Bosque Aleatorio / El objeto ‘RandomForestClassifier’ no tiene el atributo ‘tree_’.

Buenas noches a todos.

El objetivo de esta publicación es poder trazar el árbol de decisión del proceso de árbol de decisión aleatorio. Después de ejecutar las diferentes opciones, siempre obtuve el siguiente error: ‘RandomForestClassifier’ no tiene el atributo ‘tree_’.

Realmente agradezco cualquier ayuda / ejemplos de código / ideas o enlaces para poder resolver esta situación.

En el siguiente set de código, mostramos cómo pude trazar el árbol de decisión normal / regular.

clf_SMOTE1 = DecisionTreeClassifier(criterion='entropy', max_depth=4, min_samples_leaf=7)
clf_SMOTE1

clf_SMOTE1 = clf_SMOTE1.fit(X_train, Y_train)

a = df.columns[6:]
dot_data = tree.export_graphviz(clf_SMOTE1, out_file=None, filled=False, feature_names=a)
graphviz.Source(dot_data)

En las siguientes líneas, mostramos los diferentes intentos que he probado sin obtener resultados.

clf_SMOTE2 = RandomForestClassifier(criterion='entropy', bootstrap=True, max_depth=4, min_samples_leaf=7)
clf_SMOTE2

clf_SMOTE2 = clf_SMOTE2.fit(X_train, Y_train)

a = df.columns[6:]
dot_data_2 = tree.export_graphviz(clf_SMOTE2, out_file=None, feature_names=a, precision=2, filled=False)
graphviz.Source(dot_data_2)

Opción 2:

clf_SMOTE2 = RandomForestClassifier(criterion='entropy', bootstrap=True, max_depth=4, min_samples_leaf=7)
clf_SMOTE2

clf_SMOTE2 = clf_SMOTE2.fit(X_train, Y_train)

a = df.columns[6:]
dot_data_2 = tree.plot_tree(clf_SMOTE2, model.estimators_[5], feature_names=a)
graphviz.Source(dot_data_2)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Python, random-forest, graphviz y decision-tree, entiendo el problema que estás enfrentando al trazar el árbol de decisiones del proceso de random decision tree. El mensaje de error que estás obteniendo “‘RandomForestClassifier’ object has no attribute ‘tree_'” se debe a que los random forests no tienen un solo árbol de decisiones; en cambio, consisten en múltiples árboles de decisiones. Por lo tanto, no puedes trazar un solo árbol de decisiones a partir de un random forest.

    Una opción que tienes es trazar los árboles individuales del modelo de random forest. Puedes acceder a los árboles individuales de un modelo de random forest utilizando el atributo “estimators_”. Por ejemplo, puedes trazar el quinto árbol de decisiones del modelo de random forest utilizando el siguiente código:

    clf_SMOTE2 = RandomForestClassifier(criterion='entropy', bootstrap=True, max_depth=4, min_samples_leaf=7)
    clf_SMOTE2 = clf_SMOTE2.fit(X_train, Y_train)
    dot_data_2 = tree.export_graphviz(clf_SMOTE2.estimators_[5], out_file=None, filled=False, feature_names=a)
    graphviz.Source(dot_data_2)
    

    Alternativamente, puedes trazar las importancias de las características del random forest utilizando el atributo “feature_importances_” del modelo ajustado. Esto te mostrará qué características fueron más importantes en el modelo de random forest, pero no te dará una visualización de la estructura del árbol de decisiones.

    import matplotlib.pyplot as plt
    
    importance = clf_SMOTE2.feature_importances_
    plt.bar(range(len(importance)), importance, tick_label=a)
    plt.xticks(rotation=90)
    plt.title("Importancia de las características")
    plt.show()
    

    Espero que esto te ayude a resolver tu problema. Si tienes alguna pregunta adicional, no dudes en preguntar.

Comments are closed.