Ensemble

Machine Learning met PySpark

Andrew Collier

Data Scientist, Fathom Data

Wat is een ensemble?

Het is een verzameling modellen.

Een verzameling vergelijkbare modellen

Wisdom of the Crowd — de collectieve mening is vaak beter dan die van één expert.

Machine Learning met PySpark

Ensemblediversiteit

 

 

 

Diversiteit en onafhankelijkheid zijn belangrijk, omdat de beste collectieve beslissingen voortkomen uit meningsverschil en debat, niet uit consensus of compromis.

― James Surowiecki, The Wisdom of Crowds

Machine Learning met PySpark

Random Forest

Random Forest — een ensemble van Decision Trees

Diversiteit creëren:

  • elke boom getraind op een willekeurige subset van data
  • willekeurige subset van features voor splitsen op elke node

Geen twee bomen in het bos zijn hetzelfde.

Een verzameling bomen

Machine Learning met PySpark

Maak een bos van bomen

Terug naar de autodata: gemaakt in de VS (0.0) of niet (1.0).

Maak een Random Forest-classifier.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Fit op de trainingsdata.

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

De bomen zien

Hoe krijg je toegang tot de bomen in het bos?

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]

Deze kun je elk gebruiken voor individuele voorspellingen.

Machine Learning met PySpark

Voorspellingen per boom

Welke voorspellingen geeft elke boom?

+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
|   0.0|   0.0|   0.0|   0.0|   0.0|  0.0| <- perfecte overeenstemming
|   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| <- perfecte overeenstemming
+------+------+------+------+------+-----+
Machine Learning met PySpark

Consensusvoorspellingen

Gebruik de methode .transform() om consensusvoorspellingen te maken.

+-----+----------------------------------------+----------+
|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 met PySpark

Feature-importance

Het model gebruikt deze features: cyl, size, mass, length, rpm en consumption.

Welke is het belangrijkst of minst belangrijk?

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

Ziet eruit als:

  • rpm is het belangrijkst
  • cyl is het minst belangrijk.
Machine Learning met PySpark

Gradient-Boosted Trees

Iteratief boosting-algoritme:

  1. Bouw een Decision Tree en voeg toe aan het ensemble.
  2. Voorspel het label voor elke trainingsinstantie met het ensemble.
  3. Vergelijk voorspellingen met bekende labels.
  4. Leg meer nadruk op trainingsinstanties met foute voorspellingen.
  5. Terug naar 1.

Het model verbetert bij elke iteratie.

Machine Learning met PySpark

Bomen boosten

Maak een Gradient-Boosted Tree-classifier.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Fit op de trainingsdata.

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

Bomen vergelijken

Vergelijk de drie boommodellen op testdata.

# AUC voor Decision Tree
0.5875

# AUC voor Random Forest
0.65

# AUC voor Gradient-Boosted Tree
0.65

Beide ensemblemethoden presteren beter dan een losse Decision Tree.

Machine Learning met PySpark

Ensemble alle modellen!

Machine Learning met PySpark

Preparing Video For Download...