Bosques aleatorios
Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 41 de 58.
Un árbol de decisión es inestable: cambia unas cuantas filas de entrenamiento y cambian sus preguntas. Este capítulo estabiliza los árboles preguntando a muchos de ellos.
Un bosque aleatorio entrena muchos árboles y les permite votar. Aquí, siete árboles responden por un géiser:
En el código, es un modelo más que ajustar:
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
print(forest.score(X_test, y_test))En 300 días de géiser, esto imprime 0.893, mientras que un árbol obtuvo una puntuación de 0.813. n_estimators es el número de árboles.
Muchos votantes, menos errores.
Desafío
IntermedioUna escuela de perros guía quiere saber pronto qué cachorros llegarán a ser aptos. El código inicial divide puppies.csv, evalúa un árbol y lee un número de árboles.
- Entrena un bosque con esa cantidad de árboles (
random_state=0) e imprime su precisión en el conjunto de prueba. - Imprime qué modelo gana y por cuánto, o
A tie.
Para otra escuela y 50:
Single tree: 0.740
Forest: 0.860
The forest wins by 0.120Después prueba con 1: un bosque de un solo árbol tiene un rendimiento sorprendentemente malo. La siguiente lección explica por qué.
Pruébalo tú mismo
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
# Cachorros de una escuela de perros guía: calma, concentración y reacción de sobresalto ante ruidos fuertes (1 a 10),
# peso, meses con su familia de acogida y si están capacitados para ser perros guía (1) o no (0)
puppies = pd.read_csv("puppies.csv")
X = puppies[["calmness", "focus", "noise_startle", "weight_kg", "months_with_family"]]
y = puppies["qualified"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
trees = int(input())
# No cambies las líneas siguientes: hay que superar a un solo árbol
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)
tree_acc = tree.score(X_test, y_test)
print(f"Single tree: {tree_acc:.3f}")
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje supervisado
1Tu primer modelo
Aprender de ejemplosConjuntos de entrenamiento y pruebaAjustar y predecirEvaluar un modeloRepaso: clasificador de semillas4Regresión logística
Predicciones de sí o noEl umbral de decisiónLos pesos como evidenciaVarias clasesRepaso: filtro de spam2Vecinos más cercanos
Cómo decide k-NNCómo elegir kFronteras de decisiónEscalado para los vecinosRepaso: vecinos del vino5Medición de clasificadores
La matriz de confusiónPrecisión y exhaustividadLa puntuación F1Clases desequilibradasCurvas ROCRepaso: prueba de detección8Validación cruzada
Validación K-FoldComparación justa de modelosBúsqueda en cuadrículaRepaso: reparaciones de monopatines11Proyecto: especies de pingüinos
Conoce a los pingüinosPrepara los datosElige un modeloAjusta el modelo ganadorPublica el modelo3Regresión lineal
Predicción de númerosVarias característicasMedición de erroresGráficos de residuosRepaso: alquiler de bicicletas6Árboles de decisión
Los árboles hacen preguntasLeer un árbolProfundidad del árbolImportancia de las característicasRepaso: decisiones de préstamos9Métodos de conjunto
Bosques aleatoriosPor qué funcionan los bosquesAumento de gradienteRepaso: guardabosquesPractica por tu cuenta: Compilador de Python online