Exercícios 7
Aula 7
1) Bagging
Para esse exercício, precisaremos de novos dados, dessa vez das eleições municípais de 2000. A base que usaremos indica qual partido venceu, se PMDB/PSDB/PFL ou outros, e variáveis econômicas e demográficas (não se esqueça de remover IDs e nome dos municípios, como cod_mun_ibge
e nome_municipio
; se usar Python
, também não se esqueça de transformar/remover as variáveis uf
e coligacao
):1
1 Dica: se usar árvores de decisão, experimente aumentar o número delas.
library(tidyverse)
<- "https://raw.githubusercontent.com/FLS-6497/datasets/main/aula7/eleicoes2000.csv"
link <- readr::read_csv2(link) %>%
dados select(-cod_mun_ibge, -nome_municipio) %>%
mutate_if(is.character, as.factor)
import pandas as pd
= 'https://raw.githubusercontent.com/FLS-6497/datasets/main/aula7/eleicoes2000.csv'
link = pd.read_csv(link, sep=';', decimal=",").drop(['cod_mun_ibge', 'nome_municipio'], axis=1) dados
a) Exploração
Explore rapidamente a base de dados. Para tanto, você pode criar gráficos com as distribuições do target e de algumas features, com cruzamentos das variáveis ou, ainda, usar correlações. Quais variáveis parecem ter mais relação com o target
partido
?
b) Criação de pipelines com bagging
Usando pipelines, crie um bagging ensemble combinando quantos e quais modelos você quiser e outra pipeline usando Naive Bayes. Treine e compare os resultados destas pipelines.
c) Variações
Agora, crie outros dois bagging ensembles, um deles fazendo subsample dos dados (no mlr3
, isso é controlado pelo argumento frac
no po
com subsample
) e, o outro, utilizando um modelo diferente do que você utilizou na bagg
anterior. Treine e compare os resultados destas novas pipelines.
d) Random forest
Crie uma pipeline agora usando random forest
(fique à vontade para customizar ela como achar melhor) e compare seus resultados com o da melhor pipeline que você encontrou no exercício anterior.
2) Stacking
a) Básico
Adaptando o exemplo dos materiais de aula, crie uma pipeline que use stacking para combinar os resultados de três modelos diferentes. Os modelos de nível 0 podem ter tanto etapas de pré-processamento, modelos ou parâmetros diferentes (e.g., é possível treinar 3 árvores diferentes). Como blender, use um modelo de regressão logística simples (no mlr3
, classif.log_ref
; no sklearn
, LogisticRegression
). Treine e veja os resultados desta pipeline.
b) Ensemble em cima de ensemble
Ao stack anterior, adapte e adicione agora o melhor bagging ensemble que você encontrou no exercício 1. Treine e veja o resultado dessa nova versão.
3) Boosting
Para quem usa R
, neste exercício será necessário converter features categóricas para numeric (o XGboost só aceita variáveis numéricas). Podemos criar uma nova base assim com o seguinte código:
<- as.data.frame(model.matrix(partido ~ ., dados)) %>%
dados2 ::clean_names()
janitor$partido <- dados$partido
dados2
<- as_task_classif(partido ~ ., data = dados) tsk2
a) Gradiente
Treine dois ensembles com boosting, um usando gradient boosting e, o outro, extreme gradient boosting. Compare os resultados.
b) Número de árvores em boosting
Usando extreme boosting, crie três pipelines: uma que treine 10 modelos, outra que treine 100 e, por fim, uma que treine 200. O que acontece com os resultados?
4) Valiação
Usando o melhor ensemble que você encontrou nessa aula, o valide usando estes dados das eleições de 2004 – que foram um pouco diferentes das de 2000 em termos de desempenho dos partidos (lembre-se de que é preciso treinar do zero o melhor modelo nos dados completos de 2000 antes de fazer a validação).2.
2 Para quem usa R
, também é necessário transformas as variáveis categóricas em numéricas, da mesma forma que fizemos com a base principal antes do treino
library(tidyverse)
<- "https://raw.githubusercontent.com/FLS-6497/datasets/main/aula7/eleicoes2004.csv"
link <- readr::read_csv2(link) %>%
dados select(-cod_mun_ibge, -nome_municipio) %>%
mutate_if(is.character, as.factor)
import pandas as pd
= 'https://raw.githubusercontent.com/FLS-6497/datasets/main/aula7/eleicoes2004.csv'
link = pd.read_csv(link, sep=';', decimal=",").drop(['cod_mun_ibge', 'nome_municipio'], axis=1) dados
Bônus
Tente adaptar o uso de algum ensemble que vimos para o Projeto 1
e veja se você consegue melhorar a performance do seu modelo de classificação de discursos presidenciais.