@@ -88,28 +88,24 @@ entre as features. Visto que há um total de 93 colunas que não foi
8888disponibilizada nenhuma informação sobre o que são elas e o que representam e
8989portanto, esta análize ajudará a identificar as relações entre as features.
9090
91- ## 
92- Correlação
91+ ## Correlação  
9392
9493A correlação entre duas variáveis é quando existe algum laço
9594matemático que envolve o valor de duas variáveis de alguma forma [ ESTATÍSTICA II
96- -  CORRELAÇÃO E
97- REGRESSÃO] ( http://www.ctec.ufal.br/professor/mgn/05CorrelacaoERegressao.pdf ) .
95+ -  [ CORRELAÇÃO E REGRESSÃO] ( http://www.ctec.ufal.br/professor/mgn/05CorrelacaoERegressao.pdf ) .
9896Uma das maneiras mais simples de se identificar a correlação entre duas
9997variáveis é plotando-as em um gráfico, para tentar identificar alguma relação
10098entre elas, entretanto, como são um total de 93 features, dificulta visualizar a
10199correlação em forma gráfica.
102100
103101A correlação de
104- [ Pearson] (https://pt.wikipedia.org/wiki/Coeficiente_de_correla%C3%A7%C3%A3o_de%0 
105- A_Pearson)
102+ [ Pearson] ( https://pt.wikipedia.org/wiki/Coeficiente_de_correla%C3%A7%C3%A3o_de%0A_Pearson ) 
106103mede o grau da correlação (e a direcção dessa correlação - se
107104positiva ou
108105negativa) entre duas variáveis de escala métrica (intervalar ou de
109106rácio/razão).
110107Já a correlação de
111- [ Spearman] (https://pt.wikipedia.org/wiki/Coeficiente_de_correla%C3%A7%C3%A3o_de _ 
112- postos_de_Spearman)
108+ [ Spearman] ( https://pt.wikipedia.org/wiki/Coeficiente_de_correla%C3%A7%C3%A3o_de_postos_de_Spearman ) 
113109entre duas variáveis é igual à correlação de Pearson entre
114110os valores de postos
115111daquelas duas variáveis. Enquanto a correlação de Pearson
@@ -139,8 +135,7 @@ correlation
139135A partir da matriz de correlação assima, buscamos agora
140136identificar quais das colunas possuem uma forte correlação de acordo com a
141137tabela a seguir.
142- Como sugerido por [ Makuka,
143- 2012] ( https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3576830/ ) 
138+ Como sugerido por [ Makuka,2012] ( https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3576830/ ) 
144139<center >Interpretação do resultado de correlação </center >
145140
146141|Valor
@@ -200,7 +195,7 @@ averiguar a performance do modelo.
200195from  sklearn.model_selection import  train_test_split
201196from  sklearn.model_selection import  cross_val_score
202197from  sklearn.metrics import  confusion_matrix
203- from  sklearn.preprocessing import  StandardScaler  
198+ from  sklearn.preprocessing import  StandardScaler
204199
205200X =  df_train
206201y =  df_target.categories
@@ -240,8 +235,7 @@ amostras. Basicamente elabora-se uma matriz em que nas colunas e linhas são as
240235possíveis classes. Cada célula traz a contagem de amostras que eram da Label X
241236(coluna) e foram classificadas na Label Y (linha). Dessa forma, na matriz, a
242237diagonal principal trará os acertos do classificador
243- [ Microsoft] (https://docs.microsoft.com/pt-br/sql/analysis-services/data- 
244- mining/classification-matrix-analysis-services-data-mining). Veja o exemplo a
238+ [ Microsoft] ( https://docs.microsoft.com/pt-br/sql/analysis-services/data-mining/classification-matrix-analysis-services-data-mining ) . Veja o exemplo a
245239seguir:
246240
247241| Classificador\Real| Label 1| Label 2| Label 3| 
@@ -251,9 +245,7 @@ seguir:
251245| ** Label 3** | 0| 0| 3| 
252246
253247Plot para matriz de confusão encontrado em
254- [ Scikit] (http://scikit- 
255- learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html#sphx-
256- glr-auto-examples-model-selection-plot-confusion-matrix-py) e adaptado para o
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
257249problema
258250
259251``` python 
@@ -276,7 +268,7 @@ def plot_confusion_matrix(cm, classes,
276268        print (" Normalized confusion matrix" 
277269    else :
278270        print (' Confusion matrix, without normalization' 
279-     
271+ 
280272    plt.figure(figsize = (11 , 7 ))
281273    plt.imshow(cm, interpolation = ' nearest' cmap = cmap)
282274    plt.title(title)
@@ -288,7 +280,7 @@ def plot_confusion_matrix(cm, classes,
288280        plt.text(j, i, format (cm[i, j], fmt),
289281                 horizontalalignment = " center" 
290282                 color = " white" if  cm[i, j] >  thresh else  " black" 
291-      
283+ 
292284    plt.tight_layout()
293285    plt.ylabel(' True label' 
294286    plt.xlabel(' Predicted label' 
@@ -306,9 +298,8 @@ comparação
306298com outros modelos.
307299
308300*  ** Stratified** : realiza predições baseadas na
309- distribuição das classes da base de treino. (Ex.: 10% A, 20% B, 50% C, 20% D) 
310- * 
311- ** Most Frequent** : sempre prediz com a classe mais frequente na base de treino
301+ 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
312303
313304``` python 
314305from  sklearn.dummy import  DummyClassifier
@@ -322,7 +313,7 @@ def dummies(X_train, y_train, X_test, y_test):
322313        score =  clf.score(X_train, y_train)
323314        y_pred =  clf.predict(X_test)
324315        cm =  confusion_matrix(y_test, y_pred)
325-          
316+ 
326317        plot_confusion_matrix(cm, classes = model)
327318
328319        #  Cross validation
@@ -370,20 +361,20 @@ def xgboost(X_train, y_train, X_test, y_test):
370361        nthread = 8 ,
371362        scale_pos_weight = 1 
372363        )
373-      
364+ 
374365    xgbclf.fit(X_train, y_train)
375366    train_score =  xgbclf.score(X_train, y_train)
376367    y_pred =  xgbclf.predict(X_test)
377368
378369    cm =  confusion_matrix(y_test, y_pred)
379-      
370+ 
380371    plot_confusion_matrix(cm, classes = xgbclf)
381372
382373    accuracies =  cross_val_score(estimator = xgbclf, X = X_train, y = y_train, cv = 10 )
383374    print (' Resultado na base de treino %.2f ' %  train_score)
384375    print (' Resultado Médio na base de teste: %.2f ' %  accuracies.mean())
385376    print (' Desvio padrão: %.4f ' %  accuracies.std())
386-      
377+ 
387378xgboost(X_train, y_train, X_test, y_test)
388379``` 
389380
@@ -405,15 +396,15 @@ xgb_params = [{
405396}]
406397
407398xgb_add_params =  [{
408-     ' learning_rate' 0.1 ,  
409-     ' n_estimators' 140 ,  
399+     ' learning_rate' 0.1 ,
400+     ' n_estimators' 140 ,
410401    ' max_depth' 5 ,
411-     ' min_child_weight' 2 ,  
412-     ' gamma' 0 ,  
413-     ' subsample' 0.8 ,  
402+     ' min_child_weight' 2 ,
403+     ' gamma' 0 ,
404+     ' subsample' 0.8 ,
414405    ' colsample_bytree' 0.8 ,
415-     ' objective' ' binary:logistic'   
416-     ' nthread' 8 ,  
406+     ' objective' ' binary:logistic' 
407+     ' nthread' 8 ,
417408    ' scale_pos_weight' 1 ,
418409    ' seed' 27 
419410}]
@@ -430,7 +421,7 @@ def search_params(classifier, params):
430421                              param_grid = params,
431422                              cv  =  10 ,
432423                              n_jobs = - 1 )
433-      
424+ 
434425    grid_search =  grid_search.fit(X_train, y_train)
435426    print (grid_search.best_score_, grid_search.best_params_)
436427    return  grid_search.best_score_
@@ -462,10 +453,10 @@ from sklearn.model_selection import cross_val_score
462453def  fit_tree (X , Y ):
463454    tree_classifier =  DecisionTreeClassifier(max_features = 70 , min_samples_leaf = 10 , max_depth = 40 )
464455    tree_classifier.fit(X, Y)
465-      
456+ 
466457    inner_score =  tree_classifier.score(X, Y)
467458    tree_fit =  cross_val_score(tree_classifier, X, Y)
468-      
459+ 
469460    return  inner_score, tree_fit.mean(), tree_fit.std()
470461
471462" inner: {:.2f} cross: {:.2f} +/- {:.2f}" * fit_tree(X_train, y_train))
@@ -478,8 +469,7 @@ no método de montagem random forest. Este modelo de predição possui um proble
478469de viés quando uma das classes na base de treino é mais predominante do que
479470outra, ou seja, a distribuição das classes na base de treino devem ser
480471semelhantes para evitar problemas de
481- [ overfiting] (http://docs.aws.amazon.com/machine-learning/latest/dg/model-fit- 
482- underfitting-vs-overfitting.html).
472+ [ overfiting] ( http://docs.aws.amazon.com/machine-learning/latest/dg/model-fit-underfitting-vs-overfitting.html ) .
483473
484474Para tanto, precisa-se descobrir qual a
485475contagem de cada classe disponível na base de treino, montaremos um histograma
@@ -540,8 +530,7 @@ votação por maioria, ou seja, a categoria
540530com mais votos ganha e o resultado é
541531dado.
542532
543- ![ Workflow Random
544- forest] ( forest.jpg ) 
533+ ![ Workflow Randomforest] ( forest.jpg ) 
545534
546535De acordo com breiman, 2001, as RFs corrigem a maior parte
547536dos problemas de
@@ -554,8 +543,7 @@ Referências:
554543[ BREIMAN] ( https://www.stat.berkeley.edu/users/breiman/randomforest2001.pdf ) ,
555544Leo. Random forests. Machine learning, v. 45, n. 1, p. 5-32, 2001.
556545
557- ## 
558- Utilizando o algoritmo
546+ ## Utilizando o algoritmo  
559547
560548``` python 
561549from  sklearn.ensemble import  RandomForestClassifier
@@ -580,18 +568,14 @@ maior é a importância da feature.
580568O método utilizado para gerar a
581569importância das features no modelo é a Decrease Mean Importance, que utiliza em
582570seus cálculos um indicador de impureza no sistema. No caso do random forest
583- implementado [ (LOUPPE et al.,
584- 2013)] ( https://pdfs.semanticscholar.org/2635/19c5a43fbf981da5ba873062219c50fdf56d.pdf ) ,
571+ implementado [ (LOUPPE et al.,2013)] ( https://pdfs.semanticscholar.org/2635/19c5a43fbf981da5ba873062219c50fdf56d.pdf ) ,
585572este indicador é o Gini Impurity que pode ser entendido como uma redução da
586573probabilidade de errar a classificação de uma categoria dentro de um algorítmo
587- de árvore [ (Sebastian Raschaka)] (https://sebastianraschka.com/faq/docs/decision- 
588- tree-binary.html).
574+ de árvore [ (Sebastian Raschaka)] ( https://sebastianraschka.com/faq/docs/decision-tree-binary.html ) .
589575
590576#### O indice  
591577O indice de Gini pode ser calculado utilizando
592- a seguinte fórmula[ (TEKIMONO,
593- 2009)] (http://people.revoledu.com/kardi/tutorial/DecisionTree/how-to-measure- 
594- impurity.htm):
578+ a seguinte fórmula[ (TEKIMONO,2009)] ( http://people.revoledu.com/kardi/tutorial/DecisionTree/how-to-measure-impurity.htm ) :
595579
596580\begin{equation}
597581    Gini = 1- \sum_ {i=1} p_i^2
@@ -612,21 +596,23 @@ Regression Trees (CART), utiliza-se o indice de Gini modificado, isto é,
612596calcula-se ainda as probabilidades em $p_i$, mas agora utiliza-se do indice de
613597Gini nos filhos da esquerda $t_l$ e direita $t_r$. Recalcula-se as
614598probabilidades para ambos os nós também em $p_l$ e $p_r$ utilizando como base as
615- possíveis classes reduzidas a $N_t$ [ (LOUPPE et al.,
616- 2013)] ( https://pdfs.semanticscholar.org/2635/19c5a43fbf981da5ba873062219c50fdf56d.pdf ) .
599+ possíveis classes reduzidas a $N_t$ [ (LOUPPE et al.,2013)] ( https://pdfs.semanticscholar.org/2635/19c5a43fbf981da5ba873062219c50fdf56d.pdf ) .
617600\begin{equation}
618601    i(s, t) = Gini(t) - p_l Gini(t_l) - p_r Gini(t_r) \\ 
619- p(t) = \frac{N_ {l|r}}{N_t}
602+ p(t) =
603+ \frac{N_ {l|r}}{N_t}
620604\end{equation}
621605
622606#### Decrease Mean Importance  
623607
624608Para
625- calcular a importância de uma feature X ao tentar predizer uma label Y, utiliza-
626- se os indices de impureza com a proporção de $N_f$ amostras em relação ao total
627- $N$. $N_T$ é o total de árvores na floresta. Assim, para uma Random Forest a
609+ calcular
610+ a importância de uma feature X ao tentar predizer uma label Y, utiliza-
611+ se os
612+ indices de impureza com a proporção de $N_f$ amostras em relação ao total
613+ $N$.
614+ $N_T$ é o total de árvores na floresta. Assim, para uma Random Forest a
628615conta é:
629- 
630616\begin{equation}
631617    I(X_m) = \frac{1}{N_T} \sum_ {T} \sum_ {t \epsilon
632618T: v (s)=X_m} pf(t)i(s,t) \\ 
@@ -668,8 +654,7 @@ print ("{} de precisão".format(rfscores.mean() * 100))
668654
669655## ExtraTrees  
670656
671- O [ Scikit Learn] (http://scikit- 
672- learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html)
657+ O [ Scikit Learn] ( http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html ) 
673658nos apresenta um tipo diferente de random forest que pode apresentar resultados
674659melhores que o [ RandomForestClassifier] (http://scikit- 
675660learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html).
@@ -716,10 +701,11 @@ Estimativa: 10 min com I7 3.1  8Ram
716701# Referências Bibliográficas  
717702http://scikit- 
718703learn.org/stable/modules/generated/sklearn.dummy.DummyClassifier.html#sklearn.dummy.DummyClassifier
704+ 
719705https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning- 
720706xgboost-with-codes-python/
721707
722-   
708+ 
723709BABATUNDE, Oluleye, ARMSTRONG, Leisa, DIEPEVEEN,
724710Dean e LENG, J. Comparative analysis of Genetic Algorithm and Particle Swam
725711Optimization: An application in precision agriculture. 2015. ** Asian Journal of
0 commit comments