Árboles de decisión - Regresión¶
Los árboles de decisión también son capaces de realizar tareas de regresión. La principal diferencia con clasificación es que, en lugar de predecir una clase en cada nodo, predice un valor. En lugar de tratar de dividir el conjunto de entrenamiento de una manera que minimice la impureza, ahora intenta dividir el conjunto de entrenamiento de una manera que minimice el MSE.
Este método trata de pronosticar cada región como el valor promedio de las observaciones en cada región. El algoritmo divide cad región de una manera que hace que la mayoría de las observaciones de entrenamiento se acercen lo más posible a ese valor predicho.
Observe cómo el valor pronosticado para cada región es siempre el valor objetivo promedio de las instancias en esa región. El algoritmo divide cada región de una manera que hace que la mayoría de las instancias de entrenamiento se acerquen lo más posible a ese valor predicho.
Al igual que para las tareas de clasificación, los árboles de decisión
tienden a sobreajustarse cuando se trata de tareas de regresión. Sin
ninguna regularización (es decir, usando los hiperparámetros
predeterminados), obtiene un modelo entrenado con sobreajuste. Para
solucionar este problema se podría cambiar el valor de
min_samples_leaf
.
Los árboles de decisión son simples de entender e interpretar, fáciles de usar, versátiles y poderosos, pero recuerde que este método crea límites de decisión ortogonales (todas las divisiones son perpendiculares a un eje), esto hace que el modelo sea inestable, lo que los hace sensibles a la rotación del conjunto de entrenamiento. En términos más generales, el principal problema de los árboles de decisión es que son muy sensibles a las pequeñas variaciones en los datos de entrenamiento.
Código:¶
En Python
se debe importar el módulo DecisionTreeRegressor
:
from sklearn.tree import DecisionTreeRegressor
Luego se crea un objeto regresor con la función
DecisionTreeRegressor()
, el cual lo llamaremos tree_reg
así:
tree_reg = DecisionTreeRegressor()
El ajuste del modelo se hace con la función .fit()
así:
tree_reg.fit(X,y)
Por último, se realiza la predicción con el modelo ajustado usando la
función .predict()
, los valores predichos los llamaremos y_pred
:
y_pred = tree_reg.predict(X)
Optimización de hiperparámetros:¶
Como ya se ha probalo, el método de árboles de decisión tiende al sobreajuste si no se cambiar los valores por defecto que trae el algoritmo. Para evitar el sobre ajuste podemos probar cambiando los siguientes hiperparámetros.
max_depth
: por defecto es None
. Es la profundidad máxima del
árbol. Si es Ninguno, los nodos se expanden hasta que todas las hojas
sean puras o hasta que todas las hojas contengan menos de
min_samples_split samples.
min_samples_leaf
: por defecto es 1. Es el número mínimo de muestras
requeridas para estar en un nodo hoja. Un punto de división a cualquier
profundidad solo se considerará si deja al menos min_samples_leaf
muestras de entrenamiento en cada una de las ramas izquierda y derecha.
Esto puede tener el efecto de suavizar el modelo, especialmente en
regresión.
Evaluación del desempeño:¶
Las métricas más usadas para evaluar el desempeño de una regresión son el \(R^2\), MSE y RMSE. Recuerde que RMSE es la raíz cuadrada de MSE, así que con una de estas dos últimas métricas es suficiente, lo más común es utilizar el MSE.
Se deben importar los módulos: r2_score
y mean_squared_error
así:
from sklearn.metrics import r2_score, mean_squared_error
La aplicación de estas dos métricas de desempeño se hace ingresando la variable \(y\) real y la \(y\) pronosticada:
r2_score(y, y_pred)
mean_squared_error(y, y_pred)