Menu
CoddyTech

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:

Siete árboles pequeños en fila, cada uno con su voto debajo: sí, sí, no, sí, sí, no, sí. Las flechas van desde cada voto hasta una caja que dice Bosque: sí, 5 votos contra 2

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.

challenge icon

Desafío

Intermedio

Una 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.

  1. Entrena un bosque con esa cantidad de árboles (random_state=0) e imprime su precisión en el conjunto de prueba.
  2. 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.120

Despué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
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