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 de modelo de clasificación con árbol de decisión

10/23
Recursos

Aportes 8

Preguntas 6

Ordenar por:

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

Usar el OrdinalEncoder de Scikit-learn para no instalar nada mas

Luego ese X se pasa en el train_test_split, tambien se podría haber hecho con el X_train y el X_test por separado pero toma mas tiempo XD

['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety']

En general, para evitar escribir las columnas y pasarlas manualmente se puede escribir el código

X_train.columns

La salida de eso será la siguiente:

Index(['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety'], dtype='object')

De ahí, se copia el primer parámetro que aparece en el output.

Esto puede funcionar para evitar escribir los atributos cada vez que se hace el procedimiento sobre un dataset que pueda tener muchos más atributos.

si les presenta error para visualizar la gráfica se arregla con el siguiente codigo:
sns.barplot(y=importances, x=columns, palette = ‘bright’, saturation = 2.0, edgecolor =‘black’, linewidth = 2)

espero les sirva.

Me estoy imaginando como extrapolar este árbol a otras industrias y otros problemas a resolver. Me encanta.
Thanks! Here's your corrected message first: > *First, encode all variables and apply the scaler — correct?* > *How should I pick the depth of my decision tree based on the quantity of training data? Are there other factors I should take into account to decide this hyperparameter?* ### ✅ Confidence: High You're asking two important things related to **preprocessing** and **model tuning**. Let's break it down: ### 1. **First encoding and scaling — is that correct?** ✅ **Yes**, but with **a nuance depending on the model**: * For **Decision Trees** (and Random Forests, etc.): * **Encoding categorical variables is required**. * **Scaling is not necessary** — these models are **scale-invariant**. * For **linear models**, **KNN**, **SVM**, and most **neural networks**: * Encoding is required. * **Scaling is also required**, especially with distance-based or gradient-based models. ### 2. **How to pick the depth of your Decision Tree based on training data size?** There's no fixed rule, but here’s how to approach it: #### ✅ **Basic heuristics (data-dependent):** * A **deeper tree** can model more complex patterns, but also increases risk of **overfitting**, especially with **small datasets**. * A **shallow tree** might underfit if your data has many features or complex structure. #### 🧠 **Rule of thumb:** * Start with:max\_depth ≈ log2(n\_samples) Example: 1000 training samples → log2(1000) ≈ 10 #### 📊 **Better approach: Cross-validation tuning** Use `GridSearchCV` or `RandomizedSearchCV` from `sklearn` to **find the best depth** by validating performance across folds: from sklearn.model\_selection import GridSearchCV from sklearn.tree import DecisionTreeClassifier params = {'max\_depth': list(range(2, 20))} grid = GridSearchCV(DecisionTreeClassifier(), params, cv=5) grid.fit(X\_train, y\_train) print("Best max\_depth:", grid.best\_params\_\['max\_depth']) ### 3. **Other factors to consider when choosing** `max_depth`**:** * **Number of features**: More features might justify deeper trees. * **Noise in the data**: Noisy datasets benefit from shallower trees to generalize better. * **Imbalanced classes**: Deep trees can overfit to dominant classes. * **Model interpretation**: Shallower trees are easier to interpret (good for explainability). Let me know if you're doing this for classification or regression — I can tailor the guidance more specifically.

El código de la clase:
#Importante: todos nuestros tipos de datos son object, realizamos una transformacion
!pip install category-encoders
import category_encoders as ce
**

cols = ['buying', 'maint', 'doors', 'persons','lug_bot', 'safety']
encoder = ce.OrdinalEncoder(cols = ['buying', 'maint', 'doors', 'persons','lug_bot', 'safety'])

X_train = encoder.fit_transform(X_train)

X_test = encoder.transform(X_test)

**

#Verificamos la transformacion
X_train.head ()

**

#Importar árbol de decisión
from sklearn.tree import DecisionTreeClassifier
#Creacion del modelo
tree = DecisionTreeClassifier(max_depth=2 , random_state= 0)

**

#Entrenamiento
tree.fit(X_train, Y_train) 

**

#Calculo de las predicciones en Train y Test
Y_train_pred_tree = tree.predict(X_train)
Y_test_pred_tree = tree.predict(X_test)

**

Hola, espero puedan ayudarme. Entiendo la parte de .fit\_transform y .transform en los datos de entrenamiento, que para este ejemplo, es X\_train, X\_test. Aquí es donde me estoy perdiendo. Porque no se hace un .transform, a 'y\_test' y 'y\_train' ? Es decir porque usamos un tipo de dato 'Object', con un 'tipo numero' ? O donde se hace ese transform al tipo de clase de carro?