Ensemble

Machine Learning con PySpark

Andrew Collier

Data Scientist, Fathom Data

Cos’è un ensemble?

È una raccolta di modelli.

Una collezione di modelli simili

Wisdom of the Crowd — l’opinione collettiva di un gruppo è migliore di quella di un singolo esperto.

Machine Learning con PySpark

Diversità nell’ensemble

 

 

 

Diversità e indipendenza sono importanti perché le migliori decisioni collettive nascono dal dissenso e dal confronto, non dal consenso o dal compromesso.

― James Surowiecki, The Wisdom of Crowds

Machine Learning con PySpark

Random Forest

Random Forest — un ensemble di Decision Tree

Creare diversità nel modello:

  • ogni albero è addestrato su un sottoinsieme casuale di dati
  • a ogni nodo si usa un sottoinsieme casuale di feature per lo split

Nessun albero nella foresta dovrebbe essere uguale.

Una collezione di alberi

Machine Learning con PySpark

Crea una foresta di alberi

Torniamo ai dati auto: prodotta negli USA (0.0) o no (1.0).

Crea un classificatore Random Forest.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Addestra sui dati di training.

forest = forest.fit(cars_train)
Machine Learning con PySpark

Vedere gli alberi

Come accedere agli alberi nella foresta?

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]

Ognuno può fare previsioni individuali.

Machine Learning con PySpark

Previsioni dei singoli alberi

Quali previsioni genera ogni albero?

+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
|   0.0|   0.0|   0.0|   0.0|   0.0|  0.0| <- pieno accordo
|   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| <- pieno accordo
+------+------+------+------+------+-----+
Machine Learning con PySpark

Previsioni di consenso

Usa il metodo .transform() per generare previsioni di 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 con PySpark

Importanza delle feature

Il modello usa queste feature: cyl, size, mass, length, rpm e consumption.

Quali sono la più e la meno importanti?

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

Sembra:

  • rpm è la più importante
  • cyl è la meno importante.
Machine Learning con PySpark

Gradient-Boosted Trees

Algoritmo di boosting iterativo:

  1. Crea un Decision Tree e aggiungilo all’ensemble.
  2. Predici l’etichetta per ogni istanza di training con l’ensemble.
  3. Confronta previsioni ed etichette note.
  4. Dai più peso alle istanze con previsioni errate.
  5. Torna al punto 1.

Il modello migliora a ogni iterazione.

Machine Learning con PySpark

Boosting di alberi

Crea un classificatore Gradient-Boosted Tree.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Addestra sui dati di training.

gbt = gbt.fit(cars_train)
Machine Learning con PySpark

Confronto tra alberi

Confrontiamo i tre tipi di modelli ad albero sui dati di test.

# AUC per Decision Tree
0.5875

# AUC per Random Forest
0.65

# AUC per Gradient-Boosted Tree
0.65

Entrambi i metodi ensemble superano un semplice Decision Tree.

Machine Learning con PySpark

Ensemble di tutti i modelli!

Machine Learning con PySpark

Preparing Video For Download...