Introducción a árboles de decisión

1

¿Qué son los árboles de decisión?

2

Tu primer árbol de decisión con scikit-learn

3

Análisis de datos para tu primer árbol de decisión

4

Entrenamiento y evaluación de árbol de decisión con scikit-learn

5

¿Cómo funcionan los árboles de decisión?

6

¿Cuándo usar árboles de decisión?

Quiz: Introducción a árboles de decisión

Proyecto práctico: árboles de decisión

7

Conociendo problema a resolver y dataset de clasificación

8

Análisis exploratorio de datos para árbol de decisión

9

Procesamiento de datos para el entrenamiento de árbol de decisión

10

Entrenamiento de modelo de clasificación con árbol de decisión

11

¿Cómo evaluar un modelo de árbol de decisión?

12

Evaluación de resultados del modelo de árbol de decisión

Quiz: Proyecto práctico: árboles de decisión

Introducción a random forest

13

¿Qué son los random forest o bosques aleatorios?

14

Tu primer random forest con scikit-learn

15

Análisis de datos para tu primer random forest

16

Entrenamiento de tu primer modelo de random forest con scikit-learn

17

Evaluación de tu primer modelo de random forest con scikit-learn

18

¿Cómo funcionan los random forest?

19

¿Cuándo utilizar random forest?

Quiz: Introducción a random forest

Proyecto práctico: random forest

20

Entrenamiento de modelo de clasificación de carros con random forest

21

Evaluación de resultados del modelo de clasificación con random forest

Quiz: Proyecto práctico: random forest

Conclusión

22

Proyecto final y cierre

23

Comparte tu proyecto de Random Forest y obtén tu certificado

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Entrenamiento y evaluación de árbol de decisión con scikit-learn

4/23
Recursos

Aportes 8

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Para los que les lance este error

TypeError: barplot() takes from 0 to1 positional arguments but 2 positional arguments

Es porque están trabajando con una versión más reciente de seaborn, que la que se emplea en el curso.

Para resolver este error toca que crear un nuevo DataFrame con los importances y columns

importances = tree.feature_importances_
columns = X.columns
data = pd.DataFrame([importances], columns=columns)

sns.barplot(
    data, palette='bright', saturation=2.0, edgecolor='black', linewidth=2
)
plt.title('Importancia de cada Feature')
plt.show()

Así, de esta forma, ya podemos obtener nuestra gráfica sin ningún error

Que el acc en train no este tan alejado que el acc en test nos indica una buena performance.
Si el acc en train hubiese sido 95% vs el acc en test 76% diríamos que el modelo estaría con overfiting y tendríamos que cambiar sus parámetros

Optimización de parametros , construccióm y evaluación del modelo

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris

# Definir el clasificador y los valores de los hiperparámetros a probar
clf = DecisionTreeClassifier()
param_grid = {'criterion': ['gini', 'entropy'], 'max_depth': [2, 3, 4, 5]}

# Realizar la búsqueda de hiperparámetros utilizando GridSearchCV
grid_search = GridSearchCV(clf, param_grid=param_grid, cv=10)
grid_search.fit(X_train, y_train)

# Imprimir los resultados
print("Mejores hiperparámetros encontrados:")
print(grid_search.best_params_)
print("Mejor puntuación de validación cruzada:")
print(grid_search.best_score_)

# Modelo con parametros optimizados
best_clf = grid_search.best_estimator_

# Predecimos Y
y_train_pred = best_clf.predict(X_train)
y_test_pred = best_clf.predict(X_test)

# Importamos matriz de confusion
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test,y_pred)
# Graficamos matriz de confusion
from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay
cm = confusion_matrix(y_test,y_test_pred,labels=best_clf.classes_)
ConfusionMatrixDisplay(cm, display_labels=best_clf.classes_).plot()
# Calculo de las predicciones en Train y test
y_train_pred = best_clf.predict(X_train)
y_test_pred = best_clf.predict(X_test)
from sklearn.metrics import accuracy_score
print('El accuracy en train es:',accuracy_score(y_train,y_train_pred))
print('El accuracy en test es:', accuracy_score(y_test,y_test_pred))
# Verificamos el feature importances
importances = grid_search.best_estimator_.feature_importances_
importances = np.sort(importances)[::-1]
columns = X.columns

sns.barplot(x=columns, y=importances);
plt.title('Factores principales que influyen en la supervivencia del pasajero');

En lo personal me gustaria saber como funciona sklearn en su interior para hacer las predicciones.

Una mejor forma de hacer el barplot con matplotlib sería:

importances = np.sort(dt.feature_importances_)
columns = X.columns[np.argsort(importances)]

ax = plt.figure().gca()
ax.bar(x=columns, height=importances, edgecolor='k')
ax.invert_xaxis()
ax.set(title='Importancia de cada feature')
plt.show()

De esta manera se muestran las barras en orden descendente (primero se ordenan ascendentemente y se invierte el orden del eje x).

me parece curioso el uso de 00000 para el random_state, la documentación dice.

Integer values must be in the range [0, 2**32 - 1].

supongo que viene siendo simplemente un solo 0

https://scikit-learn.org/stable/glossary.html#term-random_state

A mi me funcionó este código para deslegar el gráfico: import seaborn as sns import matplotlib.pyplot as plt importances = tree.feature\_importances\_ columns = X.columns \# Crear un DataFrame con las columnas y sus importancias importance\_df = pd.DataFrame({'Feature': columns, 'Importance': importances}) \# Ordenar el DataFrame por importancia en orden descendente importance\_df = importance\_df.sort\_values(by='Importance', ascending=False) \# Crear el gráfico de barras horizontal plt.figure(figsize=(10, 6)) sns.barplot(x='Importance', y='Feature', data=importance\_df, palette='bright', saturation=2.0) plt.title('Importancia de cada feature') plt.xlabel('Importancia') plt.ylabel('Feature') plt.show()
Solo un pequeño comentario: Al analizar la importancia de cada caracteristica para inferir cuales son las variables necesarias para construir un modelo mas simple/eficaz estamos "tomando decisiones sobre el modelo" Esto tipicamente debería hacerse en una fase conocida como **validación**, en donde básicamente optimizamos a un nivel alto las configuraciones de nuestro modelo. En este caso pienso que es mejor llamar a `X_test `y a `y_test `como `X_val `y `y_val `(Haciendo referencia a que son datos que el modelo va usar para ser mejorado) Y que sirven para tomar decisiones. El conjunto de **testeo** solo debería ser usado para reportar resultados, ya que es pensado exclusivamente para estimar el bias del modelo.