Decision Trees, Random Forests e
Ensemble
Vitor Pohlenz e prof. Edson Cilos Vargas Júnior (supervisão) Universidade Federal de Santa Catarina
Ensemble
Decision Trees
I Aplicações
I Entropia e Coeficiente de Gini I Limitações
Ensemble Learning
I Pasting and Bagging
I Random Patches and Random Subspaces Random Forests I Normal Trees I Extra-Trees Ensemble Boosting I AdaBoost I Gradient Boosting
Muitos dos exemplos foram adaptados dos arquivos disponibilizado no Github por Aurélien Géron.
Os arquivos originais estão disponíveis em: I https://github.com/ageron/handson-ml
Usos
I Podem ser utilizadas para regressão ou classificação
I Não requerem centralização ou escalonamento de atributos I As decisões são facilmente interpretáveis
Exemplo Data set Iris
I Usando apenas 2 features: ”petal length” e ”petal width”
"White box" I Decision Trees
I Regras intuitivas e fáceis de interpretar
I O conjunto de regras pode ser seguido "à mão"
"Black box"
I Randon Forests e Redes Neurais
I É possível checar os cálculos e os parâmetros das predições, porém é difícil explicar estas em termos simples.
I Scikit-Learn usa o algoritmo CART(Classifcation and Regression Tree)
I Produz apenas árvores binárias(2 ramos) de respostas "SIM|NAO" I Existem outros algoritmos, por exemplo o ID3 que produzem
Algoritmo CART
I É um "greedy algorithm"
I Checa apenas a melhor separação em cada level sequencialmente, sem considerar os leveis subjacentes. Explicitado na sua função custo (1).
I Não garante solução ótima mas sim uma solução "razoavelmente boa"
I Solução ótima é intratável devido à complexidade(NP-Complete problem).
Função Custo CART J(k,tk) = mmLGL+mmRGR;
GL/R mede a impureza do subset esquerdo/direito(left/right)
mR/L é o número de instâncias do subset esquerdo/direito(left/right)
k é a feature em questão tk é o limiar(threshold)
m é o número de instâncias (1)
Figura 4: Limiares de decisão do Exemplo. OBS: O último tracejado seria caso
Algoritmo CART
I As predições são feitas rapidamente, pois se checa apenas 1 feature por nó.
I Complexidade: O(log2(m))
I O treinamento se torna mais demorado para grandes data sets. Pois em cada nó é comparado n features para as m instâncias
I Complexidade: O(n × m ln(m))
I No Scikit-Learn, usar presort=True pode agilizar o treino caso o conjunto de treinamento seja de alguns milhares(ou menor). Porém irá atrasar consideravelmente se o conjunto de treinamento for muito grande.
Entropia e Coeficiente de Gini
I Ambos medem a "impureza"de um determinado nó
I Gini é o modo default, porém no Scikit-Learn pode ser mudado para Entropia com hiperparâmetro: criterion = "entropy"
Entropia
I Entropia é um conceito originado em termodinâmica como uma medida de "desordem"de um sistema.
I Quando a entropia de um sistema é zero, as moléculas estão paradas e bem ordenadas.
Figura 5: Ilustração de Entropia nos
estados físicos de uma substância pura por
Manual da Química Figura 6: Entropia para uma substância composta por Brasil Escola
Entropia e Coeficiente de Gini Gi = 1 − n X k=1 p2i ,k (2) Hi = − n X k=1 pi ,k6=0 pi ,k· ln(pi ,k) (3) Onde: pi ,k = no de instâncias da classe k no de instâncias no i-ésimo nó
Exemplo Gini e Entropia
Vamos Calcular um coeficiente de Gini e Entropia do último nó esquerdo da árvore na Figura 3
I Gini = 1 − (0/54)2− (49/54)2− (5/54)2 = 0.1680 I Entropia = −4954ln(4954) −545 ln(545) = 0.3085
Gini ou Entropia?
I Muitas vezes não faz diferença. Porém quando diferem: I Gini tende a isolar em um ramo a classe mais frequente I Enquanto a Entropia leva à árvores mais balanceadas I Gini geralmente é um pouco mais rápida de se calcular
Limitações(Instabilidade)
I Utiliza apenas limiares ortogonais, logo é sensível à rotação dos dados
I Uma forma de resolver isso é usar(por exemplo) PCA no treinamento I São sensíveis à pequenas variações no treinamento
I Random Forests limitam a instabilidade usando a média das predições sobre várias árvores
I O algoritmo de otimização usado no treinamento pelo Scikit-Learn é estocástico, logo é importante usar um random state!
Instabilidade: Variação de uma instância no treino
Figura 7: Alteração dos limiares pela retirada da instância de maior valor do
Instabilidade: Sensibilidade à rotação
Regressão J (k, tk) = mL m · MSEL+ mR m · MSER; (4) Onde: ( MSENó =Pi ∈Nó(ˆyNó− yi)2 ˆ yNó= m1Nó Pi ∈Nóyi
Exemplo Regressão
Regressão
Regressão
Aprendizado em Conjunto
I A ideia é treinar vários preditores e então agregar as várias predições em apenas uma predição
I Quanto mais diversificados e diferentes os preditores forem melhor! I O melhor cenário são preditores independentes e erros não
correlacionados
I Difícil na prática pois todos os preditores são treinados com o mesmo(ou partes do mesmo) training set
Exemplo introdutório
I Vamos supor que temos a nossa disposição vários modelos ruins, que acertam apenas 51% das vezes num problema de classificação simples, com apenas 2 classes.
I Esses modelos, individualmente são apenas 1% melhor que uma moeda honesta...
I Mas e se usarmos 1000 desses modelos e utilizarmos como resposta a votação da maioria?
Atenção: Isso não é uma prova rigorosa é um exemplo para ilustrar a ideia
Pelo teorema central do limite temos:
B(n, p) para n>30 ∼ N(µ = np, σ2 = np(1 − p)) B(n = 1000, p = 0.51) → N(µ = 510, σ2= 249.9) P(x > 500) = Pz > 500 − 510√ 249.9 = P(z > −0.6326)
Exemplo Introdutório
Dada a tabela anterior temos que:
P(z > −0.6326) = 73.6% Ou seja:
I Se usarmos a votação por maioria dos nossos modelos em vez de suas predições individuais podemos esperar por algo entorno de 74% de acurácia!!
Exemplo Introdutório
I Infelizmente na prática o aumento da acurácia não seria tão alto quanto nesse exemplo
I Isso porque no exemplo nos consideramos os modelos como se fossem completamente independentes e com erros não
correlacionados
I Porém numa situação real os modelos não seriam completamente independentes visto que são treinados a partir do mesmo conjunto de treinamento...
I Porém ainda podemos esperar que o desempenho do grupo seja melhor geralmente que os desempenhos individuais
Figura 14: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn and
TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems. Sebastopol: O’Reilly Media, Inc, 2017
Modos de divisão do conjunto de treinamento(Amostragem)
I Pasting: Amostragem sem reposição
I Bagging(Bootstrap Aggregating): Amostragem com reposição I As predições geralmente são agregadas com a moda para
classificação ou com a média para regressão I Moda = "hard voting"
Bagging
I Apresenta um bias individual "levemente maior"mas a variância do ensemble é menor
I Geralmente se utiliza bagging por resultar em modelos melhores, porém é sempre válido testar
Out-of-bag(oob)
I Devido à amostragem algumas instâncias não são "vistas"pelos preditores(instâncias diferentes para cada preditor)
I Essas instâncias que ficam fora do treinamento do preditor mas pertencem ao conjunto de treinamento podem ser usadas como um "pré-teste"
Figura 15: Exemplo bagging(com reposição) ou pasting(sem reposição) por Hacker
Random Patches
I Amostra tanto as intâncias quanto as features Random Subspaces
I É um método Ensemble de Decision Trees I Algoritmo muito utilizado em Machine Learning
I Utiliza um subset aleatório de features em cada árvore para aumentar a diversidade enquanto divide os nós.
Figura 16: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn
andTensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems.Sebastopol: O’Reilly Media, Inc, 2017
Extra-Trees(Extremely Randomized Trees)
I São florestas aleatórias em que os limiares de decisão são escolhidos aleatoriamente, em vez da procura pelo melhor(como Decision Trees regulares fazem)
I São muito rápidas para se treinar(já que não precisa escolher o melhor limiar)
Qual a melhor? Regular ou Extra? I Precisa ser checado em cada caso
Feature Importance
I No Scikit-Learn é possível estimar a ”importância” de cada feature I Ele faz isso computando a média da profundidade dos nós onde as
features estão em cada árvore
Importância dos pixels na classicação do dataset MNIST
Boosting
I Qualquer método Ensemble que combine weak learners em um strong learner
I A ideia geral é treinar os preditores sequencialmente de tal forma que os sucessores tentem corrigir os erros dos predecessores.
AdaBoost(Adaptive Boosting)
I A ideia básica é fazer com que os sucessores deem mais atenção às instâncias que os predecessores sofreram underfitting
I Usa uma ponderação dos pesos das instâncias classificadas erradas no treinamento para atualizar o peso dos próximos preditores. I Não pode ser paralelizada, pois o treinamento dos preditores tem
Figura 19: Extraído de Géron, A. Hands-On Machine Learning with
Scikit-LearnandTensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems. Sebastopol: O’Reilly Media, Inc, 2017
Algoritmo: Inicialmente w(i )= m1 rj = Pm i =1 ˆ yj(i )6=y(i ) w(i ) Pm i =1w(i ) (5)
Onde ˆyj(i ) é a predição do preditor para a i-ésima instância I rj pode ser entendida como uma taxa de erro
Algoritmo
O peso de cada preditor é atualizado com: αj = η ln(
1 − rj
rj
) (6)
I Onde η é a taxa de aprendizagem(default: η = 1) Seguindo a regra: for i = 1, 2, · · · , m w(i ) ← ( w(i ); ˆy(i ) = y(i ) w(i )· eαj; ˆy(i ) 6= y(i ) (7) E por fim: (i ) w(i )
I Enfim para predizer a classe(no caso de classificação) é utilizado a maioria dos votos ponderados
ˆ y (x) = argmax k N X j=1 ˆ yj(x)=k αj (8)
Onde N é o número total de preditores I Video de 1m53s a 4m56s do Youtube
Gradient Boosting
I Em vez de atualizar os pesos como o AdaBoost, o Gradient Boosting treina os sucessores com os resíduos(erros residuais) dos predecessores.
Figura 20: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn and
TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems.Sebastopol: O’Reilly Media, Inc, 2017
Figura 21: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn and
TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems.Sebastopol: O’Reilly Media, Inc, 2017
Learning Rate
Figura 22: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn and
TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems. Sebastopol: O’Reilly Media, Inc, 2017
Shrinkage: warm_start = True
Figura 23: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn and
TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems. Sebastopol: O’Reilly Media, Inc, 2017
Stochastic Gradient Boosting
I Utiliza uma amostra aleatória do conjunto de treinamento para treinar cada árvore(subsample=True)
Stacking
I A ideia é criar um ”modelo agregador”
I Em vez de usar métodos de agregação como o hard voting, um novo modelo é treinado para realizar a agregação
Blender
Figura 24: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn and
TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems. Sebastopol: O’Reilly Media, Inc, 201757/62
Figura 25: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn and
TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems. Sebastopol: O’Reilly Media, Inc, 2017
Figura 26: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn and
TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems. Sebastopol: O’Reilly Media, Inc, 2017
E se quiser mais de uma camada?
I Dividir o conjunto de treinamento no número de camadas que se deseja no modelo
Figura 27: Extraído de Géron, A. Hands-On Machine Learning with Scikit-Learn and
TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems. Sebastopol: O’Reilly Media, Inc, 2017
Obrigado!
Contato: