Menu
CoddyTech

Boosting de gradiente

Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 43 de 58.

Uma floresta faz suas árvores crescerem lado a lado. O gradient boosting as faz crescer uma após a outra: cada nova árvore aprende o que as árvores anteriores ainda erram.

Aqui, ele se ajusta às vendas de uma loja de smoothies, árvore por árvore:

Pontos cinza para 40 dias de vendas de smoothies em relação à temperatura, subindo de cerca de 20 a 135. Uma linha pontilhada após 1 árvore forma um degrau aproximado e plano, uma linha tracejada após 3 árvores acompanha melhor os pontos, e uma linha contínua após 15 árvores passa pelos pontos

Para classificação, o modelo é 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 define quanto de cada correção manter. Passos pequenos são cuidadosos, por isso precisam de mais árvores.

challenge icon

Desafio

Médio

Um produtor de orquídeas quer saber quais plantas vão florescer. O código inicial divide orchids.csv, avalia uma floresta e lê um número de árvores.

  1. Para cada taxa em rates, treine o boosting com essa quantidade de árvores (random_state=0) e imprima a acurácia no conjunto de teste.
  2. Imprima a melhor taxa. Em caso de empate, mantenha a anterior.

Para outro produtor e 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

Depois, experimente algumas quantidades de árvores: quando o boosting supera a floresta?

Experimente você mesmo

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

# Orquídeas nas prateleiras de um produtor: floresceram este ano (1) ou não (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]

# Não altere as linhas abaixo: a floresta com a qual 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}")

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado supervisionado

Pratique por conta própria: Compilador de Python online