0% encontró este documento útil (0 votos)
123 vistas

Random Forest Python

Este documento proporciona una introducción a los modelos de Random Forest. Explica que estos modelos consisten en un conjunto de árboles de decisión entrenados con muestras aleatorias de los datos. Cada árbol hace una predicción y la predicción final se obtiene agregando las predicciones individuales. También resume algunas ventajas clave como la capacidad de seleccionar predictores automáticamente y su buen rendimiento en problemas de regresión y clasificación.

Cargado por

Ine Gi
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
123 vistas

Random Forest Python

Este documento proporciona una introducción a los modelos de Random Forest. Explica que estos modelos consisten en un conjunto de árboles de decisión entrenados con muestras aleatorias de los datos. Cada árbol hace una predicción y la predicción final se obtiene agregando las predicciones individuales. También resume algunas ventajas clave como la capacidad de seleccionar predictores automáticamente y su buen rendimiento en problemas de regresión y clasificación.

Cargado por

Ine Gi
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 72

3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Introducción
 Random Forest
Métodos de ensem
Bagging

Random Forest con


Entrenamiento de R
Predicción de Rand
Out-of-Bag Error
Importancia de los
 Ejemplo regresión
Librerías
Python
Datos
Ajuste del modelo
Joaquín Amat Rodrigo
Predicción y evalua
Octubre, 2020
 Optimización de hi
Número de árbo
Max features
 Grid search Más sobre ciencia de datos: cienciadedatos.net
Grid Search bas (https://cienciadedatos.net)
Grid Search bas
 Importancia de pre Árboles de decisión con Python: regresión y clasificación
Importancia por (https://www.cienciadedatos.net/documentos/py07_arboles_decision_python.html)
Importancia por Gradient Boosting con Python
 Ejemplo clasificación (https://www.cienciadedatos.net/documentos/py09_gradient_boosting_python.html)
Librerías Machine learning con Python y Scikit-learn
Datos (https://www.cienciadedatos.net/documentos/py06_machine_learning_python_scikitle
 Ajuste del modelo y
Machine learning con H2O y Python
Grid Search bas
(https://www.cienciadedatos.net/documentos/py04_machine_learning_con_h2o_y_py
Grid Search bas
Grid search de modelos Random Forest con out-of-bag error y early stopping
Predicción y evalua
(https://www.cienciadedatos.net/documentos/py36-grid-search-random-forest-out-
Predicción de prob
 Importancia de pre of-bag-error-early-stopping.html)
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (en… 1/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 
 Introducción
Introducción
 Random Forest
Métodos de ensem
Bagging Un modelo Random Forest está formado por un conjunto de árboles de
Entrenamiento de R
Predicción de Rand decisión
Out-of-Bag Error (https://www.cienciadedatos.net/documentos/py07_arboles_decision_python.
Importancia de los individuales, cada uno entrenado con una muestra ligeramente distinta de
 Ejemplo regresión
Librerías
los datos de entrenamiento generada mediante bootstrapping
Datos (https://en.wikipedia.org/wiki/Bootstrapping_(statistics)). La predicción de
Ajuste del modelo una nueva observación se obtiene agregando las predicciones de todos los
Predicción y evalua
árboles individuales que forman el modelo.
 Optimización de hi
Número de árbo
Max features Muchos métodos predictivos generan modelos globales en los que una
 Grid search única ecuación se aplica a todo el espacio muestral. Cuando el caso de
Grid Search bas uso implica múltiples predictores, que interaccionan entre ellos de forma
Grid Search bas
compleja y no lineal, es muy difícil encontrar un único modelo global que
 Importancia de pre
Importancia por sea capaz de reflejar la relación entre las variables. Los métodos
Importancia por estadísticos y de machine learning basados en árboles engloban a un
 Ejemplo clasificación
conjunto de técnicas supervisadas no paramétricas que consiguen
Librerías
Datos segmentar el espacio de los predictores en regiones simples, dentro de las
 Ajuste del modelo y cuales es más sencillo manejar las interacciones. Es esta característica la
Grid Search bas que les proporciona gran parte de su potencial.
Grid Search bas
Predicción y evalua
Los métodos basados en árboles se han convertido en uno de los
Predicción de prob
 Importancia de pre referentes dentro del ámbito predictivo debido a los buenos resultados que
Importancia por generan en problemas muy diversos. A lo largo de este documento se
Importancia por
explora la forma en que se construyen y predicen los modelos Random
Extrapolación con mo
Variables dummy (on Forest. Dado que el elemento fundamental de un modelo Random Forest
Extremely randomize son los árboles de decisión
Comparación Random (https://www.cienciadedatos.net/documentos/py07_arboles_decision_python.
Bibliografía
es fundamental entender cómo funcionan estos últimos.

Ventajas

Son capaces de seleccionar predictores de forma automática.

Pueden aplicarse a problemas de regresión y clasificación.

Los árboles pueden, en teoría, manejar tanto predictores numéricos


como categóricos sin tener que crear variables dummy o one-hot-
encoding. En la práctica, esto depende de la implementación del
algoritmo que tenga cada librería.
https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (en… 2/72
3/31/23, 10:39 AM Random Forest python

Al tratarse de métodos no paramétricos, no es necesario que se


Tabla de
cumpla ningún tipo de distribución específica.
contenidos 
 Por lo general, requieren mucha menos limpieza y pre procesado de
Introducción
los datos en comparación a otros métodos de aprendizaje estadístico
 Random Forest
Métodos de ensem (por ejemplo, no requieren estandarización).
Bagging
Entrenamiento de R No se ven muy influenciados por outliers.
Predicción de Rand
Out-of-Bag Error
Si para alguna observación, el valor de un predictor no está disponible,
Importancia de los a pesar de no poder llegar a ningún nodo terminal, se puede conseguir
 Ejemplo regresión una predicción empleando todas las observaciones que pertenecen al
Librerías
último nodo alcanzado. La precisión de la predicción se verá reducida
Datos
Ajuste del modelo pero al menos podrá obtenerse.
Predicción y evalua
 Optimización de hi Son muy útiles en la exploración de datos, permiten identificar de forma
Número de árbo rápida y eficiente las variables (predictores) más importantes.
Max features
 Grid search Gracias al Out-of-Bag Error puede estimarse su error de validación sin
Grid Search bas necesidad de recurrir a estrategias computacionalmente costosas
Grid Search bas
como la validación cruzada. Esto no aplica en el caso de series
 Importancia de pre
Importancia por temporales.
Importancia por
 Ejemplo clasificación Tienen buena escalabilidad, pueden aplicarse a conjuntos de datos con
Librerías un elevado número de observaciones.
Datos
 Ajuste del modelo y Desventajas
Grid Search bas
Grid Search bas Al combinar múltiples árboles, se pierde la interpretabilidad que tienen
Predicción y evalua
Predicción de prob
los modelos basados en un único árbol.
 Importancia de pre
Cuando tratan con predictores continuos, pierden parte de su
Importancia por
Importancia por información al categorizarlas en el momento de la división de los
Extrapolación con mo nodos.
Variables dummy (on
Extremely randomize Tal y como se describe más adelante, la creación de las ramificaciones
Comparación Random de los árboles se consigue mediante el algoritmo de recursive binary
Bibliografía
splitting. Este algoritmo identifica y evalúa las posibles divisiones de
cada predictor acorde a una determinada medida (RSS, Gini,
entropía…). Los predictores continuos o predictores cualitativos con
muchos niveles tienen mayor probabilidad de contener, solo por azar,
algún punto de corte óptimo, por lo que suelen verse favorecidos en la
creación de los árboles.

No son capaces de extrapolar fuera del rango de los predictores


observado en los datos de entrenamiento.

Arboles de decisión y Random Forest en Python


https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (en… 3/72
3/31/23, 10:39 AM Random Forest python

Existen tres implementaciones principales de árboles de decisión y


Tabla de
Random Forest en Python: scikit-learn
contenidos 
(https://www.cienciadedatos.net/documentos/py06_machine_learning_python

Introducción skranger (https://skranger.readthedocs.io/en/stable/) y H2O
 Random Forest (https://www.cienciadedatos.net/documentos/py04_machine_learning_con_h2
Métodos de ensem
Aunque todas están muy optimizadas y se utilizan de forma similar, tienen
Bagging
Entrenamiento de R una diferencia en su implementación que puede generar resultados
Predicción de Rand distintos. En scikit-learn es necesario hacer one-hot-encoding de los
Out-of-Bag Error predictores categóricos, mientras que en H2O no. Esto tiene impacto
Importancia de los
 Ejemplo regresión
directo en la estructura de los árboles generados y, en consecuencia, en
Librerías los resultados predictivos del modelo y en la importancia calculada para los
Datos predictores (ver detalles más adelante).
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (en… 4/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 
 Random Forest
Introducción
 Random Forest
Métodos de ensem
Bagging Un modelo Random Forest está formado por un conjunto (ensemble) de
Entrenamiento de R
Predicción de Rand árboles de decisión individuales, cada uno entrenado con una muestra
Out-of-Bag Error aleatoria extraída de los datos de entrenamiento originales mediante
Importancia de los bootstrapping (https://en.wikipedia.org/wiki/Bootstrapping_(statistics)). Esto
 Ejemplo regresión
Librerías
implica que cada árbol se entrena con unos datos ligeramente distintos. En
Datos cada árbol individual, las observaciones se van distribuyendo por
Ajuste del modelo bifurcaciones (nodos) generando la estructura del árbol hasta alcanzar un
Predicción y evalua
nodo terminal. La predicción de una nueva observación se obtiene
 Optimización de hi
Número de árbo agregando las predicciones de todos los árboles individuales que forman el
Max features modelo.
 Grid search
Grid Search bas Para entender cómo funcionan los modelos Random Forest es necesario
Grid Search bas
conocer primero los conceptos de ensemble y bagging.
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
Métodos de ensemble
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Todos los modelos de aprendizaje estadístico y machine learning sufren el
Predicción de prob problema de equilibrio entre bias y varianza.
 Importancia de pre
Importancia por El término bias (sesgo) hace referencia a cuánto se alejan en promedio las
Importancia por
predicciones de un modelo respecto a los valores reales. Refleja cómo de
Extrapolación con mo
Variables dummy (on capaz es el modelo de aprender la relación real que existe entre los
Extremely randomize predictores y la variable respuesta. Por ejemplo, si la relación sigue un
Comparación Random patrón no lineal, por muchos datos de los que se disponga, un modelo de
Bibliografía
regresión lineal no podrá modelar correctamente la relación, por lo que
tendrá un bias alto.

El término varianza hace referencia a cuánto cambia el modelo


dependiendo de los datos utilizados en su entrenamiento. Idealmente, un
modelo no debería modificarse demasiado por pequeñas variaciones en
los datos de entrenamiento, si esto ocurre, es porque el modelo está
memorizando los datos en lugar de aprender la verdadera relación entre
los predictores y la variable respuesta. Por ejemplo, un modelo de árbol
con muchos nodos, suele variar su estructura con que apenas cambien
unos pocos datos de entrenamiento, tiene mucha varianza.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (en… 5/72
3/31/23, 10:39 AM Random Forest python

A medida que aumenta la complejidad de un modelo, este dispone de


Tabla de
mayor flexibilidad para adaptarse a las observaciones, reduciendo así el
contenidos 
bias y mejorando su capacidad predictiva. Sin embargo, alcanzado un

Introducción determinado grado de flexibilidad, aparece el problema de overfitting
 Random Forest (https://en.wikipedia.org/wiki/Overfitting), el modelo se ajusta tanto a los
Métodos de ensem
datos de entrenamiento que es incapaz de predecir correctamente nuevas
Bagging
Entrenamiento de R observaciones. El mejor modelo es aquel que consigue un equilibro
Predicción de Rand óptimo entre bias y varianza.
Out-of-Bag Error
Importancia de los ¿Cómo se controlan el bias y varianza en los modelos basados en
 Ejemplo regresión
árboles? Por lo general, los árboles pequeños (pocas ramificaciones)
Librerías
Datos tienen poca varianza pero no consiguen representar bien la relación entre
Ajuste del modelo las variables, es decir, tienen bias alto. En contraposición, los árboles
Predicción y evalua
grandes se ajustan mucho a los datos de entrenamiento, por lo que tienen
 Optimización de hi
Número de árbo muy poco bias pero mucha varianza. Una forma de solucionar este
Max features problema son los métodos de ensemble.
 Grid search
Grid Search bas Los métodos de ensemble combinan múltiples modelos en uno nuevo con
Grid Search bas
el objetivo de lograr un equilibro entre bias y varianza, consiguiendo así
 Importancia de pre
Importancia por mejores predicciones que cualquiera de los modelos individuales
Importancia por originales. Dos de los tipos de ensemble más utilizados son:
 Ejemplo clasificación
Librerías Bagging: Se ajustan múltiples modelos, cada uno con un subconjunto
Datos
distinto de los datos de entrenamiento. Para predecir, todos los
 Ajuste del modelo y
Grid Search bas modelos que forman el agregado participan aportando su predicción.
Grid Search bas Como valor final, se toma la media de todas las predicciones (variables
Predicción y evalua continuas) o la clase más frecuente (variables categóricas). Los
Predicción de prob
 Importancia de pre
modelos Random Forest están dentro de esta categoría.
Importancia por
Boosting: Se ajustan secuencialmente múltiples modelos sencillos,
Importancia por
Extrapolación con mo llamados weak learners, de forma que cada modelo aprende de los
Variables dummy (on errores del anterior. Como valor final, al igual que en bagging, se toma
Extremely randomize
la media de todas las predicciones (variables continuas) o la clase más
Comparación Random
Bibliografía frecuente (variables cualitativas). Tres de los métodos de boosting más
empleados son AdaBoost, Gradient Boosting y Stochastic Gradient
Boosting.

Aunque el objetivo final es el mismo, lograr un balance óptimo entre bias y


varianza, existen dos diferencias importantes:

Forma en que consiguen reducir el error total. El error total de un


modelo puede descomponerse como bias + varianza + ϵ. En
bagging, se emplean modelos con muy poco bias pero mucha
varianza, agregándolos se consigue reducir la varianza sin apenas
inflar el bias. En boosting, se emplean modelos con muy poca varianza

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (en… 6/72
3/31/23, 10:39 AM Random Forest python

pero mucho bias, ajustando secuencialmente los modelos se reduce el


Tabla de
bias. Por lo tanto, cada una de las estrategias reduce una parte del
contenidos 
error total.

Introducción Forma en que se introducen variaciones en los modelos que forman el
 Random Forest ensemble. En bagging, cada modelo es distinto del resto porque cada
Métodos de ensem
uno se entrena con una muestra distinta obtenida mediante
Bagging
Entrenamiento de R bootstrapping (https://en.wikipedia.org/wiki/Bootstrapping_(statistics)).
Predicción de Rand En boosting, los modelos se ajustan secuencialmente y la importancia
Out-of-Bag Error (peso) de las observaciones va cambiando en cada iteración, dando
Importancia de los
 Ejemplo regresión
lugar a diferentes ajustes.
Librerías
Datos La clave para que los métodos de ensemble consigan mejores resultados
Ajuste del modelo que cualquiera de sus modelos individuales es que, los modelos que los
Predicción y evalua
forman, sean lo más diversos posibles (sus errores no estén
 Optimización de hi
Número de árbo correlacionados). Una analogía que refleja este concepto es la siguiente:
Max features supóngase un juego como el trivial en el que los equipos tienen que acertar
 Grid search preguntas sobre temáticas diversas. Un equipo formado por muchos
Grid Search bas
Grid Search bas
jugadores, cada uno experto en un tema distinto, tendrá más posibilidades
 Importancia de pre de ganar que un equipo formado por jugadores expertos en un único tema
Importancia por o por un único jugador que sepa un poco de todos los temas.
Importancia por
 Ejemplo clasificación
A continuación, se describe con más detalle la estrategia de bagging, sobre
Librerías
Datos la que se fundamenta el modelo Random Forest.
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
Bagging
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo El término bagging es el diminutivo de bootstrap aggregation, y hace
Variables dummy (on referencia al empleo del muestreo repetido con reposición bootstrapping
Extremely randomize (https://en.wikipedia.org/wiki/Bootstrapping_(statistics)) con el fin de reducir
Comparación Random
Bibliografía
la varianza de algunos modelos de aprendizaje estadístico, entre ellos los
basados en árboles.

Dadas n muestras de observaciones independientes Z1 , ..., Zn , cada una


¯
¯¯¯
con varianza σ
2
, la varianza de la media de las observaciones Z es 2
σ /n .
En otras palabras, promediando un conjunto de observaciones se reduce la
varianza. Basándose en esta idea, una forma de reducir la varianza y
aumentar la precisión de un método predictivo es obtener múltiples
muestras de la población, ajustar un modelo distinto con cada una de ellas,
y hacer la media (la moda en el caso de variables cualitativas) de las
predicciones resultantes. Como en la práctica no se suele tener acceso a
múltiples muestras, se puede simular el proceso recurriendo a
https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (en… 7/72
3/31/23, 10:39 AM Random Forest python

bootstrapping (https://en.wikipedia.org/wiki/Bootstrapping_(statistics)),
Tabla de
generando así pseudo-muestras con los que ajustar diferentes modelos y
contenidos 
después agregarlos. A este proceso se le conoce como bagging y es

Introducción aplicable a una gran variedad de métodos de regresión.
 Random Forest
Métodos de ensem En el caso particular de los árboles de decisión, dada su naturaleza de
Bagging bajo bias y alta varianza, bagging ha demostrado tener muy buenos
Entrenamiento de R
Predicción de Rand
resultados. La forma de aplicarlo es:
Out-of-Bag Error
Importancia de los
 Ejemplo regresión 1. Generar pseudo-training sets mediante bootstrapping a partir de la
B

Librerías muestra de entrenamiento original.


Datos
Ajuste del modelo 2. Entrenar un árbol con cada una de las muestras del paso 1. Cada
B
Predicción y evalua
árbol se crea sin apenas restricciones y no se somete a pruning, por lo
 Optimización de hi
Número de árbo que tiene varianza alta pero poco bias. En la mayoría de casos, la
Max features única regla de parada es el número mínimo de observaciones que
 Grid search deben tener los nodos terminales. El valor óptimo de este
Grid Search bas
Grid Search bas
hiperparámetro puede obtenerse comparando el out of bag error o por
 Importancia de pre validación cruzada.
Importancia por
Importancia por 3. Para cada nueva observación, obtener la predicción de cada uno de los
 Ejemplo clasificación B árboles. El valor final de la predicción se obtiene como la media de
Librerías
las B predicciones en el caso de variables cuantitativas y como la
Datos
 Ajuste del modelo y clase predicha más frecuente (moda) para variables cualitativas.
Grid Search bas
Grid Search bas
Predicción y evalua En el proceso de bagging, el número de árboles creados no es un
Predicción de prob hiperparámetro crítico en cuanto a que, por mucho que se incremente el
 Importancia de pre
Importancia por
número, no se aumenta el riesgo de overfitting. Alcanzado un determinado
Importancia por número de árboles, la reducción de test error se estabiliza. A pesar de ello,
Extrapolación con mo cada árbol ocupa memoria, por lo que no conviene almacenar más de los
Variables dummy (on
necesarios.
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (en… 8/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Entrenamiento de Random Forest
Introducción
 Random Forest
Métodos de ensem
Bagging El algoritmo de Random Forest es una modificación del proceso de
Entrenamiento de R bagging que consigue mejorar los resultados gracias a que decorrelaciona
Predicción de Rand aún más los árboles generados en el proceso.
Out-of-Bag Error
Importancia de los
Recordando el apartado anterior, los beneficios de bagging se basan en el
 Ejemplo regresión
Librerías hecho de que, promediando un conjunto de modelos, se consigue reducir
Datos la varianza. Esto es cierto siempre y cuando los modelos agregados no
Ajuste del modelo
estén correlacionados. Si la correlación es alta, la reducción de varianza
Predicción y evalua
 Optimización de hi que se puede lograr es pequeña.
Número de árbo
Max features Supóngase un set de datos en el que hay un predictor muy influyente, junto
 Grid search con otros moderadamente influyentes. En este escenario, todos o casi
Grid Search bas
todos los árboles creados en el proceso de bagging estarán dominados por
Grid Search bas
 Importancia de pre el mismo predictor y serán muy parecidos entre ellos. Como consecuencia
Importancia por de la alta correlación entre los árboles, el proceso de bagging apenas
Importancia por conseguirá disminuir la varianza y, por lo tanto, tampoco mejorar el modelo.
 Ejemplo clasificación
Librerías
Random forest evita este problema haciendo una selección aleatoria de m
Datos predictores antes de evaluar cada división. De esta forma, un promedio de
 Ajuste del modelo y (p − m)/p divisiones no contemplarán el predictor influyente, permitiendo
Grid Search bas
Grid Search bas
que otros predictores puedan ser seleccionados. Añadiendo este paso
Predicción y evalua extra se consigue decorrelacionar los árboles todavía más, con lo que su
Predicción de prob agregación consigue una mayor reducción de la varianza.
 Importancia de pre
Importancia por Los métodos de random forest y bagging siguen el mismo algoritmo con la
Importancia por
Extrapolación con mo
única diferencia de que, en random forest, antes de cada división, se
Variables dummy (on seleccionan aleatoriamente m predictores. La diferencia en el resultado
Extremely randomize dependerá del valor m escogido. Si m = p los resultados de random
Comparación Random
forest y bagging son equivalentes. Algunas recomendaciones son:
Bibliografía

La raíz cuadrada del número total de predictores para problemas de


clasificación. m ≈ √–
p

Un tercio del número de predictores para problemas de regresión.


p
m ≈
3

Si los predictores están muy correlacionados, valores pequeños de m

consiguen mejores resultados.

Sin embargo, la mejor forma para encontrar el valor óptimo de m es


evaluar el out-of-bag-error o recurrir a validación cruzada.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (en… 9/72
3/31/23, 10:39 AM Random Forest python

Al igual que ocurre con bagging, random forest no sufre problemas de


Tabla de
overfit por aumentar el número de árboles creados en el proceso.
contenidos 
Alcanzado un determinado número, la reducción del error de test se

Introducción estabiliza.
 Random Forest
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand
Predicción de Random Forest
Out-of-Bag Error
Importancia de los
 Ejemplo regresión
Librerías La predicción de un modelo Random Forest es la media de las
Datos predicciones de todos los árboles que lo forman.
Ajuste del modelo
Predicción y evalua Supóngase que se dispone de 10 observaciones, cada una con un valor de
 Optimización de hi
Número de árbo
variable respuesta Y y unos predictores X.
Max features
 Grid search id 1 2 3 4 5 6 7 8 9 10
Grid Search bas
Y 10 18 24 8 2 9 16 10 20 14
Grid Search bas
 Importancia de pre X ... ... ... ... ... ... ... ... ... ...
Importancia por
Importancia por
La siguiente imagen muestra cómo sería la predicción del modelo para una
 Ejemplo clasificación
Librerías nueva observación. En cada árbol, el camino hasta llegar al nodo final está
Datos resaltado. En cada nodo terminal se detalla el índice de las observaciones
 Ajuste del modelo y de entrenamiento que forman parte.
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random Predicción con random forest: en cada árbol, el camino hasta llegar al nodo final
Bibliografía
está resaltado. En cada nodo terminal se detalla el índice de las observaciones de
entrenamiento que forman parte de él.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 10/72
3/31/23, 10:39 AM Random Forest python

Tabla de
El valor predicho por cada árbol es la media de la variable respuesta Y en
contenidos 

el nodo terminal. Acorde a la imagen, las predicciones de cada uno de los
Introducción tres árboles (de izquierda a derecha) es:
 Random Forest
24 + 2 + 20
Métodos de ensem ^
y arbol
= = 15.33333
1
3
Bagging
18 + 24
Entrenamiento de R ^ arbo
y l
= = 21
2
2
Predicción de Rand
18 + 24 + 2 + 20
Out-of-Bag Error ^
y arbol
= = 16
3
4
Importancia de los
 Ejemplo regresión
La predicción final del modelo es la media de todas las predicciones
Librerías
Datos individuales:
Ajuste del modelo
15.33333 + 21 + 16
Predicción y evalua ^ =
μ = 17.4
3
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas Aunque la anterior es la forma más común de obtener las predicciones de
Grid Search bas un modelo Random Forest, existe otra aproximación. La predicción de un
 Importancia de pre árbol de regresión puede verse como una variante de vecinos cercanos en
Importancia por
Importancia por
la que, solo las observaciones que forman parte del mismo nodo terminal
 Ejemplo clasificación que la observación predicha, tienen influencia. Siguiendo esta
Librerías aproximación, la predicción del árbol se define como la media ponderada
Datos
de todas las observaciones de entrenamiento, donde el peso de cada
 Ajuste del modelo y
Grid Search bas observación depende únicamente de si forma parte o no del mismo nodo
Grid Search bas terminal. Para Random Forest esto equivale a la media ponderada de
Predicción y evalua
todas las observaciones, empleando como pesos w la media de los
Predicción de prob
 Importancia de pre vectores de pesos de todos los árboles.
Importancia por
Importancia por Acorde a la imagen anterior, el vector de pesos para cada uno de los tres
Extrapolación con mo árboles (de izquierda a derecha) es:
Variables dummy (on
Extremely randomize 1 1 1
warbol = (0, 0, , 0, , 0, 0, 0, , 0)
Comparación Random 1
3 3 3
1 1
Bibliografía warbol = (0, , , 0, 0, 0, 0, 0, 0, 0)
2
2 2
1 1 1 1
warbol = (0, , , 0, , 0, 0, 0, , 0)
3
4 4 4 4

La media de todos los vectores de pesos es:


1
¯¯¯
¯
w = (warbol + warbol + warbol ) =
1 2 3
3

1 13 7 7
(0, , , 0, , 0, 0, 0, , 0)
4 36 36 36

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 11/72
3/31/23, 10:39 AM Random Forest python

Una vez obtenido el vector de pesos promedio, se puede calcular la


Tabla de
predicción con la media ponderada de todas las observaciones de
contenidos 
entrenamiento:

Introducción n

 Random Forest ^ = ∑¯
μ w¯¯
¯
i
Yi

Métodos de ensem i=1

1 13 1
Bagging ^ = (0 × 10) + (
μ × 18) + ( × 24) + (0 × 8) + ( × 2) +
Entrenamiento de R 4 36 4

Predicción de Rand 1
(0 × 9) + (0 × 16) + (0 × 10) + ( × 20) + (0 × 14) = 17.4
Out-of-Bag Error 4
Importancia de los
 Ejemplo regresión
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 12/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Out-of-Bag Error
Introducción
 Random Forest
Métodos de ensem
Bagging Dada la naturaleza del proceso de bagging, resulta posible estimar el error
Entrenamiento de R de test sin necesidad de recurrir a métodos de validación cruzada (cross-
Predicción de Rand validation). El hecho de que los árboles se ajusten empleando muestras
Out-of-Bag Error
Importancia de los
generadas por bootstrapping conlleva que, en promedio, cada ajuste use
 Ejemplo regresión solo aproximadamente dos tercios de las observaciones originales. Al
Librerías tercio restante se le llama out-of-bag (OOB).
Datos
Ajuste del modelo
Si para cada árbol ajustado en el proceso de bagging se registran las
Predicción y evalua
 Optimización de hi observaciones empleadas, se puede predecir la respuesta de la
Número de árbo observación i haciendo uso de aquellos árboles en los que esa
Max features observación ha sido excluida y promediándolos (la moda en el caso de los
 Grid search
árboles de clasificación). Siguiendo este proceso, se pueden obtener las
Grid Search bas
Grid Search bas predicciones para las n observaciones y con ellas calcular el OOB-mean
 Importancia de pre square error (para regresión) o el OOB-classification error (para árboles de
Importancia por
clasificación). Como la variable respuesta de cada observación se predice
Importancia por
 Ejemplo clasificación empleando únicamente los árboles en cuyo ajuste no participó dicha
Librerías observación, el OOB-error sirve como estimación del error de test. De
Datos
hecho, si el número de árboles es suficientemente alto, el OOB-error es
 Ajuste del modelo y
Grid Search bas
prácticamente equivalente al leave-one-out cross-validation error.
Grid Search bas
Predicción y evalua Esta es una ventaja añadida de los métodos de bagging, y por lo tanto de
Predicción de prob Random Forest ya que evita tener que recurrir al proceso de validación
 Importancia de pre
cruzada (computacionalmente costoso) para la optimización de los
Importancia por
Importancia por hiperparámetros.
Extrapolación con mo
Variables dummy (on Dos limitaciones en el uso Out-of-Bag Error:
Extremely randomize
Comparación Random El Out-of-Bag Error no es adecuado cuando las observaciones tienen
Bibliografía una relación temporal (series temporales). Como la selección de las
observaciones que participan en cada entrenamiento es aleatoria, no
respetan el orden temporal y se estaría introduciendo información a
futuro.

El preprocesado de los datos de entrenamiento se hace de forma


conjunta, por lo que las observaciones out-of-bag pueden sufrir data
leakage (https://en.wikipedia.org/wiki/Leakage_(machine_learning)). De
ser así, las estimaciones del OOB-error son demasiado optimistas.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 13/72
3/31/23, 10:39 AM Random Forest python

En un muestreo por bootstrapping, si el tamaño de los datos de


Tabla de
entrenamiento es n , cada observación tiene una probabilidad de ser
contenidos 
elegida de n1 . Por lo tanto, la probabilidad de no ser elegida en todo el

Introducción proceso es de (1 − 1/n) n , lo que converge en 1/ϵ , que es
 Random Forest aproximadamente un tercio.
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand
Out-of-Bag Error Importancia de los predictores
Importancia de los
 Ejemplo regresión
Librerías
Datos Si bien es cierto que el proceso de bagging (Random Forest) consigue
Ajuste del modelo
Predicción y evalua
mejorar la capacidad predictiva en comparación a los modelos basados en
 Optimización de hi un único árbol, esto tiene un coste asociado, la interpretabilidad del modelo
Número de árbo se reduce. Al tratarse de una combinación de múltiples árboles, no es
Max features
posible obtener una representación gráfica sencilla del modelo y no es
 Grid search
Grid Search bas inmediato identificar de forma visual que predictores son más importantes.
Grid Search bas Sin embargo, se han desarrollado nuevas estrategias para cuantificar la
 Importancia de pre
importancia de los predictores que hacen de los modelos de bagging
Importancia por
Importancia por (Random Forest) una herramienta muy potente, no solo para predecir, sino
 Ejemplo clasificación también para el análisis exploratorio. Dos de estas medidas son:
Librerías importancia por permutación e impureza de nodos.
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas Importancia por permutación
Predicción y evalua
Predicción de prob Identifica la influencia que tiene cada predictor sobre una determinada
 Importancia de pre métrica de evaluación del modelo (estimada por out-of-bag error o
Importancia por
validación cruzada). El valor asociado con cada predictor se obtiene de la
Importancia por
Extrapolación con mo siguiente forma:
Variables dummy (on
Extremely randomize
Comparación Random 1. Crear el conjunto de árboles que forman el modelo.
Bibliografía
2. Calcular una determinada métrica de error (mse, classification error,
...). Este es el valor de referencia (error0 ).

3. Para cada predictor j:

Permutar en todos los árboles del modelo los valores del predictor
j manteniendo el resto constante.

Recalcular la métrica tras la permutación, llámese (errorj ).

Calcular el incremento en la métrica debido a la permutación del


predictor j.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 14/72
3/31/23, 10:39 AM Random Forest python

%Incremento j = (error − j − error 0 )/error 0 ∗ 100


Tabla de
contenidos 
 Si el predictor permutado estaba contribuyendo al modelo, es de esperar
Introducción que el modelo aumente su error, ya que se pierde la información que
 Random Forest
Métodos de ensem
proporcionaba esa variable. El porcentaje en que se incrementa el error
Bagging debido a la permutación del predictor j puede interpretarse como la
Entrenamiento de R influencia que tiene j sobre el modelo. Algo que suele llevar a confusiones
Predicción de Rand
Out-of-Bag Error
es el hecho de que este incremento puede resultar negativo. Si la variable
Importancia de los no contribuye al modelo, es posible que, al reorganizarla aleatoriamente,
 Ejemplo regresión solo por azar, se consiga mejorar ligeramente el modelo, por lo que
Librerías
(error j − error 0 ) es negativo. A modo general, se puede considerar que
Datos
Ajuste del modelo estas variables tiene una importancia próxima a cero.
Predicción y evalua
 Optimización de hi Aunque esta estrategia suele ser la más recomendado, cabe tomar
Número de árbo algunas precauciones en su interpretación. Lo que cuantifican es la
Max features
 Grid search
influencia que tienen los predictores sobre el modelo, no su relación con la
Grid Search bas variable respuesta. ¿Por qué es esto tan importante? Supóngase un
Grid Search bas escenario en el que se emplea esta estrategia con la finalidad de identificar
 Importancia de pre
qué predictores están relacionados con el peso de una persona, y que dos
Importancia por
Importancia por de los predictores son: el índice de masa corporal (IMC) y la altura. Como
 Ejemplo clasificación IMC y altura están muy correlacionados entre sí (la información que
Librerías aportan es redundante), cuando se permute uno de ellos, el impacto en el
Datos
 Ajuste del modelo y modelo será mínimo, ya que el otro aporta la misma información. Como
Grid Search bas resultado, estos predictores aparecerán como poco influyentes aun cuando
Grid Search bas realmente están muy relacionados con la variable respuesta. Una forma de
Predicción y evalua
Predicción de prob
evitar problemas de este tipo es, siempre que se excluyan predictores de
 Importancia de pre un modelo, comprobar el impacto que tiene en su capacidad predictiva.
Importancia por
Importancia por
Extrapolación con mo Incremento de la pureza de nodos
Variables dummy (on
Extremely randomize
Cuantifica el incremento total en la pureza de los nodos debido a divisiones
Comparación Random
Bibliografía en las que participa el predictor (promedio de todos los árboles). La forma
de calcularlo es la siguiente: en cada división de los árboles, se registra el
descenso conseguido en la medida empleada como criterio de división
(índice Gini, mse entropía, ...). Para cada uno de los predictores, se calcula
el descenso medio conseguido en el conjunto de árboles que forman el
ensemble. Cuanto mayor sea este valor medio, mayor la contribución del
predictor en el modelo.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 15/72
3/31/23, 10:39 AM Random Forest python

"
Tabla de
contenidos 

Introducción
 Random Forest
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand
Out-of-Bag Error
Importancia de los
 Ejemplo regresión
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas
Grid Search bas
Ejemplo regresión
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas Las librerías utilizadas en este ejemplo son:
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 16/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [67]: # Tratamiento de datos


# ========================================================
contenidos  ======================
 import numpy as np
Introducción import pandas as pd
 Random Forest
Métodos de ensem # Gráficos
Bagging # ========================================================
Entrenamiento de R ======================
import matplotlib.pyplot as plt
Predicción de Rand
Out-of-Bag Error
# Preprocesado y modelado
Importancia de los # ========================================================
 Ejemplo regresión ======================
Librerías from sklearn.datasets import load_boston
Datos from sklearn.ensemble import RandomForestRegressor
Ajuste del modelo from sklearn.metrics import mean_squared_error
Predicción y evalua from sklearn.model_selection import cross_val_score
 Optimización de hi from sklearn.model_selection import train_test_split
Número de árbo from sklearn.model_selection import RepeatedKFold
Max features from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import ParameterGrid
 Grid search
from sklearn.inspection import permutation_importance
Grid Search bas
import multiprocessing
Grid Search bas
 Importancia de pre # Configuración warnings
Importancia por # ========================================================
Importancia por ======================
 Ejemplo clasificación import warnings
Librerías warnings.filterwarnings('once')
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 17/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Datos
Introducción
 Random Forest
Métodos de ensem
Bagging El set de datos Boston disponible en la librería scikitlearn contiene
Entrenamiento de R precios de viviendas de la ciudad de Boston, así como información socio-
Predicción de Rand económica del barrio en el que se encuentran. Se pretende ajustar un
Out-of-Bag Error
Importancia de los
modelo de regresión que permita predecir el precio medio de una vivienda
 Ejemplo regresión ( MEDV ) en función de las variables disponibles.
Librerías
Datos Number of Instances: 506
Ajuste del modelo
Predicción y evalua Number of Attributes: 13 numeric/categorical predictive. Median Value
 Optimización de hi
Número de árbo
(attribute 14) is usually the target.
Max features
 Grid search Attribute Information (in order):
Grid Search bas
Grid Search bas
CRIM: per capita crime rate by town
 Importancia de pre ZN: proportion of residential land zoned for lots over 25,000 sq.ft.
Importancia por INDUS: proportion of non-retail business acres per town
Importancia por CHAS: Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
 Ejemplo clasificación NOX: nitric oxides concentration (parts per 10 million)
Librerías RM: average number of rooms per dwelling
Datos AGE: proportion of owner-occupied units built prior to 1940
 Ajuste del modelo y DIS: weighted distances to five Boston employment centres
Grid Search bas RAD: index of accessibility to radial highways
Grid Search bas TAX: full-value property-tax rate per $ 10,000
Predicción y evalua
PTRATIO: pupil-teacher ratio by town
Predicción de prob
B: 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
 Importancia de pre
LSTAT: % lower status of the population
Importancia por
Importancia por
MEDV: Median value of owner-occupied homes in $ 1000's
Extrapolación con mo
Variables dummy (on Missing Attribute Values: None
Extremely randomize
Comparación Random Creator: Harrison, D. and Rubinfeld, D.L.
Bibliografía
This is a copy of UCI ML housing dataset.
https://archive.ics.uci.edu/ml/machine-learning-databases/housing/
(https://archive.ics.uci.edu/ml/machine-learning-databases/housing/)

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 18/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [68]: # Se unen todos los datos (predictores y variable respuest


a en un único dataframe)
contenidos  boston = load_boston(return_X_y=False)
 datos = np.column_stack((boston.data, boston.target))
Introducción datos = pd.DataFrame(datos,columns = np.append(boston.feat
 Random Forest ure_names, "MEDV"))
Métodos de ensem datos.head(3)
Bagging
Out[68]:
Entrenamiento de R CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTR
Predicción de Rand
Out-of-Bag Error 0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0

Importancia de los 1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0
 Ejemplo regresión
2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0
Librerías
Datos
Ajuste del modelo
Predicción y evalua In [69]: datos.info()
 Optimización de hi
<class 'pandas.core.frame.DataFrame'>
Número de árbo
RangeIndex: 506 entries, 0 to 505
Max features
Data columns (total 14 columns):
 Grid search # Column Non-Null Count Dtype
Grid Search bas --- ------ -------------- -----
Grid Search bas 0 CRIM 506 non-null float64
 Importancia de pre 1 ZN 506 non-null float64
Importancia por 2 INDUS 506 non-null float64
Importancia por 3 CHAS 506 non-null float64
 Ejemplo clasificación 4 NOX 506 non-null float64
Librerías 5 RM 506 non-null float64
Datos
6 AGE 506 non-null float64
7 DIS 506 non-null float64
 Ajuste del modelo y
8 RAD 506 non-null float64
Grid Search bas 9 TAX 506 non-null float64
Grid Search bas 10 PTRATIO 506 non-null float64
Predicción y evalua 11 B 506 non-null float64
Predicción de prob 12 LSTAT 506 non-null float64
 Importancia de pre 13 MEDV 506 non-null float64
Importancia por dtypes: float64(14)
Importancia por memory usage: 55.5 KB
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 19/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Ajuste del modelo
Introducción
 Random Forest
Métodos de ensem Se ajusta un modelo empleando como variable respuesta MEDV y como
Bagging predictores todas las otras variables disponibles.
Entrenamiento de R
Predicción de Rand La clase RandomForestRegressor del módulo sklearn.ensemble permite
Out-of-Bag Error
Importancia de los
entrenar modelos random forest para problemas de regresión. Los
 Ejemplo regresión parámetros e hiperparámetros empleados por defecto son:
Librerías
Datos n_estimators=100
Ajuste del modelo criterion='mse'
Predicción y evalua max_depth=None
 Optimización de hi min_samples_split=2
Número de árbo min_samples_leaf=1
Max features min_weight_fraction_leaf=0.0
 Grid search max_features='auto'
Grid Search bas max_leaf_nodes=None
Grid Search bas
min_impurity_decrease=0.0
 Importancia de pre
min_impurity_split=None
Importancia por
bootstrap=True
Importancia por
 Ejemplo clasificación oob_score=False
Librerías n_jobs=None
Datos random_state=None
 Ajuste del modelo y verbose=0
Grid Search bas warm_start=False
Grid Search bas ccp_alpha=0.0
Predicción y evalua max_samples=None
Predicción de prob
 Importancia de pre De entre todos ellos, destacan aquellos que detienen el crecimiento de los
Importancia por
Importancia por
árboles, los que controlan el número de árboles y predictores incluidos, y
Extrapolación con mo los que gestionan la paralelización:
Variables dummy (on
Extremely randomize n_estimators ; número de árboles incluidos en el modelo.
Comparación Random
Bibliografía max_depth : profundidad máxima que pueden alcanzar los árboles.

min_samples_split : número mínimo de observaciones que debe de


tener un nodo para que pueda dividirse. Si es un valor decimal se
interpreta como fracción del total de observaciones de entrenamiento
ceil(min_samples_split * n_samples) .

min_samples_leaf : número mínimo de observaciones que debe de


tener cada uno de los nodos hijos para que se produzca la división. Si
es un valor decimal se interpreta como fracción del total de
observaciones de entrenamiento ceil(min_samples_split *
n_samples) .

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 20/72
3/31/23, 10:39 AM Random Forest python

max_leaf_nodes : número máximo de nodos terminales que pueden


Tabla de
tener los árboles.
contenidos 
 max_features : número de predictores considerados a en cada
Introducción
división. Puede ser:
 Random Forest
Métodos de ensem Un valor entero
Bagging Una fracción del total de predictores.
Entrenamiento de R
“auto”, utiliza todos los predictores.
Predicción de Rand
“sqrt”, raiz cuadrada del número total de predictores.
Out-of-Bag Error
“log2”, log2 del número total de predictores.
Importancia de los
 Ejemplo regresión
None, utiliza todos los predictores.
Librerías
oob_score : Si se calcula o no el out-of-bag R^2. Por defecto es
Datos
Ajuste del modelo False ya que aumenta el tiempo de entrenamiento.
Predicción y evalua
 Optimización de hi n_jobs : número de cores empleados para el entrenamiento. En
Número de árbo random forest los árboles se ajustan de forma independiente, por lo la
Max features
paralelización reduce notablemente el tiempo de entrenamiento. Con
 Grid search
Grid Search bas -1 se utilizan todos los cores disponibles.
Grid Search bas
 Importancia de pre random_state : semilla para que los resultados sean reproducibles.
Importancia por Tiene que ser un valor entero.
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y Como en todo estudio predictivo, no solo es importante ajustar el modelo,
Grid Search bas
Grid Search bas
sino también cuantificar su capacidad para predecir nuevas observaciones.
Predicción y evalua Para poder hacer esta evaluación, se dividen los datos en dos grupos, uno
Predicción de prob de entrenamiento y otro de test.
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 21/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [70]: # División de los datos en train y test


# ========================================================
contenidos  ======================
 X_train, X_test, y_train, y_test = train_test_split(
Introducción datos.drop(columns
 Random Forest = "MEDV"),
Métodos de ensem datos['MEDV'],
Bagging random_state = 123
Entrenamiento de R )
# Creación del modelo
Predicción de Rand
# ========================================================
Out-of-Bag Error
======================
Importancia de los modelo = RandomForestRegressor(
 Ejemplo regresión n_estimators = 10,
Librerías criterion = 'mse',
Datos max_depth = None,
Ajuste del modelo max_features = 'auto',
Predicción y evalua oob_score = False,
 Optimización de hi n_jobs = -1,
Número de árbo random_state = 123
Max features )
 Grid search
# Entrenamiento del modelo
Grid Search bas
# ========================================================
Grid Search bas ======================
 Importancia de pre modelo.fit(X_train, y_train)
Importancia por
Importancia por Out[70]: RandomForestRegressor(n_estimators=10, n_jobs=-1, random_stat
 Ejemplo clasificación e=123)
Librerías
Datos
 Ajuste del modelo y
Grid Search bas Predicción y evaluación del modelo
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Una vez entrenado el modelo, se evalúa la capacidad predictiva
Importancia por
Importancia por empleando el conjunto de test.
Extrapolación con mo
Variables dummy (on
Extremely randomize In [71]: # Error de test del modelo inicial
Comparación Random # ========================================================
======================
Bibliografía
predicciones = modelo.predict(X = X_test)

rmse = mean_squared_error(
y_true = y_test,
y_pred = predicciones,
squared = False
)
print(f"El error (rmse) de test es: {rmse}")

El error (rmse) de test es: 4.358493834335092

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 22/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Optimización de hiperparámetros
Introducción
 Random Forest
Métodos de ensem
Bagging El modelo inicial se ha entrenado utilizando 10 árboles
Entrenamiento de R ( n_estimators=10 ) y manteniendo el resto de hiperparámetros con su
Predicción de Rand valor por defecto. Al ser hiperparámetros, no se puede saber de antemano
Out-of-Bag Error
Importancia de los
cuál es el valor más adecuado, la forma de identificarlos es mediante el
 Ejemplo regresión uso de estrategias de validación, por ejemplo validación cruzada.
Librerías
Datos Los modelos Random Forest tienen la ventaja de disponer del Out-of-Bag
Ajuste del modelo
error, lo que permite obtener una estimación del error de test sin recurrir a
Predicción y evalua
 Optimización de hi la validación cruzada, que es computacionalmente costosa. En la
Número de árbo implementación de RandomForestRegressor , la métrica devuelta como
Max features oob_score es el R2 , si se desea otra, se tiene que recurrir al método
 Grid search
oob_decision_function_() para obtener las predicciones y con ellas
Grid Search bas
Grid Search bas calcular la métrica de interés. Para una explicación más detallada
 Importancia de pre consultar: Grid search de modelos Random Forest con out-of-bag error y
Importancia por
early stopping (https://www.cienciadedatos.net/documentos/py36-grid-
Importancia por
 Ejemplo clasificación search-random-forest-out-of-bag-error-early-stopping.html).
Librerías
Datos Cabe tener en cuenta que, cuando se busca el valor óptimo de un
 Ajuste del modelo y hiperparámetro con dos métricas distintas, el resultado obtenido raramente
Grid Search bas
Grid Search bas
es el mismo. Lo importante es que ambas métricas identifiquen las mismas
Predicción y evalua regiones de interés.
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo Número de árboles
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía En Random Forest, el número de árboles no es un hiperparámetro crítico
en cuanto que, añadir árboles, solo puede hacer que mejorar el resultado.
En Random Forest no se produce overfitting por exceso de árboles. Sin
embargo, añadir árboles una vez que la mejora se estabiliza es una
perdida te recursos computacionales.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 23/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [72]: # Validación empleando el Out-of-Bag error


# ========================================================
contenidos  ======================
 train_scores = []
Introducción oob_scores = []
 Random Forest
Métodos de ensem # Valores evaluados
Bagging estimator_range = range(1, 150, 5)
Entrenamiento de R
# Bucle para entrenar un modelo con cada valor de n_estima
Predicción de Rand
tors y extraer su error
Out-of-Bag Error
# de entrenamiento y de Out-of-Bag.
Importancia de los for n_estimators in estimator_range:
 Ejemplo regresión modelo = RandomForestRegressor(
Librerías n_estimators = n_estimators,
Datos criterion = 'mse',
Ajuste del modelo max_depth = None,
Predicción y evalua max_features = 'auto',
 Optimización de hi oob_score = True,
Número de árbo n_jobs = -1,
Max features random_state = 123
)
 Grid search
modelo.fit(X_train, y_train)
Grid Search bas
train_scores.append(modelo.score(X_train, y_train))
Grid Search bas oob_scores.append(modelo.oob_score_)
 Importancia de pre
Importancia por # Gráfico con la evolución de los errores
Importancia por fig, ax = plt.subplots(figsize=(6, 3.84))
 Ejemplo clasificación ax.plot(estimator_range, train_scores, label="train score
Librerías s")
Datos ax.plot(estimator_range, oob_scores, label="out-of-bag sco
 Ajuste del modelo y res")
Grid Search bas
ax.plot(estimator_range[np.argmax(oob_scores)], max(oob_sc
ores),
Grid Search bas
marker='o', color = "red", label="max score")
Predicción y evalua
ax.set_ylabel("R^2")
Predicción de prob ax.set_xlabel("n_estimators")
 Importancia de pre ax.set_title("Evolución del out-of-bag-error vs número árb
Importancia por oles")
Importancia por plt.legend();
Extrapolación con mo print(f"Valor óptimo de n_estimators: {estimator_range[np.
Variables dummy (on argmax(oob_scores)]}")
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 24/72
3/31/23, 10:39 AM Random Forest python

/home/ubuntu/miniconda3/lib/python3.7/site-packages/sklearn/e
Tabla de nsemble/_forest.py:832: UserWarning: Some inputs do not have
contenidos  OOB scores. This probably means too few trees were used to co
 mpute any reliable oob estimates.
Introducción warn("Some inputs do not have OOB scores. "
/home/ubuntu/miniconda3/lib/python3.7/site-packages/sklearn/e
 Random Forest
nsemble/_forest.py:832: UserWarning: Some inputs do not have
Métodos de ensem
OOB scores. This probably means too few trees were used to co
Bagging mpute any reliable oob estimates.
Entrenamiento de R warn("Some inputs do not have OOB scores. "
Predicción de Rand /home/ubuntu/miniconda3/lib/python3.7/site-packages/sklearn/e
Out-of-Bag Error nsemble/_forest.py:832: UserWarning: Some inputs do not have
Importancia de los OOB scores. This probably means too few trees were used to co
 Ejemplo regresión mpute any reliable oob estimates.
Librerías warn("Some inputs do not have OOB scores. "
Datos
Valor óptimo de n_estimators: 56
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 25/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [73]: # Validación empleando k-cross-validation y neg_root_mean_


squared_error
contenidos  # ========================================================
 ======================
Introducción train_scores = []
 Random Forest cv_scores = []
Métodos de ensem
Bagging # Valores evaluados
Entrenamiento de R estimator_range = range(1, 150, 5)
Predicción de Rand
# Bucle para entrenar un modelo con cada valor de n_estima
Out-of-Bag Error
tors y extraer su error
Importancia de los # de entrenamiento y de k-cross-validation.
 Ejemplo regresión for n_estimators in estimator_range:
Librerías
Datos modelo = RandomForestRegressor(
Ajuste del modelo n_estimators = n_estimators,
Predicción y evalua criterion = 'mse',
 Optimización de hi max_depth = None,
Número de árbo max_features = 'auto',
Max features oob_score = False,
n_jobs = -1,
 Grid search
random_state = 123
Grid Search bas
)
Grid Search bas
 Importancia de pre # Error de train
Importancia por modelo.fit(X_train, y_train)
Importancia por predicciones = modelo.predict(X = X_train)
 Ejemplo clasificación rmse = mean_squared_error(
Librerías y_true = y_train,
Datos y_pred = predicciones,
 Ajuste del modelo y squared = False
Grid Search bas
)
train_scores.append(rmse)
Grid Search bas
Predicción y evalua
# Error de validación cruzada
Predicción de prob scores = cross_val_score(
 Importancia de pre estimator = modelo,
Importancia por X = X_train,
Importancia por y = y_train,
Extrapolación con mo scoring = 'neg_root_mean_squared_error',
Variables dummy (on cv = 5
Extremely randomize )
Comparación Random # Se agregan los scores de cross_val_score() y se pasa
Bibliografía
a positivo
cv_scores.append(-1*scores.mean())

# Gráfico con la evolución de los errores


fig, ax = plt.subplots(figsize=(6, 3.84))
ax.plot(estimator_range, train_scores, label="train score
s")
ax.plot(estimator_range, cv_scores, label="cv scores")
ax.plot(estimator_range[np.argmin(cv_scores)], min(cv_scor
es),
marker='o', color = "red", label="min score")
ax.set_ylabel("root_mean_squared_error")
ax.set_xlabel("n_estimators")
ax.set_title("Evolución del cv-error vs número árboles")
plt.legend();
print(f"Valor óptimo de n_estimators: {estimator_range[np.
argmin(cv_scores)]}")
https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 26/72
3/31/23, 10:39 AM Random Forest python

Tabla de Valor óptimo de n_estimators: 26

contenidos 

Introducción
 Random Forest
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand
Out-of-Bag Error
Importancia de los
 Ejemplo regresión
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features Ambas métricas indican que, a partir de entre 20 y 60 árboles, el error de
 Grid search validación del modelo se estabiliza.
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por Max features
 Ejemplo clasificación
Librerías El valor de máx_features es uno de los hiperparámetros más importantes
Datos
de random forest, ya que es el que permite controlar cuánto se
 Ajuste del modelo y
Grid Search bas
decorrelacionan los árboles entre sí.
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 27/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [74]: # Validación empleando el Out-of-Bag error


# ========================================================
contenidos  ======================
 train_scores = []
Introducción oob_scores = []
 Random Forest
Métodos de ensem # Valores evaluados
Bagging max_features_range = range(1, X_train.shape[1] + 1, 1)
Entrenamiento de R
# Bucle para entrenar un modelo con cada valor de max_feat
Predicción de Rand
ures y extraer su error
Out-of-Bag Error
# de entrenamiento y de Out-of-Bag.
Importancia de los for max_features in max_features_range:
 Ejemplo regresión modelo = RandomForestRegressor(
Librerías n_estimators = 100,
Datos criterion = 'mse',
Ajuste del modelo max_depth = None,
Predicción y evalua max_features = max_features,
 Optimización de hi oob_score = True,
Número de árbo n_jobs = -1,
Max features random_state = 123
)
 Grid search
modelo.fit(X_train, y_train)
Grid Search bas
train_scores.append(modelo.score(X_train, y_train))
Grid Search bas oob_scores.append(modelo.oob_score_)
 Importancia de pre
Importancia por # Gráfico con la evolución de los errores
Importancia por fig, ax = plt.subplots(figsize=(6, 3.84))
 Ejemplo clasificación ax.plot(max_features_range, train_scores, label="train sco
Librerías res")
Datos ax.plot(max_features_range, oob_scores, label="out-of-bag
 Ajuste del modelo y scores")
Grid Search bas
ax.plot(max_features_range[np.argmax(oob_scores)], max(oob
_scores),
Grid Search bas
marker='o', color = "red")
Predicción y evalua
ax.set_ylabel("R^2")
Predicción de prob ax.set_xlabel("max_features")
 Importancia de pre ax.set_title("Evolución del out-of-bag-error vs número de
Importancia por predictores")
Importancia por plt.legend();
Extrapolación con mo print(f"Valor óptimo de max_features: {max_features_range
Variables dummy (on [np.argmax(oob_scores)]}")
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 28/72
3/31/23, 10:39 AM Random Forest python

Valor óptimo de max_features: 5


Tabla de
contenidos 

Introducción
 Random Forest
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand
Out-of-Bag Error
Importancia de los
 Ejemplo regresión
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 29/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [75]: # Validación empleando k-cross-validation y neg_root_mean_


squared_error
contenidos  # ========================================================
 ======================
Introducción train_scores = []
 Random Forest cv_scores = []
Métodos de ensem
Bagging # Valores evaluados
Entrenamiento de R max_features_range = range(1, X_train.shape[1] + 1, 1)
Predicción de Rand
# Bucle para entrenar un modelo con cada valor de max_feat
Out-of-Bag Error
ures y extraer su error
Importancia de los # de entrenamiento y de k-cross-validation.
 Ejemplo regresión for max_features in max_features_range:
Librerías
Datos modelo = RandomForestRegressor(
Ajuste del modelo n_estimators = 100,
Predicción y evalua criterion = 'mse',
 Optimización de hi max_depth = None,
Número de árbo max_features = max_features,
Max features oob_score = True,
n_jobs = -1,
 Grid search
random_state = 123
Grid Search bas
)
Grid Search bas
 Importancia de pre # Error de train
Importancia por modelo.fit(X_train, y_train)
Importancia por predicciones = modelo.predict(X = X_train)
 Ejemplo clasificación rmse = mean_squared_error(
Librerías y_true = y_train,
Datos y_pred = predicciones,
 Ajuste del modelo y squared = False
Grid Search bas
)
train_scores.append(rmse)
Grid Search bas
Predicción y evalua
# Error de validación cruzada
Predicción de prob scores = cross_val_score(
 Importancia de pre estimator = modelo,
Importancia por X = X_train,
Importancia por y = y_train,
Extrapolación con mo scoring = 'neg_root_mean_squared_error',
Variables dummy (on cv = 5
Extremely randomize )
Comparación Random # Se agregan los scores de cross_val_score() y se pasa
Bibliografía
a positivo
cv_scores.append(-1*scores.mean())

# Gráfico con la evolución de los errores


fig, ax = plt.subplots(figsize=(6, 3.84))
ax.plot(max_features_range, train_scores, label="train sco
res")
ax.plot(max_features_range, cv_scores, label="cv scores")
ax.plot(max_features_range[np.argmin(cv_scores)], min(cv_s
cores),
marker='o', color = "red", label="min score")
ax.set_ylabel("root_mean_squared_error")
ax.set_xlabel("max_features")
ax.set_title("Evolución del cv-error vs número de predicto
res")
plt.legend();

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 30/72
3/31/23, 10:39 AM Random Forest python

print(f"Valor óptimo de max_features: {max_features_range


Tabla de [np.argmin(cv_scores)]}")
contenidos  Valor óptimo de max_features: 9

Introducción
 Random Forest
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand
Out-of-Bag Error
Importancia de los
 Ejemplo regresión
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas
Acorde a las dos métricas utilizadas, el valor óptimo de max_features
Grid Search bas está entre 5 y 9.
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid search
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
Aunque el análisis individual de los hiperparámetros es útil para entender
 Importancia de pre su impacto en el modelo e identificar rangos de interés, la búsqueda final
Importancia por no debe hacerse de forma secuencial, ya que cada hiperparámetro
Importancia por
interacciona con los demás. Es preferible recurrir a grid search o random
Extrapolación con mo
Variables dummy (on search para analizar varias combinaciones de hiperparámetros. Puede
Extremely randomize encontrarse más información sobre las estrategias de búsqueda en
Comparación Random
Machine learning con Python y Scikit-learn
Bibliografía
(https://www.cienciadedatos.net/documentos/py06_machine_learning_python

Grid Search basado en out-of-bag error

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 31/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [76]: # Grid de hiperparámetros evaluados


# ========================================================
contenidos  ======================
 param_grid = ParameterGrid(
Introducción {'n_estimators': [150],
 Random Forest 'max_features': [5, 7, 9],
Métodos de ensem 'max_depth' : [None, 3, 10, 20]
Bagging }
Entrenamiento de R )
Predicción de Rand
# Loop para ajustar un modelo con cada combinación de hipe
Out-of-Bag Error
rparámetros
Importancia de los # ========================================================
 Ejemplo regresión ======================
Librerías resultados = {'params': [], 'oob_r2': []}
Datos
Ajuste del modelo for params in param_grid:
Predicción y evalua
 Optimización de hi modelo = RandomForestRegressor(
Número de árbo oob_score = True,
Max features n_jobs = -1,
random_state = 123,
 Grid search
** params
Grid Search bas
)
Grid Search bas
 Importancia de pre modelo.fit(X_train, y_train)
Importancia por
Importancia por resultados['params'].append(params)
 Ejemplo clasificación resultados['oob_r2'].append(modelo.oob_score_)
Librerías print(f"Modelo: {params} \u2713")
Datos
 Ajuste del modelo y # Resultados
Grid Search bas
# ========================================================
======================
Grid Search bas
resultados = pd.DataFrame(resultados)
Predicción y evalua
resultados = pd.concat([resultados, resultados['params'].a
Predicción de prob pply(pd.Series)], axis=1)
 Importancia de pre resultados = resultados.drop(columns = 'params')
Importancia por resultados = resultados.sort_values('oob_r2', ascending=Fa
Importancia por lse)
Extrapolación con mo resultados.head(4)
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 32/72
3/31/23, 10:39 AM Random Forest python

Modelo: {'max_depth': None, 'max_features': 5, 'n_estimator


Tabla de s': 150} ✓
contenidos  Modelo: {'max_depth': None, 'max_features': 7, 'n_estimator
 s': 150} ✓
Introducción Modelo: {'max_depth': None, 'max_features': 9, 'n_estimator
s': 150} ✓
 Random Forest
Modelo: {'max_depth': 3, 'max_features': 5, 'n_estimators': 1
Métodos de ensem
50} ✓
Bagging Modelo: {'max_depth': 3, 'max_features': 7, 'n_estimators': 1
Entrenamiento de R 50} ✓
Predicción de Rand Modelo: {'max_depth': 3, 'max_features': 9, 'n_estimators': 1
Out-of-Bag Error 50} ✓
Importancia de los Modelo: {'max_depth': 10, 'max_features': 5, 'n_estimators':
 Ejemplo regresión 150} ✓
Librerías Modelo: {'max_depth': 10, 'max_features': 7, 'n_estimators':
Datos 150} ✓
Ajuste del modelo Modelo: {'max_depth': 10, 'max_features': 9, 'n_estimators':
150} ✓
Predicción y evalua
Modelo: {'max_depth': 20, 'max_features': 5, 'n_estimators':
 Optimización de hi
150} ✓
Número de árbo Modelo: {'max_depth': 20, 'max_features': 7, 'n_estimators':
Max features 150} ✓
 Grid search Modelo: {'max_depth': 20, 'max_features': 9, 'n_estimators':
Grid Search bas 150} ✓
Grid Search bas
 Importancia de pre
Out[76]:
oob_r2 max_depth max_features n_estimators
Importancia por
Importancia por 9 0.876112 20.0 5.0 150.0
 Ejemplo clasificación
0 0.876026 NaN 5.0 150.0
Librerías
Datos 2 0.873244 NaN 9.0 150.0
 Ajuste del modelo y 11 0.872855 20.0 9.0 150.0
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 33/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [77]: # VERSIÓN PARALELIZADA


# ========================================================
contenidos  ======================

Introducción # Grid de hiperparámetros evaluados
 Random Forest # ========================================================
Métodos de ensem ======================
Bagging param_grid = ParameterGrid(
Entrenamiento de R {'n_estimators': [150],
'max_features': [5, 7, 9],
Predicción de Rand
'max_depth' : [None, 3, 10, 20]
Out-of-Bag Error
}
Importancia de los )
 Ejemplo regresión
Librerías # Loop paralelizado para ajustar un modelo con cada combin
Datos ación de hiperparámetros
Ajuste del modelo # ========================================================
Predicción y evalua ======================
 Optimización de hi def eval_oob_error(X, y, modelo, params, verbose=True):
Número de árbo """
Max features Función para entrenar un modelo utilizando unos paráme
tros determinados
 Grid search
y que devuelve el out-of-bag error
Grid Search bas
"""
Grid Search bas modelo.set_params(
 Importancia de pre oob_score = True,
Importancia por n_jobs = -1,
Importancia por random_state = 123,
 Ejemplo clasificación ** params
Librerías )
Datos
 Ajuste del modelo y modelo.fit(X, y)
Grid Search bas
if verbose:
Grid Search bas
print(f"Modelo: {params} \u2713")
Predicción y evalua
Predicción de prob return{'params': params, 'oob_r2': modelo.oob_score_}
 Importancia de pre
Importancia por
Importancia por n_jobs = multiprocessing.cpu_count() -1
Extrapolación con mo pool = multiprocessing.Pool(processes=n_jobs)
Variables dummy (on resultados = pool.starmap(
Extremely randomize eval_oob_error,
Comparación Random [(X_train, y_train, RandomForestRegressor
(), params) for params in param_grid]
Bibliografía
)

# Resultados
# ========================================================
======================
resultados = pd.DataFrame(resultados)
resultados = pd.concat([resultados, resultados['params'].a
pply(pd.Series)], axis=1)
resultados = resultados.drop(columns = 'params')
resultados = resultados.sort_values('oob_r2', ascending=Fa
lse)
resultados.head(4)

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 34/72
3/31/23, 10:39 AM Random Forest python

Modelo: {'max_depth': 3, 'max_features': 5, 'n_estimators': 1


Tabla de 50} ✓
contenidos  Modelo: {'max_depth': None, 'max_features': 5, 'n_estimator
 s': 150} ✓
Introducción Modelo: {'max_depth': 3, 'max_features': 9, 'n_estimators': 1
50} ✓
 Random Forest
Modelo: {'max_depth': None, 'max_features': 7, 'n_estimator
Métodos de ensem
s': 150} ✓
Bagging Modelo: {'max_depth': None, 'max_features': 9, 'n_estimator
Entrenamiento de R s': 150} ✓
Predicción de Rand Modelo: {'max_depth': 10, 'max_features': 5, 'n_estimators':
Out-of-Bag Error 150} ✓
Importancia de los Modelo: {'max_depth': 3, 'max_features': 7, 'n_estimators': 1
 Ejemplo regresión 50} ✓
Librerías Modelo: {'max_depth': 10, 'max_features': 7, 'n_estimators':
Datos 150} ✓
Ajuste del modelo Modelo: {'max_depth': 20, 'max_features': 5, 'n_estimators':
150} ✓
Predicción y evalua
Modelo: {'max_depth': 10, 'max_features': 9, 'n_estimators':
 Optimización de hi
150} ✓
Número de árbo Modelo: {'max_depth': 20, 'max_features': 7, 'n_estimators':
Max features 150} ✓
 Grid search Modelo: {'max_depth': 20, 'max_features': 9, 'n_estimators':
Grid Search bas 150} ✓
Grid Search bas
 Importancia de pre
Out[77]:
oob_r2 max_depth max_features n_estimators
Importancia por
Importancia por 9 0.876112 20.0 5.0 150.0
 Ejemplo clasificación
0 0.876026 NaN 5.0 150.0
Librerías
Datos 2 0.873244 NaN 9.0 150.0
 Ajuste del modelo y 11 0.872855 20.0 9.0 150.0
Grid Search bas
Grid Search bas
Predicción y evalua
In [78]: # Mejores hiperparámetros por out-of-bag error
# ========================================================
Predicción de prob
======================
 Importancia de pre
print("--------------------------------------------")
Importancia por print("Mejores hiperparámetros encontrados (oob-r2)")
Importancia por print("--------------------------------------------")
Extrapolación con mo print(resultados.iloc[0,0], ":", resultados.iloc[0,:]['oob
Variables dummy (on _r2'], "R2")
Extremely randomize
Comparación Random --------------------------------------------
Mejores hiperparámetros encontrados (oob-r2)
Bibliografía
--------------------------------------------
0.8761119758435352 : 0.8761119758435352 R2

Grid Search basado en validación cruzada

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 35/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [79]: # Grid de hiperparámetros evaluados


# ========================================================
contenidos  ======================
 param_grid = {'n_estimators': [150],
Introducción 'max_features': [5, 7, 9],
 Random Forest 'max_depth' : [None, 3, 10, 20]
Métodos de ensem }
Bagging
Entrenamiento de R # Búsqueda por grid search con validación cruzada
# ========================================================
Predicción de Rand
======================
Out-of-Bag Error
grid = GridSearchCV(
Importancia de los estimator = RandomForestRegressor(random_state =
 Ejemplo regresión 123),
Librerías param_grid = param_grid,
Datos scoring = 'neg_root_mean_squared_error',
Ajuste del modelo n_jobs = multiprocessing.cpu_count() - 1,
Predicción y evalua cv = RepeatedKFold(n_splits=5, n_repeats=
 Optimización de hi 3, random_state=123),
Número de árbo refit = True,
Max features verbose = 0,
return_train_score = True
 Grid search
)
Grid Search bas
Grid Search bas grid.fit(X = X_train, y = y_train)
 Importancia de pre
Importancia por # Resultados
Importancia por # ========================================================
 Ejemplo clasificación ======================
Librerías resultados = pd.DataFrame(grid.cv_results_)
Datos resultados.filter(regex = '(param.*|mean_t|std_t)') \
 Ajuste del modelo y .drop(columns = 'params') \
Grid Search bas
.sort_values('mean_test_score', ascending = False) \
.head(4)
Grid Search bas
Predicción y evalua Out[79]:
Predicción de prob param_max_depth param_max_features param_n_estimators mean_test_sc
 Importancia de pre
0 None 5 150 -3.322
Importancia por
Importancia por 9 20 5 150 -3.323
Extrapolación con mo 6 10 5 150 -3.342
Variables dummy (on
7 10 7 150 -3.344
Extremely randomize
Comparación Random
Bibliografía
In [80]: # Mejores hiperparámetros por validación cruzada
# ========================================================
======================
print("----------------------------------------")
print("Mejores hiperparámetros encontrados (cv)")
print("----------------------------------------")
print(grid.best_params_, ":", grid.best_score_, grid.scori
ng)

----------------------------------------
Mejores hiperparámetros encontrados (cv)
----------------------------------------
{'max_depth': None, 'max_features': 5, 'n_estimators': 150} :
-3.322814334216982 neg_root_mean_squared_error

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 36/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Una vez identificados los mejores hiperparámetros, se reentrena el modelo
Introducción
 Random Forest indicando los
valores óptimos en sus argumentos. Si en el
Métodos de ensem GridSearchCV() se indica refit=True , este reentrenamiento se hace
Bagging automáticamente y el modelo resultante se encuentra almacenado en
Entrenamiento de R
Predicción de Rand
.best_estimator_ .
Out-of-Bag Error
Importancia de los
 Ejemplo regresión In [81]: # Error de test del modelo final
Librerías
# ========================================================
======================
Datos
modelo_final = grid.best_estimator_
Ajuste del modelo
predicciones = modelo.predict(X = X_test)
Predicción y evalua rmse = mean_squared_error(
 Optimización de hi y_true = y_test,
Número de árbo y_pred = predicciones,
Max features squared = False
 Grid search )
Grid Search bas print(f"El error (rmse) de test es: {rmse}")
Grid Search bas
El error (rmse) de test es: 3.7414885037872314
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación Tras optimizar los hiperparámetros, se consigue reducir el error rmse del
Librerías modelo de 4.35 a 3.74. Las predicciones del modelo final se alejan en
Datos promedio 3.74 unidades (3740 dólares) del valor real.
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por Importancia de predictores
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random Importancia por pureza de nodos
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 37/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [82]: importancia_predictores = pd.DataFrame(


{'predictor': datos.drop(colum
contenidos  ns = "MEDV").columns,
 'importancia': modelo.feature
Introducción _importances_}
 Random Forest )
Métodos de ensem print("Importancia de los predictores en el modelo")
Bagging print("-------------------------------------------")
Entrenamiento de R importancia_predictores.sort_values('importancia', ascendi
ng=False)
Predicción de Rand
Out-of-Bag Error Importancia de los predictores en el modelo
Importancia de los -------------------------------------------
 Ejemplo regresión
Librerías Out[82]:
predictor importancia
Datos
Ajuste del modelo 5 RM 0.438703
Predicción y evalua
12 LSTAT 0.352933
 Optimización de hi
Número de árbo 7 DIS 0.051219
Max features 0 CRIM 0.040944
 Grid search
4 NOX 0.035128
Grid Search bas
Grid Search bas 10 PTRATIO 0.022411
 Importancia de pre
6 AGE 0.017649
Importancia por
Importancia por 9 TAX 0.015948
 Ejemplo clasificación 11 B 0.010508
Librerías
2 INDUS 0.007349
Datos
 Ajuste del modelo y 8 RAD 0.004951
Grid Search bas
1 ZN 0.001671
Grid Search bas
Predicción y evalua 3 CHAS 0.000586
Predicción de prob
 Importancia de pre
Importancia por
Importancia por Importancia por permutación
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 38/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [83]: importancia = permutation_importance(


estimator = modelo_final,
contenidos  X = X_train,
 y = y_train,
Introducción n_repeats = 5,
 Random Forest scoring = 'neg_root_mean_squared_erro
Métodos de ensem r',
Bagging n_jobs = multiprocessing.cpu_count()
Entrenamiento de R - 1,
random_state = 123
Predicción de Rand
)
Out-of-Bag Error
Importancia de los # Se almacenan los resultados (media y desviación) en un d
 Ejemplo regresión ataframe
Librerías df_importancia = pd.DataFrame(
Datos {k: importancia[k] for k in ['importan
Ajuste del modelo ces_mean', 'importances_std']}
Predicción y evalua )
 Optimización de hi df_importancia['feature'] = X_train.columns
Número de árbo df_importancia.sort_values('importances_mean', ascending=F
Max features alse)
 Grid search Out[83]:
Grid Search bas importances_mean importances_std feature
Grid Search bas
12 4.908552 0.212955 LSTAT
 Importancia de pre
Importancia por 5 4.797233 0.059018 RM
Importancia por 4 1.357376 0.079530 NOX
 Ejemplo clasificación
Librerías 7 1.253063 0.059919 DIS
Datos 10 0.945869 0.056614 PTRATIO
 Ajuste del modelo y
0 0.770452 0.035104 CRIM
Grid Search bas
Grid Search bas 9 0.505306 0.015649 TAX
Predicción y evalua 6 0.445013 0.021697 AGE
Predicción de prob
 Importancia de pre 2 0.441031 0.030156 INDUS
Importancia por 11 0.324039 0.009679 B
Importancia por
8 0.122145 0.004693 RAD
Extrapolación con mo
Variables dummy (on 1 0.048223 0.003169 ZN
Extremely randomize 3 0.023423 0.001813 CHAS
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 39/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [84]: # Gráfico


fig, ax = plt.subplots(figsize=(5, 6))
contenidos  df_importancia = df_importancia.sort_values('importances_m
 ean', ascending=True)
Introducción ax.barh(
 Random Forest df_importancia['feature'],
Métodos de ensem df_importancia['importances_mean'],
Bagging xerr=df_importancia['importances_std'],
Entrenamiento de R align='center',
alpha=0
Predicción de Rand
)
Out-of-Bag Error
ax.plot(
Importancia de los df_importancia['importances_mean'],
 Ejemplo regresión df_importancia['feature'],
Librerías marker="D",
Datos linestyle="",
Ajuste del modelo alpha=0.8,
Predicción y evalua color="r"
 Optimización de hi )
Número de árbo ax.set_title('Importancia de los predictores (train)')
Max features ax.set_xlabel('Incremento del error tras la permutación');
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 40/72
3/31/23, 10:39 AM Random Forest python

Tabla de
Ambas estrategias identifican LSTAT y RM como los predictores más
contenidos 
 influyentes, acorde a los datos de entrenamiento.
Introducción
 Random Forest
"
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand
Out-of-Bag Error
Importancia de los
 Ejemplo regresión
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
Ejemplo clasificación
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob Librerías
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo Las librerías utilizadas en este documento son:
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 41/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [110]: # Tratamiento de datos


# ========================================================
contenidos  ======================
 import numpy as np
Introducción import pandas as pd
 Random Forest import statsmodels.api as sm
Métodos de ensem
Bagging # Gráficos
Entrenamiento de R # ========================================================
======================
Predicción de Rand
import matplotlib.pyplot as plt
Out-of-Bag Error
Importancia de los # Preprocesado y modelado
 Ejemplo regresión # ========================================================
Librerías ======================
Datos from sklearn.datasets import load_boston
Ajuste del modelo from sklearn.ensemble import RandomForestClassifier
Predicción y evalua from sklearn.metrics import accuracy_score
 Optimización de hi from sklearn.metrics import confusion_matrix
Número de árbo from sklearn.metrics import plot_confusion_matrix
Max features from sklearn.metrics import classification_report
from sklearn.compose import ColumnTransformer
 Grid search
from sklearn.preprocessing import OneHotEncoder
Grid Search bas
from sklearn.model_selection import cross_val_score
Grid Search bas from sklearn.model_selection import train_test_split
 Importancia de pre from sklearn.model_selection import RepeatedKFold
Importancia por from sklearn.model_selection import GridSearchCV
Importancia por from sklearn.model_selection import ParameterGrid
 Ejemplo clasificación from sklearn.inspection import permutation_importance
Librerías import multiprocessing
Datos
 Ajuste del modelo y # Configuración warnings
Grid Search bas
# ========================================================
======================
Grid Search bas
import warnings
Predicción y evalua
warnings.filterwarnings('once')
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo Datos
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía El set de datos Carseats , original del paquete de R ISLR y accesible en
Python a través de statsmodels.datasets.get_rdataset , contiene
información sobre la venta de sillas infantiles en 400 tiendas distintas. Para
cada una de las 400 tiendas se han registrado 11 variables. Se pretende
generar un modelo de clasificación que permita predecir si una tienda tiene
ventas altas (Sales > 8) o bajas (Sales <= 8) en función de todas las
variables disponibles.

Nota: listado de todos los set de datos disponibles en Rdatasets


(https://vincentarelbundock.github.io/Rdatasets/articles/data.html)

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 42/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [86]: carseats = sm.datasets.get_rdataset("Carseats", "ISLR")


datos = carseats.data
contenidos  print(carseats.__doc__)

Introducción
 Random Forest
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand
Out-of-Bag Error
Importancia de los
 Ejemplo regresión
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 43/72
3/31/23, 10:39 AM Random Forest python

======== ===============
Tabla de Carseats R Documentation
contenidos  ======== ===============

Introducción Sales of Child Car Seats
------------------------
 Random Forest
Métodos de ensem
Description
Bagging ~~~~~~~~~~~
Entrenamiento de R
Predicción de Rand A simulated data set containing sales of child car seats at 4
Out-of-Bag Error 00
Importancia de los different stores.
 Ejemplo regresión
Librerías Usage
Datos ~~~~~
Ajuste del modelo
::
Predicción y evalua
 Optimización de hi
Carseats
Número de árbo
Max features Format
 Grid search ~~~~~~
Grid Search bas
Grid Search bas A data frame with 400 observations on the following 11 variab
 Importancia de pre les.
Importancia por
Importancia por ``Sales``
 Ejemplo clasificación Unit sales (in thousands) at each location
Librerías
``CompPrice``
Datos
Price charged by competitor at each location
 Ajuste del modelo y
Grid Search bas ``Income``
Grid Search bas Community income level (in thousands of dollars)
Predicción y evalua
Predicción de prob ``Advertising``
 Importancia de pre Local advertising budget for company at each location (in
Importancia por thousands
Importancia por of dollars)
Extrapolación con mo
``Population``
Variables dummy (on
Population size in region (in thousands)
Extremely randomize
Comparación Random ``Price``
Bibliografía Price company charges for car seats at each site

``ShelveLoc``
A factor with levels ``Bad``, ``Good`` and ``Medium`` indi
cating the
quality of the shelving location for the car seats at each
site

``Age``
Average age of the local population

``Education``
Education level at each location

``Urban``
A factor with levels ``No`` and ``Yes`` to indicate whethe
https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 44/72
3/31/23, 10:39 AM Random Forest python

r the store
Tabla de is in an urban or rural location
contenidos 
``US``
 A factor with levels ``No`` and ``Yes`` to indicate whethe
Introducción r the store
 Random Forest is in the US or not
Métodos de ensem
Bagging Source
Entrenamiento de R ~~~~~~
Predicción de Rand
Out-of-Bag Error Simulated data
Importancia de los
References
 Ejemplo regresión
~~~~~~~~~~
Librerías
Datos James, G., Witten, D., Hastie, T., and Tibshirani, R. (2013)
Ajuste del modelo *An
Predicción y evalua Introduction to Statistical Learning with applications in R*,
 Optimización de hi `www.StatLearning.com <www.StatLearning.com>`__, Springer-Ver
Número de árbo lag, New
Max features York
 Grid search
Grid Search bas Examples
Grid Search bas
~~~~~~~~
 Importancia de pre
::
Importancia por
Importancia por summary(Carseats)
 Ejemplo clasificación lm.fit=lm(Sales~Advertising+Price,data=Carseats)
Librerías
Datos
 Ajuste del modelo y
In [87]: datos.head(3)
Grid Search bas
Grid Search bas Out[87]:
Predicción y evalua Sales CompPrice Income Advertising Population Price ShelveLoc Age
Predicción de prob 0 9.50 138 73 11 276 120 Bad 42
 Importancia de pre
1 11.22 111 48 16 260 83 Good 65
Importancia por
Importancia por 2 10.06 113 35 10 269 80 Medium 59
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Como Sales es una variable continua y el objetivo del estudio es
Bibliografía
clasificar las tiendas según si venden mucho o poco, se crea una nueva
variable binaria (0, 1) llamada ventas_altas .

In [88]: datos['ventas_altas'] = np.where(datos.Sales > 8, 0, 1)


# Una vez creada la nueva variable respuesta se descarta l
a original
datos = datos.drop(columns = 'Sales')

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 45/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Ajuste del modelo y optimización de
Introducción hiperparámetros
 Random Forest
Métodos de ensem
Bagging
Entrenamiento de R Se ajusta un árbol de clasificación empleando como variable respuesta
Predicción de Rand ventas_altas y como predictores todas las variables disponibles. Se
Out-of-Bag Error
Importancia de los utilizan en
primer lugar los hiperparámetros max_depth=5 y
 Ejemplo regresión criterion='gini' , el resto se dejan por defecto. Después, se aplica el
Librerías proceso de pruning y se comparan los resultados frente al modelo inicial.
Datos
Ajuste del modelo
A diferencia del ejemplo anterior, en estos datos hay variables categóricas
Predicción y evalua
 Optimización de hi por lo que, antes de entrenar el modelo, es necesario aplicar one-hot-
Número de árbo encoding. Puede encontrarse una descripción más detallada de este
Max features
proceso en Machine learning con Python y Scikit-learn
 Grid search
Grid Search bas
(https://www.cienciadedatos.net/documentos/py06_machine_learning_python
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 46/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [89]: # División de los datos en train y test


# ========================================================
contenidos  ======================
 X_train, X_test, y_train, y_test = train_test_split(
Introducción datos.drop(columns
 Random Forest = 'ventas_altas'),
Métodos de ensem datos['ventas_alta
Bagging s'],
Entrenamiento de R random_state = 123
)
Predicción de Rand
Out-of-Bag Error
# One-hot-encoding de las variables categóricas
Importancia de los # ========================================================
 Ejemplo regresión ======================
Librerías # Se identifica el nobre de las columnas numéricas y categ
Datos óricas
Ajuste del modelo cat_cols = X_train.select_dtypes(include=['object', 'categ
Predicción y evalua ory']).columns.to_list()
 Optimización de hi numeric_cols = X_train.select_dtypes(include=['float64',
Número de árbo 'int']).columns.to_list()
Max features
# Se aplica one-hot-encoding solo a las columnas categóric
 Grid search
as
Grid Search bas
preprocessor = ColumnTransformer(
Grid Search bas [('onehot', OneHotEncoder(handle_unkno
 Importancia de pre wn='ignore'), cat_cols)],
Importancia por remainder='passthrough'
Importancia por )
 Ejemplo clasificación
Librerías # Una vez que se ha definido el objeto ColumnTransformer,
Datos con el método fit()
 Ajuste del modelo y # se aprenden las transformaciones con los datos de entren
amiento y se aplican a
Grid Search bas
# los dos conjuntos con transform(). Ambas operaciones a l
Grid Search bas
a vez con fit_transform().
Predicción y evalua
X_train_prep = preprocessor.fit_transform(X_train)
Predicción de prob X_test_prep = preprocessor.transform(X_test)
 Importancia de pre
Importancia por
Importancia por
El resultado devuelto por ColumnTransformer es un numpy array , por lo
Extrapolación con mo
Variables dummy (on que se pierden los nombres de las columnas. Es interesante poder
Extremely randomize inspeccionar cómo queda el set de datos tras el preprocesado en formato
Comparación Random
dataframe . Por defecto, OneHotEncoder ordena las nuevas columnas de
Bibliografía
izquierda a derecha por orden alfabético.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 47/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [90]: # Convertir el output del ColumnTransformer en dataframe y


añadir nombre columnas
contenidos  # ========================================================
 ======================
Introducción # Nombre de todas las columnas
 Random Forest encoded_cat = preprocessor.named_transformers_['onehot'].g
Métodos de ensem et_feature_names(cat_cols)
Bagging labels = np.concatenate([numeric_cols, encoded_cat])
Entrenamiento de R
# Conversión a dataframe
Predicción de Rand
X_train_prep = pd.DataFrame(X_train_prep, columns=labels)
Out-of-Bag Error
X_test_prep = pd.DataFrame(X_test_prep, columns=labels)
Importancia de los X_train_prep.info()
 Ejemplo regresión
Librerías <class 'pandas.core.frame.DataFrame'>
Datos RangeIndex: 300 entries, 0 to 299
Ajuste del modelo Data columns (total 14 columns):
Predicción y evalua # Column Non-Null Count Dtype
 Optimización de hi
--- ------ -------------- -----
0 CompPrice 300 non-null float64
Número de árbo
1 Income 300 non-null float64
Max features
2 Advertising 300 non-null float64
 Grid search 3 Population 300 non-null float64
Grid Search bas 4 Price 300 non-null float64
Grid Search bas 5 Age 300 non-null float64
 Importancia de pre 6 Education 300 non-null float64
Importancia por 7 ShelveLoc_Bad 300 non-null float64
Importancia por 8 ShelveLoc_Good 300 non-null float64
 Ejemplo clasificación 9 ShelveLoc_Medium 300 non-null float64
Librerías 10 Urban_No 300 non-null float64
Datos
11 Urban_Yes 300 non-null float64
12 US_No 300 non-null float64
 Ajuste del modelo y
13 US_Yes 300 non-null float64
Grid Search bas dtypes: float64(14)
Grid Search bas memory usage: 32.9 KB
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 48/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Si bien RandomForestClassifier tiene valores por defecto para sus
Introducción
 Random Forest hiperparámetros, no se puede saber de antemano si estos son los más
Métodos de ensem adecuados, la forma de identificarlos es mediante el uso de estrategias de
Bagging validación, por ejemplo validación cruzada.
Entrenamiento de R
Predicción de Rand
Los modelos Random Forest tienen la ventaja de disponer del Out-of-Bag
Out-of-Bag Error
Importancia de los error, lo que permite obtener una estimación del error de test sin recurrir a
 Ejemplo regresión la validación cruzada, que es computacionalmente costosa. En la
Librerías
implementación de RandomForestClassifier , la métrica devuelta como
Datos
Ajuste del modelo oob_score es el accuracy, si se desea otra, se tiene que recurrir al método
Predicción y evalua oob_decision_function_() para obtener las predicciones y con ellas
 Optimización de hi
calcular la métrica de interés. Para una explicación más detallada
Número de árbo
Max features consultar: Grid search de modelos Random Forest con out-of-bag error y
 Grid search early stopping (https://www.cienciadedatos.net/documentos/py36-grid-
Grid Search bas search-random-forest-out-of-bag-error-early-stopping.html). Cabe tener en
Grid Search bas
 Importancia de pre
cuenta que, cuando se busca el valor óptimo de un hiperparámetro con dos
Importancia por métricas distintas, el resultado obtenido raramente es el mismo. Lo
Importancia por importante es que ambas métricas identifiquen las mismas regiones de
 Ejemplo clasificación
interés.
Librerías
Datos
 Ajuste del modelo y
Aunque el análisis individual de los hiperparámetros es útil para entender
Grid Search bas su impacto en el modelo e identificar rangos de interés, la búsqueda final
Grid Search bas no debe hacerse de forma secuencial, ya que cada hiperparámetro
Predicción y evalua
Predicción de prob
interacciona con los demás. Es preferible recurrir a grid search o random
 Importancia de pre search para analizar varias combinaciones de hiperparámetros. Puede
Importancia por encontrarse más información sobre las estrategias de búsqueda en
Importancia por
Machine learning con Python y Scikit-learn
Extrapolación con mo
Variables dummy (on (https://www.cienciadedatos.net/documentos/py06_machine_learning_python
Extremely randomize
Comparación Random
Bibliografía

Grid Search basado en out-of-bag score

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 49/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [91]: # Grid de hiperparámetros evaluados


# ========================================================
contenidos  ======================
 param_grid = ParameterGrid(
Introducción {'n_estimators': [150],
 Random Forest 'max_features': [5, 7, 9],
Métodos de ensem 'max_depth' : [None, 3, 10, 20],
Bagging 'criterion' : ['gini', 'entropy']
Entrenamiento de R }
)
Predicción de Rand
Out-of-Bag Error
# Loop para ajustar un modelo con cada combinación de hipe
Importancia de los rparámetros
 Ejemplo regresión # ========================================================
Librerías ======================
Datos resultados = {'params': [], 'oob_accuracy': []}
Ajuste del modelo
Predicción y evalua for params in param_grid:
 Optimización de hi
Número de árbo modelo = RandomForestClassifier(
Max features oob_score = True,
n_jobs = -1,
 Grid search
random_state = 123,
Grid Search bas
** params
Grid Search bas )
 Importancia de pre
Importancia por modelo.fit(X_train_prep, y_train)
Importancia por
 Ejemplo clasificación resultados['params'].append(params)
Librerías resultados['oob_accuracy'].append(modelo.oob_score_)
Datos print(f"Modelo: {params} \u2713")
 Ajuste del modelo y
Grid Search bas
# Resultados
# ========================================================
Grid Search bas
======================
Predicción y evalua
resultados = pd.DataFrame(resultados)
Predicción de prob resultados = pd.concat([resultados, resultados['params'].a
 Importancia de pre pply(pd.Series)], axis=1)
Importancia por resultados = resultados.sort_values('oob_accuracy', ascend
Importancia por ing=False)
Extrapolación con mo resultados = resultados.drop(columns = 'params')
Variables dummy (on resultados.head(4)
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 50/72
3/31/23, 10:39 AM Random Forest python

Modelo: {'criterion': 'gini', 'max_depth': None, 'max_feature


Tabla de s': 5, 'n_estimators': 150} ✓
contenidos  Modelo: {'criterion': 'gini', 'max_depth': None, 'max_feature
 s': 7, 'n_estimators': 150} ✓
Introducción Modelo: {'criterion': 'gini', 'max_depth': None, 'max_feature
s': 9, 'n_estimators': 150} ✓
 Random Forest
Modelo: {'criterion': 'gini', 'max_depth': 3, 'max_features':
Métodos de ensem
5, 'n_estimators': 150} ✓
Bagging Modelo: {'criterion': 'gini', 'max_depth': 3, 'max_features':
Entrenamiento de R 7, 'n_estimators': 150} ✓
Predicción de Rand Modelo: {'criterion': 'gini', 'max_depth': 3, 'max_features':
Out-of-Bag Error 9, 'n_estimators': 150} ✓
Importancia de los Modelo: {'criterion': 'gini', 'max_depth': 10, 'max_feature
 Ejemplo regresión s': 5, 'n_estimators': 150} ✓
Librerías Modelo: {'criterion': 'gini', 'max_depth': 10, 'max_feature
Datos s': 7, 'n_estimators': 150} ✓
Ajuste del modelo Modelo: {'criterion': 'gini', 'max_depth': 10, 'max_feature
s': 9, 'n_estimators': 150} ✓
Predicción y evalua
Modelo: {'criterion': 'gini', 'max_depth': 20, 'max_feature
 Optimización de hi
s': 5, 'n_estimators': 150} ✓
Número de árbo Modelo: {'criterion': 'gini', 'max_depth': 20, 'max_feature
Max features s': 7, 'n_estimators': 150} ✓
 Grid search Modelo: {'criterion': 'gini', 'max_depth': 20, 'max_feature
Grid Search bas s': 9, 'n_estimators': 150} ✓
Grid Search bas Modelo: {'criterion': 'entropy', 'max_depth': None, 'max_feat
 Importancia de pre ures': 5, 'n_estimators': 150} ✓
Importancia por Modelo: {'criterion': 'entropy', 'max_depth': None, 'max_feat
Importancia por ures': 7, 'n_estimators': 150} ✓
 Ejemplo clasificación Modelo: {'criterion': 'entropy', 'max_depth': None, 'max_feat
ures': 9, 'n_estimators': 150} ✓
Librerías
Modelo: {'criterion': 'entropy', 'max_depth': 3, 'max_feature
Datos
s': 5, 'n_estimators': 150} ✓
 Ajuste del modelo y Modelo: {'criterion': 'entropy', 'max_depth': 3, 'max_feature
Grid Search bas s': 7, 'n_estimators': 150} ✓
Grid Search bas Modelo: {'criterion': 'entropy', 'max_depth': 3, 'max_feature
Predicción y evalua s': 9, 'n_estimators': 150} ✓
Predicción de prob Modelo: {'criterion': 'entropy', 'max_depth': 10, 'max_featur
 Importancia de pre es': 5, 'n_estimators': 150} ✓
Importancia por Modelo: {'criterion': 'entropy', 'max_depth': 10, 'max_featur
Importancia por es': 7, 'n_estimators': 150} ✓
Modelo: {'criterion': 'entropy', 'max_depth': 10, 'max_featur
Extrapolación con mo
es': 9, 'n_estimators': 150} ✓
Variables dummy (on
Modelo: {'criterion': 'entropy', 'max_depth': 20, 'max_featur
Extremely randomize
es': 5, 'n_estimators': 150} ✓
Comparación Random Modelo: {'criterion': 'entropy', 'max_depth': 20, 'max_featur
Bibliografía es': 7, 'n_estimators': 150} ✓
Modelo: {'criterion': 'entropy', 'max_depth': 20, 'max_featur
es': 9, 'n_estimators': 150} ✓

Out[91]:
oob_accuracy criterion max_depth max_features n_estimators

18 0.836667 entropy 10.0 5 150

0 0.830000 gini NaN 5 150

9 0.830000 gini 20.0 5 150

21 0.826667 entropy 20.0 5 150

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 51/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [92]: # VERSIÓN PARALELIZADA


# ========================================================
contenidos  ======================

Introducción # Loop para ajustar un modelo con cada combinación de hipe
 Random Forest rparámetros
Métodos de ensem # ========================================================
Bagging ======================
Entrenamiento de R param_grid = ParameterGrid(
{'n_estimators': [150],
Predicción de Rand
'max_features': [5, 7, 9],
Out-of-Bag Error
'max_depth' : [None, 3, 10, 20],
Importancia de los 'criterion' : ['gini', 'entropy']
 Ejemplo regresión }
Librerías )
Datos
Ajuste del modelo # Loop paralelizado para ajustar un modelo con cada combin
Predicción y evalua ación de hiperparámetros
 Optimización de hi # ========================================================
Número de árbo ======================
Max features def eval_oob_error(X, y, modelo, params, verbose=True):
"""
 Grid search
Función para entrenar un modelo utilizando unos paráme
Grid Search bas
tros determinados
Grid Search bas y que devuelve el out-of-bag error
 Importancia de pre """
Importancia por modelo.set_params(
Importancia por oob_score = True,
 Ejemplo clasificación n_jobs = -1,
Librerías random_state = 123,
Datos ** params
 Ajuste del modelo y )
Grid Search bas
modelo.fit(X, y)
Grid Search bas
Predicción y evalua
if verbose:
Predicción de prob print(f"Modelo: {params} \u2713")
 Importancia de pre
Importancia por return{'params': params, 'oob_accuracy': modelo.oob_sc
Importancia por ore_}
Extrapolación con mo
Variables dummy (on
Extremely randomize n_jobs = multiprocessing.cpu_count() -1
Comparación Random pool = multiprocessing.Pool(processes=n_jobs)
resultados = pool.starmap(
Bibliografía
eval_oob_error,
[(X_train_prep, y_train, RandomForestClass
ifier(), params) for params in param_grid]
)

# Resultados
# ========================================================
======================
resultados = pd.DataFrame(resultados)
resultados = pd.concat([resultados, resultados['params'].a
pply(pd.Series)], axis=1)
resultados = resultados.drop(columns = 'params')
resultados = resultados.sort_values('oob_accuracy', ascend
ing=False)
resultados.head(4)

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 52/72
3/31/23, 10:39 AM Random Forest python

Modelo: {'criterion': 'gini', 'max_depth': 3, 'max_features':


Tabla de 5, 'n_estimators': 150} ✓
contenidos  Modelo: {'criterion': 'gini', 'max_depth': None, 'max_feature
 s': 9, 'n_estimators': 150} ✓
Introducción Modelo: {'criterion': 'gini', 'max_depth': None, 'max_feature
s': 5, 'n_estimators': 150} ✓
 Random Forest
Modelo: {'criterion': 'gini', 'max_depth': None, 'max_feature
Métodos de ensem
s': 7, 'n_estimators': 150} ✓
Bagging Modelo: {'criterion': 'gini', 'max_depth': 10, 'max_feature
Entrenamiento de R s': 5, 'n_estimators': 150} ✓
Predicción de Rand Modelo: {'criterion': 'gini', 'max_depth': 3, 'max_features':
Out-of-Bag Error 9, 'n_estimators': 150} ✓
Importancia de los Modelo: {'criterion': 'gini', 'max_depth': 3, 'max_features':
 Ejemplo regresión 7, 'n_estimators': 150} ✓
Librerías Modelo: {'criterion': 'gini', 'max_depth': 10, 'max_feature
Datos s': 7, 'n_estimators': 150} ✓
Ajuste del modelo Modelo: {'criterion': 'gini', 'max_depth': 20, 'max_feature
s': 9, 'n_estimators': 150} ✓
Predicción y evalua
Modelo: {'criterion': 'gini', 'max_depth': 20, 'max_feature
 Optimización de hi
s': 7, 'n_estimators': 150} ✓
Número de árbo Modelo: {'criterion': 'gini', 'max_depth': 10, 'max_feature
Max features s': 9, 'n_estimators': 150} ✓
 Grid search Modelo: {'criterion': 'gini', 'max_depth': 20, 'max_feature
Grid Search bas s': 5, 'n_estimators': 150} ✓
Grid Search bas Modelo: {'criterion': 'entropy', 'max_depth': None, 'max_feat
 Importancia de pre ures': 5, 'n_estimators': 150} ✓
Importancia por Modelo: {'criterion': 'entropy', 'max_depth': None, 'max_feat
Importancia por ures': 7, 'n_estimators': 150} ✓
 Ejemplo clasificación Modelo: {'criterion': 'entropy', 'max_depth': None, 'max_feat
ures': 9, 'n_estimators': 150} ✓
Librerías
Modelo: {'criterion': 'entropy', 'max_depth': 3, 'max_feature
Datos
s': 5, 'n_estimators': 150} ✓
 Ajuste del modelo y Modelo: {'criterion': 'entropy', 'max_depth': 10, 'max_featur
Grid Search bas es': 5, 'n_estimators': 150} ✓
Grid Search bas Modelo: {'criterion': 'entropy', 'max_depth': 10, 'max_featur
Predicción y evalua es': 7, 'n_estimators': 150} ✓
Predicción de prob Modelo: {'criterion': 'entropy', 'max_depth': 3, 'max_feature
 Importancia de pre s': 9, 'n_estimators': 150} ✓
Importancia por Modelo: {'criterion': 'entropy', 'max_depth': 3, 'max_feature
Importancia por s': 7, 'n_estimators': 150} ✓
Extrapolación con mo
Modelo: {'criterion': 'entropy', 'max_depth': 10, 'max_featur
es': 9, 'n_estimators': 150} ✓
Variables dummy (on
Modelo: {'criterion': 'entropy', 'max_depth': 20, 'max_featur
Extremely randomize
es': 5, 'n_estimators': 150} ✓
Comparación Random Modelo: {'criterion': 'entropy', 'max_depth': 20, 'max_featur
Bibliografía es': 7, 'n_estimators': 150} ✓
Modelo: {'criterion': 'entropy', 'max_depth': 20, 'max_featur
es': 9, 'n_estimators': 150} ✓

Out[92]:
oob_accuracy criterion max_depth max_features n_estimators

18 0.836667 entropy 10.0 5 150

0 0.830000 gini NaN 5 150

9 0.830000 gini 20.0 5 150

21 0.826667 entropy 20.0 5 150

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 53/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [93]: # Mejores hiperparámetros por out-of-bag error


# ========================================================
contenidos  ======================
 print("--------------------------------------------------
Introducción ")
 Random Forest print("Mejores hiperparámetros encontrados (oob-accurac
Métodos de ensem y)")
Bagging print("--------------------------------------------------
Entrenamiento de R ")
print(resultados.iloc[0,0], ":", resultados.iloc[0,:]['oob
Predicción de Rand
_accuracy'], "accuracy")
Out-of-Bag Error
Importancia de los --------------------------------------------------
 Ejemplo regresión Mejores hiperparámetros encontrados (oob-accuracy)
Librerías --------------------------------------------------
Datos 0.8366666666666667 : 0.8366666666666667 accuracy
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo Grid Search basado en validación cruzada
Max features
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 54/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [94]: # Grid de hiperparámetros evaluados


# ========================================================
contenidos  ======================
 param_grid = {'n_estimators': [150],
Introducción 'max_features': [5, 7, 9],
 Random Forest 'max_depth' : [None, 3, 10, 20],
Métodos de ensem 'criterion' : ['gini', 'entropy']
Bagging }
Entrenamiento de R
# Búsqueda por grid search con validación cruzada
Predicción de Rand
# ========================================================
Out-of-Bag Error
======================
Importancia de los grid = GridSearchCV(
 Ejemplo regresión estimator = RandomForestClassifier(random_state =
Librerías 123),
Datos param_grid = param_grid,
Ajuste del modelo scoring = 'accuracy',
Predicción y evalua n_jobs = multiprocessing.cpu_count() - 1,
 Optimización de hi cv = RepeatedKFold(n_splits=5, n_repeats=
Número de árbo 3, random_state=123),
Max features refit = True,
verbose = 0,
 Grid search
return_train_score = True
Grid Search bas
)
Grid Search bas
 Importancia de pre grid.fit(X = X_train_prep, y = y_train)
Importancia por
Importancia por # Resultados
 Ejemplo clasificación # ========================================================
Librerías ======================
Datos resultados = pd.DataFrame(grid.cv_results_)
 Ajuste del modelo y resultados.filter(regex = '(param*|mean_t|std_t)') \
.drop(columns = 'params') \
Grid Search bas
.sort_values('mean_test_score', ascending = False) \
Grid Search bas
.head(4)
Predicción y evalua
Predicción de prob Out[94]:
 Importancia de pre param_criterion param_max_depth param_max_features param_n_estimat
Importancia por
12 entropy None 5
Importancia por
Extrapolación con mo 21 entropy 20 5
Variables dummy (on 9 gini 20 5
Extremely randomize
0 gini None 5
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 55/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [95]: # Mejores hiperparámetros por validación cruzada


# ========================================================
contenidos  ======================
 print("----------------------------------------")
Introducción print("Mejores hiperparámetros encontrados (cv)")
 Random Forest print("----------------------------------------")
Métodos de ensem print(grid.best_params_, ":", grid.best_score_, grid.scori
Bagging ng)
Entrenamiento de R
----------------------------------------
Predicción de Rand Mejores hiperparámetros encontrados (cv)
Out-of-Bag Error ----------------------------------------
Importancia de los {'criterion': 'entropy', 'max_depth': None, 'max_features':
 Ejemplo regresión 5, 'n_estimators': 150} : 0.8133333333333334 accuracy
Librerías
Datos
Ajuste del modelo Una vez identificados los mejores hiperparámetros, se reentrena el modelo
Predicción y evalua
 Optimización de hi
indicando los valores óptimos en sus argumentos. Si en el
Número de árbo GridSearchCV() se indica refit=True , este reentrenamiento se hace
Max features automáticamente y el modelo resultante se encuentra almacenado en
 Grid search
.best_estimator_ .
Grid Search bas
Grid Search bas
 Importancia de pre
In [96]: modelo_final = grid.best_estimator_
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos Predicción y evaluación del modelo
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua Por último, se evalúa la capacidad predictiva del modelo final empleando el
Predicción de prob
conjunto de test.
 Importancia de pre
Importancia por
Importancia por
In [97]: # Error de test del modelo final
Extrapolación con mo
# ========================================================
Variables dummy (on ======================
Extremely randomize predicciones = modelo_final.predict(X = X_test_prep)
Comparación Random predicciones[:10]
Bibliografía
Out[97]: array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1])

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 56/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [98]: mat_confusion = confusion_matrix(


y_true = y_test,
contenidos  y_pred = predicciones
 )
Introducción
 Random Forest accuracy = accuracy_score(
Métodos de ensem y_true = y_test,
Bagging y_pred = predicciones,
Entrenamiento de R normalize = True
)
Predicción de Rand
Out-of-Bag Error
print("Matriz de confusión")
Importancia de los print("-------------------")
 Ejemplo regresión print(mat_confusion)
Librerías print("")
Datos print(f"El accuracy de test es: {100 * accuracy} %")
Ajuste del modelo
Predicción y evalua Matriz de confusión
 Optimización de hi
-------------------
[[33 17]
Número de árbo
[ 5 45]]
Max features
 Grid search El accuracy de test es: 78.0 %
Grid Search bas
Grid Search bas
In [99]: print(
 Importancia de pre
classification_report(
Importancia por
y_true = y_test,
Importancia por y_pred = predicciones
 Ejemplo clasificación )
Librerías )
Datos
 Ajuste del modelo y precision recall f1-score support
Grid Search bas
0 0.87 0.66 0.75 50
Grid Search bas
1 0.73 0.90 0.80 50
Predicción y evalua
Predicción de prob accuracy 0.78 100
 Importancia de pre macro avg 0.80 0.78 0.78 100
Importancia por weighted avg 0.80 0.78 0.78 100
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize Tras optimizar los hiperparámetros, se consigue un porcentaje de acierto
Comparación Random
Bibliografía
del 78%.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 57/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 

Predicción de probabilidades
Introducción
 Random Forest
Métodos de ensem
Bagging La mayoría de implementaciones de Random Forest, entre ellas la de
Entrenamiento de R scikit-learn, permiten predecir probabilidades cuando se trata de
Predicción de Rand problemas de clasificación. Es importante entender cómo se calculan estos
Out-of-Bag Error
Importancia de los
valores para interpretarlos y utilizarlos correctamente.
 Ejemplo regresión
Librerías En el ejemplo anterior, al aplicar .predict() se devuelve 1 (ventas
Datos elevadas) o 0 (ventas bajas) para cada observación de test. Sin embargo,
Ajuste del modelo
no se dispone de ningún tipo de información sobre la seguridad con la que
Predicción y evalua
 Optimización de hi el modelo realiza esta asignación. Con .predict_proba() , en lugar de
Número de árbo una clasificación, se obtiene la probabilidad con la que el modelo considera
Max features que cada observación puede pertenecer a cada una de las clases.
 Grid search
Grid Search bas
Grid Search bas In [100]: # Predicción de probabilidades
 Importancia de pre # ========================================================
Importancia por ======================
Importancia por predicciones = modelo_final.predict_proba(X = X_test_prep)
 Ejemplo clasificación predicciones[:5, :]
Librerías
Out[100]: array([[0.76666667, 0.23333333],
Datos
[0.66 , 0.34 ],
 Ajuste del modelo y
[0.89333333, 0.10666667],
Grid Search bas [0.73333333, 0.26666667],
Grid Search bas [0.72666667, 0.27333333]])
Predicción y evalua
Predicción de prob
 Importancia de pre
El resultado de .predict_proba() es un array con una fila por
Importancia por
Importancia por observación y tantas columnas como clases tenga la variable respuesta. El
Extrapolación con mo valor de la primera columna se corresponde con la probabilidad, acorde al
Variables dummy (on
modelo, de que la observación pertenezca a la clase 0, y así
Extremely randomize
Comparación Random sucesivamente. El valor de probabilidad mostrado para cada predicción se
Bibliografía corresponde con la fracción de observaciones de cada clase en los nodos
terminales a los que ha llegado la observación predicha en el conjunto de
los árboles.

Por defecto, .predict() asigna cada nueva observación a la clase con


mayor probabilidad (en caso de empate se asigna de forma aleatoria). Sin
embargo, este no tiene por qué ser el comportamiento deseado en todos
los casos.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 58/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [101]: # Clasificación empleando la clase de mayor probabilidad


# ========================================================
contenidos  ======================
 df_predicciones = pd.DataFrame(data=predicciones, columns=
Introducción ['0', '1'])
 Random Forest df_predicciones['clasificacion_default_0.5'] = np.where(df
Métodos de ensem _predicciones['0'] > df_predicciones['1'], 0, 1)
Bagging df_predicciones.head(3)
Entrenamiento de R Out[101]:
Predicción de Rand 0 1 clasificacion_default_0.5
Out-of-Bag Error
0 0.766667 0.233333 0
Importancia de los
 Ejemplo regresión 1 0.660000 0.340000 0
Librerías
2 0.893333 0.106667 0
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi Supóngase el siguiente escenario: la campaña de navidad se aproxima y
Número de árbo los propietarios de la cadena quieren duplicar el stock de artículos en
Max features
aquellas tiendas de las que se preve que tengan ventas elevadas. Como el
 Grid search
Grid Search bas transporte de este material hasta las tiendas supone un coste elevado, el
Grid Search bas director quiere limitar esta estrategia únicamente a tiendas para las que se
 Importancia de pre tenga mucha seguridad de que van conseguir muchas ventas.
Importancia por
Importancia por
 Ejemplo clasificación
Si se dispone de las probabilidades, se puede establecer un punto de corte
Librerías concreto, por ejemplo, considerando únicamente como clase 1 (ventas
Datos altas) aquellas tiendas cuya predicción para esta clase sea superior al 0.9
 Ajuste del modelo y
(90%). De esta forma, la clasificación final se ajusta mejor a las
Grid Search bas
Grid Search bas necesidades del caso de uso.
Predicción y evalua
Predicción de prob
 Importancia de pre In [102]: # Clasificación final empleando un threshold de 0.8 para l
Importancia por a clase 1.
# ========================================================
Importancia por
======================
Extrapolación con mo
df_predicciones['clasificacion_custom_0.8'] = np.where(df_
Variables dummy (on predicciones['1'] > 0.9, 1, 0)
Extremely randomize df_predicciones.iloc[4:10, :]
Comparación Random
Bibliografía Out[102]:
0 1 clasificacion_default_0.5 clasificacion_custom_0.8

4 0.726667 0.273333 0 0

5 0.613333 0.386667 0 0

6 0.180000 0.820000 1 0

7 0.366667 0.633333 1 0

8 0.140000 0.860000 1 0

9 0.246667 0.753333 1 0

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 59/72
3/31/23, 10:39 AM Random Forest python

Tabla de
¿Hasta que punto se debe de confiar en estas probabilidades?
contenidos 

Es muy importante tener en cuenta la diferencia entre la "visión" que tiene
Introducción
 Random Forest el modelo del mundo y el mundo real. Todo lo que sabe un modelo sobre el
Métodos de ensem mundo real es lo que ha podido aprender de los datos de entrenamiento y,
Bagging por lo tanto, tiene una "visión" limitada. Por ejemplo, supóngase que, en los
Entrenamiento de R
Predicción de Rand
datos de entrenamiento, todas las tiendas que están en zona urbana
Out-of-Bag Error Urban='Yes' tienen ventas altas independientemente del valor que tomen
Importancia de los el resto de predictores. Cuando el modelo trate de predecir una nueva
 Ejemplo regresión
Librerías
observación, si esta está en zona urbana, clasificará a la tienda como
Datos ventas elevadas con un 100% de seguridad. Sin embargo, esto no significa
Ajuste del modelo que sea inequivocamente cierto, podría haber tiendas en zonas úrbanas
Predicción y evalua
que no tienen ventas elevadas pero, al no estar presentes en los datos de
 Optimización de hi
Número de árbo entrenamiento, el modelo no contempla esta posibilidad.
Max features
 Grid search Teniendo en cuenta todo esto, hay que considerar las probabilidades
Grid Search bas generadas por el modelo como la seguridad que tiene este, desde su
Grid Search bas
visión limitada, al realizar las predicciones. Puede encontrase más
 Importancia de pre
Importancia por información sobre cómo sacar máximo partido de las probabilidades
Importancia por predichas por un modelo en Calibrar modelos de machine learning
 Ejemplo clasificación
(https://www.cienciadedatos.net/documentos/py11-calibrar-modelos-
Librerías
Datos machine-learning.html).
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob Importancia de predictores
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Importancia por pureza de nodos
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 60/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [103]: importancia_predictores = pd.DataFrame(


{'predictor': X_train_prep.col
contenidos  umns,
 'importancia': modelo_final.f
Introducción eature_importances_}
 Random Forest )
Métodos de ensem print("Importancia de los predictores en el modelo")
Bagging print("-------------------------------------------")
Entrenamiento de R importancia_predictores.sort_values('importancia', ascendi
ng=False)
Predicción de Rand
Out-of-Bag Error Importancia de los predictores en el modelo
Importancia de los -------------------------------------------
 Ejemplo regresión
Librerías Out[103]:
predictor importancia
Datos
Ajuste del modelo 11 Urban_Yes 0.219679
Predicción y evalua
7 ShelveLoc_Bad 0.111232
 Optimización de hi
Número de árbo 9 ShelveLoc_Medium 0.106916
Max features 8 ShelveLoc_Good 0.099889
 Grid search
12 US_No 0.096100
Grid Search bas
Grid Search bas 1 Income 0.084913
 Importancia de pre
10 Urban_No 0.072726
Importancia por
Importancia por 13 US_Yes 0.059191
 Ejemplo clasificación 0 CompPrice 0.058568
Librerías
2 Advertising 0.032489
Datos
 Ajuste del modelo y 6 Education 0.020168
Grid Search bas
5 Age 0.018286
Grid Search bas
Predicción y evalua 3 Population 0.009937
Predicción de prob 4 Price 0.009907
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on Importancia por permutación
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 61/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [104]: importancia = permutation_importance(


estimator = modelo_final,
contenidos  X = X_train_prep,
 y = y_train,
Introducción n_repeats = 5,
 Random Forest scoring = 'neg_root_mean_squared_erro
Métodos de ensem r',
Bagging n_jobs = multiprocessing.cpu_count()
Entrenamiento de R - 1,
random_state = 123
Predicción de Rand
)
Out-of-Bag Error
Importancia de los # Se almacenan los resultados (media y desviación) en un d
 Ejemplo regresión ataframe
Librerías df_importancia = pd.DataFrame(
Datos {k: importancia[k] for k in ['importan
Ajuste del modelo ces_mean', 'importances_std']}
Predicción y evalua )
 Optimización de hi df_importancia['feature'] = X_train_prep.columns
Número de árbo df_importancia.sort_values('importances_mean', ascending=F
Max features alse)
 Grid search Out[104]:
Grid Search bas importances_mean importances_std feature
Grid Search bas
11 0.439768 0.024587 Urban_Yes
 Importancia de pre
Importancia por 1 0.327452 0.010432 Income
Importancia por 9 0.274399 0.006215 ShelveLoc_Medium
 Ejemplo clasificación
Librerías 7 0.236453 0.027506 ShelveLoc_Bad
Datos 0 0.232464 0.025045 CompPrice
 Ajuste del modelo y
12 0.174126 0.018625 US_No
Grid Search bas
Grid Search bas 8 0.142675 0.017623 ShelveLoc_Good
Predicción y evalua 10 0.067301 0.011716 Urban_No
Predicción de prob
 Importancia de pre 2 0.046188 0.023094 Advertising
Importancia por 13 0.044207 0.037136 US_Yes
Importancia por
3 0.000000 0.000000 Population
Extrapolación con mo
Variables dummy (on 4 0.000000 0.000000 Price
Extremely randomize 5 0.000000 0.000000 Age
Comparación Random
Bibliografía 6 0.000000 0.000000 Education

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 62/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [105]: # Gráfico


fig, ax = plt.subplots(figsize=(5, 6))
contenidos  df_importancia = df_importancia.sort_values('importances_m
 ean', ascending=True)
Introducción ax.barh(
 Random Forest df_importancia['feature'],
Métodos de ensem df_importancia['importances_mean'],
Bagging xerr=df_importancia['importances_std'],
Entrenamiento de R align='center',
alpha=0
Predicción de Rand
)
Out-of-Bag Error
ax.plot(
Importancia de los df_importancia['importances_mean'],
 Ejemplo regresión df_importancia['feature'],
Librerías marker="D",
Datos linestyle="",
Ajuste del modelo alpha=0.8,
Predicción y evalua color="r"
 Optimización de hi )
Número de árbo ax.set_title('Importancia de los predictores (train)')
Max features ax.set_xlabel('Incremento del error tras la permutación');
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

Ambas estrategias identifican Urban , Income y ShelveLoc como los


predictores más influyentes, acorde a los datos de entrenamiento.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 63/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 
 Extrapolación con modelos
Introducción
 Random Forest Random Forest
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand Una límitación importante de los árboles de regresióna, y por lo tanto de
Out-of-Bag Error
Random Forest es que no extrapolan fuera del rango de entrenamiento.
Importancia de los
 Ejemplo regresión Cuando se aplica el modelo a una nueva observación, cuyo valor o valores
Librerías de los predictores son superiores o inferiores a los observados en el
Datos
entrenamiento, la predicción siempre es la media del nodo más cercano,
Ajuste del modelo
Predicción y evalua independientemente de cuanto se aleje el valor. Vease el siguiente ejemplo
 Optimización de hi en el que se entrenan dos modelos, un modelo lineal y un arbol de
Número de árbo regresión, y luego se predicen valores de X fuera del rango de
Max features
 Grid search
entrenamiento.
Grid Search bas
Grid Search bas
 Importancia de pre In [106]: import matplotlib.pyplot as plt
import numpy as np
Importancia por
from sklearn.ensemble import RandomForestRegressor
Importancia por
from sklearn.linear_model import LinearRegression
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 64/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [107]: # Datos simulados


# ========================================================
contenidos  ======================
 X = np.linspace(0, 150, 100)
Introducción y = (X + 100) + np.random.normal(loc=0.0, scale=5.0, size=
 Random Forest X.shape)
Métodos de ensem X_train = X[(X>=50) & (X<100)]
Bagging y_train = y[(X>=50) & (X<100)]
Entrenamiento de R X_test_inf = X[X < 50]
y_test_inf = y[X < 50]
Predicción de Rand
X_test_sup = X[X >= 100]
Out-of-Bag Error
y_test_sup = y[X >= 100]
Importancia de los
 Ejemplo regresión fig, ax = plt.subplots(figsize=(7, 5))
Librerías ax.plot(X_train, y_train, c='black', linestyle='dashed', l
Datos abel = "Datos train")
Ajuste del modelo ax.axvspan(50, 100, color='gray', alpha=0.2, lw=0)
Predicción y evalua ax.plot(X_test_inf, y_test_inf, c='blue', linestyle='dashe
 Optimización de hi d', label = "Datos test")
Número de árbo ax.plot(X_test_sup, y_test_sup, c='blue', linestyle='dashe
Max features d')
ax.set_title("Datos de entrenamiento y test")
 Grid search
plt.legend();
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 65/72
3/31/23, 10:39 AM Random Forest python

Tabla de In [108]: # Modelo lineal


modelo_lineal = LinearRegression()
contenidos  modelo_lineal.fit(X_train.reshape(-1, 1), y_train)

Introducción # Modelo random forest
 Random Forest modelo_rf = RandomForestRegressor()
Métodos de ensem modelo_rf.fit(X_train.reshape(-1, 1), y_train)
Bagging
Entrenamiento de R # Predicciones
prediccion_lineal = modelo_lineal.predict(X.reshape(-1,
Predicción de Rand
1))
Out-of-Bag Error
prediccion_rf = modelo_rf.predict(X.reshape(-1, 1))
Importancia de los
 Ejemplo regresión fig, ax = plt.subplots(figsize=(7, 5))
Librerías ax.plot(X_train, y_train, c='black', linestyle='dashed', l
Datos abel = "Datos train")
Ajuste del modelo ax.axvspan(50, 100, color='gray', alpha=0.2, lw=0)
Predicción y evalua ax.plot(X_test_inf, y_test_inf, c='blue', linestyle='dashe
 Optimización de hi d', label = "Datos test")
Número de árbo ax.plot(X_test_sup, y_test_sup, c='blue', linestyle='dashe
Max features d')
ax.plot(X, prediccion_lineal, c='firebrick',
 Grid search
label = "Prediccion modelo lineal")
Grid Search bas
ax.plot(X, prediccion_rf, c='orange',
Grid Search bas label = "Prediccion modelo rf")
 Importancia de pre ax.set_title("Extrapolación de un modelo lineal y un model
Importancia por o de random forest")
Importancia por plt.legend();
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

La gráfica muestra que, con el modelo Random Forest, el valor predicho


fuera del rango de entrenamiento, es el mismo independientemente de
cuanto se aleje X. Una estrategia que permite que los modelos basados en
árboles extrapolen es ajustar un modelo lineal en cada nodo terminal, pero
esto no está disponible en Scikit-learn.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 66/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 
 Variables dummy (one-hot-
Introducción
 Random Forest encoding) en modelos Random
Métodos de ensem
Bagging Forest
Entrenamiento de R
Predicción de Rand
Out-of-Bag Error
Importancia de los Los modelos basados en árboles de decisión, entre ellos Random Forest,
 Ejemplo regresión
son capaces de utilizar predictores categóricos en su forma natural sin
Librerías
Datos necesidad de convertirlos en variables dummy mediante one-hot-encoding.
Ajuste del modelo Sin embargo, en la práctica, depende de la implementación que tenga la
Predicción y evalua librería o software utilizado. Esto tiene impacto directo en la estructura de
 Optimización de hi
Número de árbo
los árboles generados y, en consecuencia, en los resultados predictivos del
Max features modelo y en la importancia calculada para los predictores.
 Grid search
Grid Search bas El libro Feature Engineering and Selection A Practical Approach for
Grid Search bas
Predictive Models By Max Kuhn, Kjell Johnson
 Importancia de pre
Importancia por (http://www.feat.engineering/categorical-trees.html), los autores realizan un
Importancia por experimento en el que se comparan modelos entrenados con y sin one-hot-
 Ejemplo clasificación encoding en 5 sets de datos distintos, los resultados muestran que:
Librerías
Datos
No hay una diferencia clara en términos de capacidad predictiva de los
 Ajuste del modelo y
Grid Search bas
modelos. Solo en el caso de stocastic gradient boosting se apecian
Grid Search bas ligeras diferencias en contra de aplicar one-hot-encoding.
Predicción y evalua
Predicción de prob El entrenamiento de los modelos tarda en promedio 2.5 veces más
 Importancia de pre cuando se aplica one-hot-encoding. Esto es debido al aumento de
Importancia por
dimensionalidad al crear las nuevas variables dummy, obligando a que
Importancia por
Extrapolación con mo el algoritmo tenga que analizar muchos más puntos de división.
Variables dummy (on
Extremely randomize En base a los resultados obtenidos, los autores recomiendan no aplicar
Comparación Random one-hot-encoding. Solo si los resultados son buenos, probar entonces si se
Bibliografía
mejoran al crear las variables dummy.

Otra comparación detallada puede encontrarse en Are categorical variables


getting lost in your random forests? By Nick Dingwall, Chris Potts
(https://roamanalytics.com/2016/10/28/are-categorical-variables-getting-
lost-in-your-random-
forests/#:~:text=TL%3BDR%20Decision%20tree%20models,seriously%20de
donde los resultados muestran que:

Al convertir una variable categórica en múltiples variables dummy su


importancia queda diluida, dificultando que el modelo pueda aprender
de ella y perdiendo así capacidad predictiva. Este efecto es mayor
https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 67/72
3/31/23, 10:39 AM Random Forest python

cuantos más niveles tiene la variable original.


Tabla de
Al diluir la importancia de los predictores categóricos, estos tienen
contenidos 
menos probabilidad de ser seleccionada por el modelo, lo que

Introducción desvirtúa las métricas que miden la importancia de los predictores.
 Random Forest
Métodos de ensem Por el momento, en scikit-learn es necesario hacer one-hot-encoding para
Bagging convertir las variables categóricas en variables dummy. La implementación
Entrenamiento de R
Predicción de Rand
de H2O
Out-of-Bag Error (https://www.cienciadedatos.net/documentos/py04_machine_learning_con_h2
Importancia de los sí permite utilizar directamente variables categóricas.
 Ejemplo regresión
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Extremely randomized trees
Grid Search bas
Grid Search bas
 Importancia de pre
El algoritmo extremely randomized trees lleva la decorrelación de los
Importancia por
Importancia por árboles un paso más allá que random forest. Al igual que en random forest,
 Ejemplo clasificación en cada división de los nodos, solo se evalúa un subconjunto aleatorio de
Librerías
los predictores disponibles. Además de esto, en extremely randomized
Datos
 Ajuste del modelo y trees, dentro de cada predictor seleccionado solo se evalúa un subconjunto
Grid Search bas aleatorio de los posibles puntos de corte. En determinados escenarios,
Grid Search bas este método consigue reducir un poco más la varianza mejorando la
Predicción y evalua
Predicción de prob
capacidad predictiva del modelo.
 Importancia de pre
Importancia por Puede encontrase este algoritmo en la case ExtraTrees de scikit-learn o
Importancia por en H2ORandomForestEstimator de H2O (indicando el argumento
Extrapolación con mo
histogram_type="Random" ).
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 68/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 
 Comparación Random Forest y
Introducción
 Random Forest Gradient Boosting Trees
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand Random Forest se compara con frecuencia con otro algoritmo basado en
Out-of-Bag Error
árboles, Gradient Boosting Trees. Ambos métodos son muy potentes y la
Importancia de los
 Ejemplo regresión superioridad de uno u otro depende del problema al que se apliquen.
Librerías Algunos aspectos a tener en cuenta son:
Datos
Ajuste del modelo Gracias al out-of-bag error, el método de Random Forest no necesita
Predicción y evalua
recurrir a validación cruzada para la optimización de sus
 Optimización de hi
Número de árbo hiperparámetros. Esto puede ser una ventaja muy importante cuando
Max features los requerimientos computacionales son limitantes. Esta característica
 Grid search
también está presente en Stochastic Gradient Boosting pero no en
Grid Search bas
Grid Search bas AdaBoost y Gradient Boosting.
 Importancia de pre
Importancia por
Random forest tiene menos hiperparámetros, lo que hace más sencillo
Importancia por su correcta implementación.
 Ejemplo clasificación
Librerías Si existe una proporción alta de predictores irrelevantes, Random
Datos Forest puede verse perjudicado, sobre todo a medida que se reduce el
 Ajuste del modelo y
número de predictores (m ) evaluados. Supóngase que, de 100
Grid Search bas
Grid Search bas predictores, 90 de ellos no aportan información (son ruidos). Si el
Predicción y evalua hiperparámetro m es igual a 3 (en cada división se evalúan 3
Predicción de prob
predictores aleatorios), es muy probable que los 3 predictores
 Importancia de pre
Importancia por seleccionados sean de los que no aportan nada. Aun así, el algoritmo
Importancia por seleccionará el mejor de ellos, incorporándolo al modelo. Cuanto mayor
Extrapolación con mo sea el porcentaje de predictores no relevantes, mayor la frecuencia con
Variables dummy (on
la que esto ocurre, por lo que los árboles que forman el Random Forest
Extremely randomize
Comparación Random contendrán predictores irrelevantes. Como consecuencia, se reduce su
Bibliografía capacidad predictiva. En el caso de Gradient Boosting Trees, siempre
se evalúan todos los predictores, por lo que los no relevantes se
ignoran.

En Random Forest, cada modelo que forma el ensemble es


independiente del resto, esto permite que el entrenamiento sea
paralelizable.

Random Forest no sufre problemas de overfitting por muchos árboles


que se agreguen.

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 69/72
3/31/23, 10:39 AM Random Forest python

Si se realiza una buena optimización de hiperparámetros, Gradient


Tabla de
Boosting Trees suele obtener resultados ligeramente superiores.
contenidos 

Introducción
 Random Forest
Métodos de ensem
Bagging
Entrenamiento de R
Predicción de Rand
Out-of-Bag Error
Importancia de los
 Ejemplo regresión
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
Número de árbo
Max features
 Grid search
Grid Search bas
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
Importancia por
Importancia por
Extrapolación con mo
Variables dummy (on
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 70/72
3/31/23, 10:39 AM Random Forest python

Tabla de
contenidos 
 Bibliografía
Introducción
 Random Forest
Métodos de ensem
Bagging Introduction to Machine Learning with Python: A Guide for Data Scientists
Entrenamiento de R
Predicción de Rand libro
Out-of-Bag Error (https://www.amazon.es/gp/product/1449369413/ref=as_li_qf_asin_il_tl?
Importancia de los
ie=UTF8&tag=cienciadedato-
 Ejemplo regresión
Librerías 21&creative=24630&linkCode=as2&creativeASIN=1449369413&linkId=e07f89
Datos
Ajuste del modelo An Introduction to Statistical Learning: with Applications in R (Springer Texts
Predicción y evalua in Statistics) libro
 Optimización de hi
Número de árbo (https://www.amazon.es/gp/product/1461471370/ref=as_li_tl?
Max features ie=UTF8&camp=3638&creative=24630&creativeASIN=1461471370&linkCode
 Grid search
21&linkId=64752a80078f4f017e81874b8cb355b7)
Grid Search bas
Grid Search bas
Applied Predictive Modeling by Max Kuhn and Kjell Johnson libro
 Importancia de pre
Importancia por (https://www.amazon.es/gp/product/1461468485/ref=as_li_qf_asin_il_tl?
Importancia por ie=UTF8&tag=cienciadedato-
 Ejemplo clasificación
Librerías
21&creative=24630&linkCode=as2&creativeASIN=1461468485&linkId=f014c4
Datos
 Ajuste del modelo y The Elements of Statistical Learning by T.Hastie, R.Tibshirani, J.Friedman
Grid Search bas libro
Grid Search bas
(https://www.amazon.es/gp/product/B00M0R6ZJG/ref=as_li_qf_asin_il_tl?
Predicción y evalua
Predicción de prob ie=UTF8&tag=cienciadedato-
 Importancia de pre 21&creative=24630&linkCode=as2&creativeASIN=B00M0R6ZJG&linkId=7d71
Importancia por
Importancia por
Bradley Efron and Trevor Hastie. 2016. Computer Age Statistical Inference:
Extrapolación con mo
Variables dummy (on Algorithms, Evidence, and Data Science (1st. ed.). Cambridge University
Extremely randomize Press, USA.
Comparación Random
Bibliografía Chen, Tianqi & Guestrin, Carlos. (2016). XGBoost: A Scalable Tree
Boosting System. 785-794. [DOI: 10.1145/2939672.2939785]
(http://dmlc.cs.washington.edu/data/pdf/XGBoostArxiv.pdf)

Scikit-learn: Machine Learning in Python, Pedregosa et al., JMLR 12, pp.


2825-2830, 2011.

API design for machine learning software: experiences from the scikit-learn
project, Buitinck et al., 2013.

scikit-learn.org/stable/modules/tree (https://scikit-
learn.org/stable/modules/tree)
https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 71/72
3/31/23, 10:39 AM Random Forest python

scikit-learn.org/stable/modules/ensemble (https://scikit-
Tabla de
learn.org/stable/modules/ensemble.html#forests-of-randomized-trees)
contenidos 

Introducción
 Random Forest
Métodos de ensem
Bagging ¿Cómo citar este documento?
Entrenamiento de R
Predicción de Rand
Random Forest con Python by Joaquín Amat Rodrigo, available under a
Out-of-Bag Error
Importancia de los Attribution 4.0 International (CC BY 4.0) at
 Ejemplo regresión https://www.cienciadedatos.net/documentos/py08_random_forest_python.htm
Librerías
Datos
Ajuste del modelo
Predicción y evalua
 Optimización de hi
¿Te ha gustado el artículo? Tu ayuda es importante
Número de árbo
Max features Mantener un sitio web tiene unos costes elevados, tu contribución me
 Grid search ayudará a seguir generando contenido divulgativo gratuito. ¡Muchísimas
Grid Search bas
gracias! 😊
Grid Search bas
 Importancia de pre
Importancia por
Importancia por
 Ejemplo clasificación
Librerías
Datos
 Ajuste del modelo y
Grid Search bas
Grid Search bas
Predicción y evalua
Predicción de prob
 Importancia de pre
(http://creativecommons.org/licenses/by/4.0/)
Importancia por
Importancia por This work by Joaquín Amat Rodrigo is licensed under a Creative Commons
Extrapolación con mo Attribution 4.0 International License
Variables dummy (on
(http://creativecommons.org/licenses/by/4.0/).
Extremely randomize
Comparación Random
Bibliografía

https://www.cienciadedatos.net/documentos/py08_random_forest_python.html#:~:text=Un modelo Random Forest está formado por un conjunto (e… 72/72

También podría gustarte