Saltar al contenido

Árboles de regresión no lineal con scikit-learn

Los Árboles de Decisión, también conocidos como Árboles de Clasificación y Regresión (CART), funcionan para variables de entrada y salida tanto categóricas como continuas. Funciona dividiendo los datos en dos o más conjuntos homogéneos basados en el divisor más significativo entre las variables independientes. El mejor diferenciador es el que minimiza la métrica del costo. La métrica de costo para un árbol de clasificación suele ser la entropía o el índice de gini, mientras que, para un árbol de regresión, la métrica por defecto es el error cuadrático medio.

El flujo de trabajo básico de los Árboles de Decisión es el siguiente:

Árboles de regresión no lineal con scikit-learn
Árboles de regresión no lineal con scikit-learn

El proceso de modelación comienza en el Nodo Raíz , que representa la totalidad de los datos. Éste se divide en dos o más subnodos, también llamados de división . Este proceso de división continúa hasta que se cumple el criterio de división, y el subnodo en el que se produce la división se denomina nodo de decisión . Una vez que se cumple el criterio de división, los nodos ya no se dividen más; dichos nodos se denominan nodo de hoja o nodo terminal . También podemos eliminar subnodos mediante el proceso llamado Poda .

Ahora crearemos un modelo de regresión CART usando la clase DecisionTreeRegressor. El primer paso es instanciar el algoritmo que se hace en la primera línea de código a continuación. La segunda línea se ajusta al modelo del conjunto de entrenamiento. Los argumentos utilizados son max_depth , que indica la máxima profundidad del árbol, y min_samples_leaf , que indica el mínimo número de muestras que se requiere para estar en un nodo de la hoja.

123dtree = DecisionTreeRegressor(max_depth=8, min_samples_leaf=0.13, random_state=3)dtree.fit(X_train, y_train)

pitón

Salida:

12345DecisionTreeRegressor(criterion=$0027mse$0027, max_depth=8, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0. 0, min_impurity_split=Ninguna, min_samples_leaf=0.13, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=Falso, random_state=3, splitter=$0027best$0027)

Una vez que el modelo se construye sobre el conjunto de entrenamiento, podemos hacer las predicciones. La primera línea de código de abajo predice sobre el conjunto de entrenamiento. La segunda y tercera línea de código imprime las métricas de evaluación – RMSE y R-cuadrado – en el set de entrenamiento. Los mismos pasos se repiten en el conjunto de datos de la prueba en las líneas cuarta a sexta .

123456789# Líneas de código 1 a 3pred_train_tree= dtree.predict(X_train)print(np.sqrt(mean_squared_error(y_train,pred_train_tree)))print(r2_score(y_train, pred_train_tree))# Líneas de código 4 a 6pred_test_tree= dtree. predict(X_test)print(np.sqrt(mean_squared_error(y_test,pred_test_tree)))print(r2_score(y_test, pred_test_tree))

pitón

Salida:

12341176.40382831706030.8070821556384761180.3762219466230.7849943413269588

El resultado anterior muestra que la RMSE es de 1.176.404 para los datos del tren y 1.180.376 para los datos de prueba. Por otro lado, el valor R-cuadrado es de 80,7 por ciento para los datos del tren y 78,5 por ciento para los datos de prueba. Estos son números decentes, pero se puede mejorar más mediante el ajuste de los parámetros. Cambiaremos los valores del parámetro, $0027max_depth$0027, para ver cómo afecta al rendimiento del modelo.

Las primeras cuatro líneas de código a continuación instancian y ajustan los árboles de regresión con el parámetro $0027max_depth$0027 de 2 y 5, respectivamente. Las quinta y sexta líneas de código generan predicciones sobre los datos de entrenamiento, mientras que las séptima y octava líneas de código dan predicciones sobre los datos de prueba.

12345678910111213# Líneas de código 1 a 4: Ajustar el árbol de regresión $0027dtree1$0027 y $0027dtree2$0027 dtree1 = DecisionTreeRegressor(max_depth=2)dtree2 = DecisionTreeRegressor(max_depth=5)dtree1.fit(X_train, y_train)dtree2. fit(X_train, y_train)# Líneas de código 5 a 6: Predicciones sobre el entrenamiento datatr1 = dtree1.predict(X_train)tr2 = dtree2.predict(X_train)#Líneas de código 7 a 8: Predicciones sobre el entrenamiento datay1 = dtree1.predict(X_test)y2 = dtree2.predict(X_test)

pitón

El siguiente código genera las métricas de evaluación – RMSE y R-cuadrado – para el primer árbol de regresión, «dtree1».

1234567# Imprime el valor RMSE y R-cuadrado para el árbol de regresión $0027dtree1$0027 en la impresión de datos de entrenamiento(np. sqrt(mean_squared_error(y_train,tr1)))print(r2_score(y_train,tr1))# Imprime el valor RMSE y R-cuadrado para el árbol de regresión $0027dtree1$0027 en la impresión de datos de entrenamiento(np.sqrt(mean_squared_error(y_test,y1)))print(r2_score(y_test, y1))

pitón

Salida:

12341184.48618691751040.80442220600594631339.48700363554670.7231235652677634

La salida anterior para el modelo «dtree1» muestra que el RMSE es de 1.184.486 para los datos del tren y 1.339.487 para los datos de prueba. El valor R-cuadrado es 80,4 por ciento para el tren y 72,3 por ciento para los datos de prueba. Este modelo tiene un rendimiento inferior al del modelo anterior en ambas métricas de evaluación.

Ahora examinaremos el rendimiento del modelo de árbol de decisión, «dtree2», ejecutando las siguientes líneas de código.

1234567# Imprime el valor RMSE y R-cuadrado para el árbol de regresión $0027dtree2$0027 en la impresión de datos de entrenamiento(np. sqrt(mean_squared_error(y_train,tr2)))print(r2_score(y_train,tr2))# Imprimir el valor RMSE y R-cuadrado para el árbol de regresión $0027dtree2$0027 en la impresión de datos de entrenamiento(np.sqrt(mean_squared_error(y_test,y2)))print(r2_score(y_test, y2))

pitón

Salida:

1234562.52859295024690.9558888127723508686.48184449972420.9272777851696767

El resultado anterior muestra una mejora significativa con respecto a los modelos anteriores. El tren y el equipo de pruebas RMSE se reducen a 562.529 y 686.482, respectivamente. Por otro lado, el valor R-cuadrado del tren y del equipo de pruebas aumenta a 95,6 por ciento y 92,7 por ciento, respectivamente. Esto demuestra que el modelo de árbol de regresión con el parámetro $0027max_depth$0027 de 5 se está desempeñando mejor, demostrando cómo el ajuste de los parámetros puede mejorar el rendimiento del modelo.