Skip to content

Commit edeb84a

Browse files
lucasBrilhantemarcelohpf
authored andcommitted
Adding decision tree
Conflicts: product-solution.md Author: Lucas Brilhante <[email protected]> Date: Mon Dec 4 11:29:58 2017 -0200 You are currently cherry-picking commit c5f27c0. Changes to be committed: new file: arvore_jogo_tenis.png modified: product-solution.md
1 parent fa8a7c0 commit edeb84a

File tree

2 files changed

+150
-39
lines changed

2 files changed

+150
-39
lines changed

arvore_jogo_tenis.png

7.74 KB
Loading

product-solution.md

+150-39
Original file line numberDiff line numberDiff line change
@@ -79,20 +79,26 @@ val](crossval.png)
7979

8080
# Tratamento
8181

82-
Será realizada as etapas de feature selection e feature
82+
Será realizada as
83+
etapas de feature selection e feature
8384
engineering.
8485
Correlação entre features
85-
8686
Será realizada uma análise da correlação
87-
entre as features. Visto que há um total de 93 colunas que não foi
88-
disponibilizada nenhuma informação sobre o que são elas e o que representam e
89-
portanto, esta análize ajudará a identificar as relações entre as features.
87+
entre as features. Visto que há um
88+
total de 93 colunas que não foi
89+
disponibilizada nenhuma informação sobre o que
90+
são elas e o que representam e
91+
portanto, esta análize ajudará a identificar as
92+
relações entre as features.
9093

9194
## Correlação
9295

