Ensemble

Machine learning com PySpark

Andrew Collier

Data Scientist, Fathom Data

O que é um ensemble?

É uma coleção de modelos.

Uma coleção de modelos semelhantes

Sabedoria da Multidão — a opinião coletiva de um grupo supera a de um único especialista.

Machine learning com PySpark

Diversidade no ensemble

 

 

 

Diversidade e independência são importantes porque as melhores decisões coletivas resultam de discordância e disputa, não de consenso ou compromisso.

― James Surowiecki, The Wisdom of Crowds

Machine learning com PySpark

Random Forest

Random Forest — um ensemble de Decision Trees

Criando diversidade no modelo:

  • cada árvore treinada em um subconjunto aleatório dos dados
  • subconjunto aleatório de features usado para dividir em cada nó

Nenhuma árvore da floresta deve ser igual.

Uma coleção de árvores

Machine learning com PySpark

Crie uma floresta de árvores

Voltando aos dados de carros: fabricado nos EUA (0.0) ou não (1.0).

Crie um classificador Random Forest.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Ajuste aos dados de treino.

forest = forest.fit(cars_train)
Machine learning com PySpark

Vendo as árvores

Como acessar as árvores dentro da floresta?

forest.trees
[DecisionTreeClassificationModel (uid=dtc_aa66702a4ce9) of depth 5 with 17 nodes,
 DecisionTreeClassificationModel (uid=dtc_99f7efedafe9) of depth 5 with 31 nodes,
 DecisionTreeClassificationModel (uid=dtc_9306e4a5fa1d) of depth 5 with 21 nodes,
 DecisionTreeClassificationModel (uid=dtc_d643bd48a8dd) of depth 5 with 23 nodes,
 DecisionTreeClassificationModel (uid=dtc_a2d5abd67969) of depth 5 with 27 nodes]

Cada uma pode ser usada para previsões individuais.

Machine learning com PySpark

Previsões de árvores individuais

Quais previsões cada árvore gera?

+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
|   0.0|   0.0|   0.0|   0.0|   0.0|  0.0| <- concordância perfeita
|   1.0|   1.0|   0.0|   1.0|   0.0|  0.0|
|   0.0|   0.0|   0.0|   1.0|   1.0|  1.0|
|   0.0|   0.0|   0.0|   1.0|   0.0|  0.0|
|   0.0|   1.0|   1.0|   1.0|   0.0|  1.0|
|   1.0|   1.0|   0.0|   1.0|   1.0|  1.0|
|   1.0|   1.0|   1.0|   1.0|   1.0|  1.0| <- concordância perfeita
+------+------+------+------+------+-----+
Machine learning com PySpark

Previsões por consenso

Use o método .transform() para gerar previsões por consenso.

+-----+----------------------------------------+----------+
|label|probability                             |prediction|
+-----+----------------------------------------+----------+
|0.0  |[0.8,0.2]                               |0.0       |
|0.0  |[0.4,0.6]                               |1.0       |
|1.0  |[0.5333333333333333,0.4666666666666666] |0.0       |
|0.0  |[0.7177777777777778,0.28222222222222226]|0.0       |
|1.0  |[0.39396825396825397,0.606031746031746] |1.0       |
|1.0  |[0.17660818713450294,0.823391812865497] |1.0       |
|1.0  |[0.053968253968253964,0.946031746031746]|1.0       |
+-----+----------------------------------------+----------+
Machine learning com PySpark

Importância das features

O modelo usa estas features: cyl, size, mass, length, rpm e consumption.

Qual é mais ou menos importante?

forest.featureImportances
SparseVector(6, {0: 0.0205, 1: 0.2701, 2: 0.108, 3: 0.1895, 4: 0.2939, 5: 0.1181})

Parece que:

  • rpm é a mais importante
  • cyl é a menos importante.
Machine learning com PySpark

Gradient-Boosted Trees

Algoritmo iterativo de boosting:

  1. Construa uma Decision Tree e adicione ao ensemble.
  2. Prediga o rótulo de cada instância de treino usando o ensemble.
  3. Compare previsões com os rótulos conhecidos.
  4. Dê mais peso às instâncias com previsões incorretas.
  5. Volte ao passo 1.

O modelo melhora a cada iteração.

Machine learning com PySpark

Boosting de árvores

Crie um classificador Gradient-Boosted Tree.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Ajuste aos dados de treino.

gbt = gbt.fit(cars_train)
Machine learning com PySpark

Comparando árvores

Vamos comparar os três tipos de modelos de árvore nos dados de teste.

# AUC para Decision Tree
0.5875

# AUC para Random Forest
0.65

# AUC para Gradient-Boosted Tree
0.65

Ambos os métodos de ensemble superam uma Decision Tree simples.

Machine learning com PySpark

Faça ensemble de todos os modelos!

Machine learning com PySpark

Preparing Video For Download...