Menu
CoddyTech

Aumento de gradiente

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 43 de 58.

Un bosque hace crecer sus árboles uno al lado del otro. El impulso de gradiente los hace crecer uno tras otro: cada árbol nuevo aprende lo que los árboles anteriores siguen haciendo mal.

Aquí se ajusta a las ventas de un puesto de batidos, árbol por árbol:

Puntos grises que muestran las ventas de batidos durante 40 días en función de la temperatura, que aumentan de aproximadamente 20 a 135. Una línea de puntos después de 1 árbol es un escalón aproximado y plano, una línea discontinua después de 3 árboles se ajusta mejor y una línea continua después de 15 árboles pasa por los puntos

Para la clasificación, el modelo es GradientBoostingClassifier:

from sklearn.ensemble import GradientBoostingClassifier

boost = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=0)
boost.fit(X_train, y_train)

learning_rate establece qué proporción de cada corrección se conserva. Los pasos pequeños son cautelosos, por lo que necesitan más árboles.

challenge icon

Desafío

Intermedio

Un cultivador de orquídeas quiere saber qué plantas florecerán. El código inicial divide orchids.csv, evalúa un bosque y lee un número de árboles.

  1. Para cada tasa de rates, entrena el boosting con esa cantidad de árboles (random_state=0) e imprime su precisión de prueba.
  2. Imprime la mejor tasa. En caso de empate, conserva la anterior.

Para otro cultivador y 20:

Forest: 0.860
Boosting at rate 0.01: 0.600
Boosting at rate 0.1: 0.860
Boosting at rate 1.0: 0.900
Best rate for 20 trees: 1.0

Después prueba algunas cantidades de árboles: ¿cuándo supera el boosting al bosque?

Pruébalo tú mismo

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier

# Orquídeas en los estantes de un cultivador: florecieron este año (1) o no (0)
orchids = pd.read_csv("orchids.csv")
X = orchids.drop(columns="bloomed")
y = orchids["bloomed"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
trees = int(input())
rates = [0.01, 0.1, 1.0]

# No cambies las líneas siguientes: el bosque con el que comparar
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
print(f"Forest: {forest.score(X_test, y_test):.3f}")

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online