93-
A correlação entre duas variáveis é quando existe algum laço
94-
matemático que envolve o valor de duas variáveis de alguma forma [ESTATÍSTICA II
95-
- [CORRELAÇÃO E REGRESSÃO](http://www.ctec.ufal.br/professor/mgn/05CorrelacaoERegressao.pdf).
96+
A correlação entre duas variáveis é
97+
quando existe algum laço
98+
matemático que envolve o valor de duas variáveis de
99+
alguma forma [ESTATÍSTICA II
100+
- [CORRELAÇÃO E
101+
REGRESSÃO](http://www.ctec.ufal.br/professor/mgn/05CorrelacaoERegressao.pdf).
96102
Uma das maneiras mais simples de se identificar a correlação entre duas
97103
variáveis é plotando-as em um gráfico, para tentar identificar alguma relação
98104
entre elas, entretanto, como são um total de 93 features, dificulta visualizar a
@@ -135,7 +141,8 @@ correlation
135141
A partir da matriz de correlação assima, buscamos agora
136142
identificar quais das colunas possuem uma forte correlação de acordo com a
137143
tabela a seguir.
138-
Como sugerido por [Makuka,2012](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3576830/)
144+
Como sugerido por
145+
[Makuka,2012](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3576830/)
139146
<center>Interpretação do resultado de correlação </center>
140147

141148
|Valor
@@ -235,7 +242,8 @@ amostras. Basicamente elabora-se uma matriz em que nas colunas e linhas são as
235242
possíveis classes. Cada célula traz a contagem de amostras que eram da Label X
236243
(coluna) e foram classificadas na Label Y (linha). Dessa forma, na matriz, a
237244
diagonal principal trará os acertos do classificador
238-
[Microsoft](https://docs.microsoft.com/pt-br/sql/analysis-services/data-mining/classification-matrix-analysis-services-data-mining). Veja o exemplo a
245+
[Microsoft](https://docs.microsoft.com/pt-br/sql/analysis-services/data-
246+
mining/classification-matrix-analysis-services-data-mining). Veja o exemplo a
239247
seguir:
240248

241249
|Classificador\Real|Label 1|Label 2|Label 3|
@@ -245,7 +253,9 @@ seguir:
245253
|**Label 3**|0|0|3|
246254

247255
Plot para matriz de confusão encontrado em
248-
[Scikit](http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html#sphx-glr-auto-examples-model-selection-plot-confusion-matrix-py) e adaptado para o
256+
[Scikit](http://scikit-
257+
learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html#sphx-
258+
glr-auto-examples-model-selection-plot-confusion-matrix-py) e adaptado para o
249259
problema
250260

251261
```python
@@ -299,7 +309,8 @@ com outros modelos.
299309

300310
* **Stratified**: realiza predições baseadas na
301311
distribuição das classes da base de treino. (Ex.: 10% A, 20% B, 50% C, 20% D)
302-
* **Most Frequent**: sempre prediz com a classe mais frequente na base de treino
312+
*
313+
**Most Frequent**: sempre prediz com a classe mais frequente na base de treino
303314

304315
```python
305316
from sklearn.dummy import DummyClassifier
@@ -379,20 +390,23 @@ interativamente, na qual são dados um conjunto de parametros e ela busca a
379390
partir daí o menor valor[(TOUSSAINT, 2012)](https://ipvs.informatik.uni-
380391
stuttgart.de/mlr/marc/notes/gradientDescent.pdf). De forma que:
381392
\begin{equation}
382-
y_{min} = F(x_1) > F(x_2) > F(x_3) > ... > F(x_n),\ onde:\
393+
y_{min} = F(x_1) > F(x_2) > F(x_3) > ... > F(x_n),\ onde:\
383394
F(x_n) < precisão
384395
\end{equation}
385396

386397
Um pseudo algorítmo que pode ser proposto para
387-
um problema de gradient é:
398+
um problema de
399+
gradient é:
388400

389401
x = inital_value
390402
step = 0.01
403+
391404
repita
392405
xprev=x
393-
x = xperv - step * F(xprev)
394-
enquanto abs(x - xprev) >
395-
precisao
406+
x = xperv - step * F(xprev)
407+
enquanto abs(x - xprev)
408+
>
409+
precisao
396410

397411
```python
398412
%%time
@@ -420,9 +434,9 @@ def xgboost(X_train, y_train, X_test, y_test):
420434
print('XGBoost confusion matrix')
421435
cm = confusion_matrix(y_test, y_pred)
422436

423-
plot_confusion_matrix(cm, classes=xgbclf)
424437
print('XGBoost cross validation')
425438
accuracies = cross_val_score(estimator=xgbclf, X=X_train, y=y_train, cv=10)
439+
plot_confusion_matrix(cm, classes=xgbclf)
426440
print('Resultado na base de treino %.2f' % train_score)
427441
print('Resultado Médio na base de teste: %.2f' % accuracies.mean())
428442
print('Desvio padrão: %.4f' % accuracies.std())
@@ -497,7 +511,93 @@ search_params(DecisionTreeClassifier, dt_params)
497511

498512
## Decision Tree
499513

500-
### Adicionar descrição de como funciona!!!!
514+
Os dados são separados recursivamente formando uma árvore de
515+
decisão baseada nas
516+
features.Pode-se definir uma árvore de decisão, conforme diz
517+
(MITCHELL, 1997),
518+
como um método para aproximar valores discretos em funções,
519+
onde a função de
520+
aprendizagem é representada por uma árvore de decisão. Tais
521+
árvores aprendidas
522+
podem ser representadas - a nível de código fonte - como
523+
conjuntos de estruturas
524+
condicionais "se-então" para melhorar a leitura e
525+
entendimento humano, de acordo
526+
com (MITCHELL, 1997).
527+
528+
Estes algoritmos são muito
529+
utilizados, segundo (MITCHELL, 1997), na área de
530+
algoritmos de inferência
531+
indutiva, e dentre as aplicações de tais algoritmos,
532+
tem-se máquinas que
533+
aprenderam a diagnosticar casos da medicina, ou ainda, para
534+
avaliar o risco de
535+
inadimplência dos requerentes de créditos em bancos.
536+
537+
Para visualizar de forma
538+
mais fácil a representação de uma árvore, a figura 3,
539+
representada abaixo,
540+
caracteriza uma árvore de decisão em que a máquina deve
541+
decidir com base nas
542+
variáveis do tempo (ensolarado, nublado ou chuvoso), se
543+
pode ou não ocorrer uma
544+
partida de tênis. Além das variáveis de tempo, tem-se
545+
outras variáveis que podem
546+
ser levadas em conta dependendo da condição climática local, como umidade (alta
547+
ou normal) e o vento (forte ou fraco).
548+
549+
![Workflow Random
550+
forest](arvore_jogo_tenis.png)
551+
552+
O algoritmo de árvores de decisão classifica
553+
instâncias ou dados, ordenando-os
554+
apartir da raiz da árvore, para os nós de suas
555+
folhas. Cada nó da árvore
556+
exemplifica uma pergunta (teste) de alguns - atributos
557+
- de instância, e cada
558+
ramo descendente de um nó corresponde para um dos
559+
possíveis valores de tal
560+
atributo (MITCHELL, 1997). Vale a pena citar: O
561+
algoritmo ID3 (QUINLAN, 1986)
562+
aprende sobre árvores de decisão construindo-as de
563+
cima para baixo (nó raiz para
564+
as ramificações) tentando buscar respostas para a
565+
pergunta "Qual atributo
566+
devemos testar na raiz da árvore?", sendo assim, cada
567+
atributo instanciado é
568+
calculado por meio de testes estatísticos, para
569+
determinar o quão bem (ótimo)
570+
tal atributo, isolado dos demais, classifica os
571+
exemplos de treinamento.
572+
573+
Quando o melhor atributo é selecionado e utilizado
574+
como teste no nó principal da
575+
árvore, cria-se um descendente para cada valor
576+
admissível deste atributo e os
577+
exemplos de treinamento são sorteados para o nó
578+
filho mais apropriado. O
579+
processo inteiro é então repetido utilizando
580+
treinamentos associados a cada
581+
descendente para selecionar o melhor atributo
582+
para testar na árvore. Quando
583+
realizado dessa forma, o algoritmo tenta de forma
584+
“gulosa“3.4. O modelo 49
585+
Figura 3 – Exemplo de árvore de decisão, sobre
586+
condições para realização de um
587+
jogo de
588+
tênis.
589+
590+
buscar uma árvore de decisão
591+
aceitável, onde o algoritmo nunca retrocede em
592+
reavaliar escolhas anteriores.
593+
Levando em consideração todas essas informações sobre Árvores de decisões
594+
podemos dizer que no contexto de predição da classificação de risto, as DTs são
595+
as mais adequadas. O que as tornam mais apropriadas ainda é a possibilidade de
596+
visualizar a árvore de decisão montada, o que reflete nas decisões que ela toma.
597+
Porém as Dts existem
598+
a muito tempo e ao longo do tempo foram criados
599+
melhoramentos para as árvores
600+
como as Random Forests.
501601

502602
```python
503603
from sklearn.model_selection import cross_val_score
@@ -521,7 +621,8 @@ no método de montagem random forest. Este modelo de predição possui um proble
521621
de viés quando uma das classes na base de treino é mais predominante do que
522622
outra, ou seja, a distribuição das classes na base de treino devem ser
523623
semelhantes para evitar problemas de
524-
[overfiting](http://docs.aws.amazon.com/machine-learning/latest/dg/model-fit-underfitting-vs-overfitting.html).
624+
[overfiting](http://docs.aws.amazon.com/machine-learning/latest/dg/model-fit-
625+
underfitting-vs-overfitting.html).
525626

526627
Para tanto, precisa-se descobrir qual a
527628
contagem de cada classe disponível na base de treino, montaremos um histograma
@@ -583,18 +684,12 @@ com mais votos ganha e o resultado é
583684
dado.
584685

585686
![Workflow Randomforest](forest.jpg)
586-
587687
De acordo com breiman, 2001, as RFs corrigem a maior parte
588688
dos problemas de
589689
Overfitting que as Árvores de decisão apresentam. Tudo depende
590690
do quanto as DT
591691
contidas dentro da Random Forest. Isto é, o quanto elas
592692
representam os dados.
593-
594-
Referências:
595-
[BREIMAN](https://www.stat.berkeley.edu/users/breiman/randomforest2001.pdf),
596-
Leo. Random forests. Machine learning, v. 45, n. 1, p. 5-32, 2001.
597-
598693
## Utilizando o algoritmo
599694

600695
```python
@@ -620,20 +715,26 @@ maior é a importância da feature.
620715
O método utilizado para gerar a
621716
importância das features no modelo é a Decrease Mean Importance, que utiliza em
622717
seus cálculos um indicador de impureza no sistema. No caso do random forest
623-
implementado [(LOUPPE et al.,2013)](https://pdfs.semanticscholar.org/2635/19c5a43fbf981da5ba873062219c50fdf56d.pdf),
718+
implementado [(LOUPPE et
719+
al.,2013)](https://pdfs.semanticscholar.org/2635/19c5a43fbf981da5ba873062219c50fdf56d.pdf),
624720
este indicador é o Gini Impurity que pode ser entendido como uma redução da
625721
probabilidade de errar a classificação de uma categoria dentro de um algorítmo
626-
de árvore [(Sebastian Raschaka)](https://sebastianraschka.com/faq/docs/decision-tree-binary.html).
722+
de árvore [(Sebastian Raschaka)](https://sebastianraschka.com/faq/docs/decision-
723+
tree-binary.html).
627724

628725
#### O indice
629726
O indice de Gini pode ser calculado utilizando
630-
a seguinte fórmula[(TEKIMONO,2009)](http://people.revoledu.com/kardi/tutorial/DecisionTree/how-to-measure-impurity.htm):
727+
a seguinte
728+
fórmula[(TEKIMONO,2009)](http://people.revoledu.com/kardi/tutorial/DecisionTree/how-
729+
to-measure-impurity.htm):
631730

632731
\begin{equation}
633732
Gini = 1- \sum_{i=1} p_i^2
634733
\end{equation}
635-
Em que $p_i$ é a probabilidade da ocorrência de uma determinada classe,
636-
desconsiderando os atributos. Ou seja $N_i$ é o número de ocorrências da classe
734+
Em que $p_i$ é a probabilidade da ocorrência de uma determinada
735+
classe,
736+
desconsiderando os atributos. Ou seja $N_i$ é o número de ocorrências da
737+
classe
637738
i e N é o total de elementos das classes:
638739

639740
\begin{equation}
@@ -648,7 +749,8 @@ Regression Trees (CART), utiliza-se o indice de Gini modificado, isto é,
648749
calcula-se ainda as probabilidades em $p_i$, mas agora utiliza-se do indice de
649750
Gini nos filhos da esquerda $t_l$ e direita $t_r$. Recalcula-se as
650751
probabilidades para ambos os nós também em $p_l$ e $p_r$ utilizando como base as
651-
possíveis classes reduzidas a $N_t$ [(LOUPPE et al.,2013)](https://pdfs.semanticscholar.org/2635/19c5a43fbf981da5ba873062219c50fdf56d.pdf).
752+
possíveis classes reduzidas a $N_t$ [(LOUPPE et
753+
al.,2013)](https://pdfs.semanticscholar.org/2635/19c5a43fbf981da5ba873062219c50fdf56d.pdf).
652754
\begin{equation}
653755
i(s, t) = Gini(t) - p_l Gini(t_l) - p_r Gini(t_r) \\
654756
p(t) =
@@ -706,7 +808,8 @@ print ("{} de precisão".format(rfscores.mean() * 100))
706808

707809
## ExtraTrees
708810

709-
O [Scikit Learn](http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html)
811+
O [Scikit Learn](http://scikit-
812+
learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html)
710813
nos apresenta um tipo diferente de random forest que pode apresentar resultados
711814
melhores que o [RandomForestClassifier](http://scikit-
712815
learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html).
@@ -774,12 +877,20 @@ print('Score: ', mlp.score(X_test, y_test))
774877
# Referências Bibliográficas
775878
http://scikit-
776879
learn.org/stable/modules/generated/sklearn.dummy.DummyClassifier.html#sklearn.dummy.DummyClassifier
777-
778880
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-
779881
xgboost-with-codes-python/
882+
[MITCHELL](https://dl.acm.org/citation.cfm?id=505283), Tom M. Machine learning.
883+
1997. Burr Ridge, IL: McGraw Hill, v. 45, n. 37, p. 870-877, 1997.
884+
[QUINLAN](http://hunch.net/~coms-4771/quinlan.pdf), J.. Ross . Induction of
885+
decision trees. Machine learning, v. 1, n. 1, p. 81-106, 1986.
886+
[BREIMAN](https://www.stat.berkeley.edu/users/breiman/randomforest2001.pdf),
887+
Leo. Random forests. Machine learning, v. 45, n. 1, p. 5-32, 2001.
780888

781-
782-
BABATUNDE, Oluleye, ARMSTRONG, Leisa, DIEPEVEEN,
783-
Dean e LENG, J. Comparative analysis of Genetic Algorithm and Particle Swam
784-
Optimization: An application in precision agriculture. 2015. **Asian Journal of
785-
Computer and Information Systems**. 3. 1-12.
889+
BABATUNDE,
890+
Oluleye, ARMSTRONG, Leisa, DIEPEVEEN,
891+
Dean e LENG, J. Comparative analysis of
892+
Genetic Algorithm and Particle Swam
893+
Optimization: An application in precision
894+
agriculture. 2015. **Asian Journal of
895+
Computer and Information Systems**. 3.
896+
1-12.

0 commit comments

Comments
 (0)