Ensemble

Maschinelles Lernen mit PySpark

Andrew Collier

Data Scientist, Fathom Data

Was ist ein Ensemble?

Das ist eine Sammlung von Modellen.

Eine Sammlung ähnlicher Modelle

Weisheit der Vielen — die kollektive Meinung einer Gruppe ist besser als die eines einzelnen Experten.

Maschinelles Lernen mit PySpark

Ensemble-Vielfalt

 

 

 

Vielfalt und Unabhängigkeit sind wichtig, weil die besten kollektiven Entscheidungen aus Meinungsverschiedenheit und Wettbewerb entstehen, nicht aus Konsens oder Kompromiss.

― James Surowiecki, The Wisdom of Crowds

Maschinelles Lernen mit PySpark

Random Forest

Random Forest — ein Ensemble aus Entscheidungsbäumen

So entsteht Modellvielfalt:

  • jeder Baum wird auf einem zufälligen Teil der Daten trainiert
  • zufälliger Teil der Features für Splits an jedem Knoten

Kein Baum im Wald sollte identisch sein.

Eine Sammlung von Bäumen

Maschinelles Lernen mit PySpark

Einen Wald aus Bäumen erstellen

Zurück zu den Autodaten: in den USA gefertigt (0.0) oder nicht (1.0).

Erstelle einen Random-Forest-Klassifikator.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Fit auf die Trainingsdaten.

forest = forest.fit(cars_train)
Maschinelles Lernen mit PySpark

Die Bäume sehen

Wie greifst du auf die Bäume im Forest zu?

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]

Jeder davon kann eigene Vorhersagen machen.

Maschinelles Lernen mit PySpark

Vorhersagen einzelner Bäume

Welche Vorhersagen erzeugt jeder Baum?

+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
|   0.0|   0.0|   0.0|   0.0|   0.0|  0.0| <- vollständige Übereinstimmung
|   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| <- vollständige Übereinstimmung
+------+------+------+------+------+-----+
Maschinelles Lernen mit PySpark

Konsensvorhersagen

Verwende die Methode .transform(), um Konsensvorhersagen zu erzeugen.

+-----+----------------------------------------+----------+
|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       |
+-----+----------------------------------------+----------+
Maschinelles Lernen mit PySpark

Feature-Importances

Das Modell nutzt diese Features: cyl, size, mass, length, rpm und consumption.

Welche davon sind am wichtigsten bzw. unwichtigsten?

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

Sieht so aus:

  • rpm ist am wichtigsten
  • cyl ist am unwichtigsten.
Maschinelles Lernen mit PySpark

Gradient-Boosted Trees

Iterativer Boosting-Algorithmus:

  1. Einen Entscheidungsbaum bauen und zum Ensemble hinzufügen.
  2. Für jedes Trainingsbeispiel mit dem Ensemble das Label vorhersagen.
  3. Vorhersagen mit bekannten Labels vergleichen.
  4. Trainingsbeispiele mit falschen Vorhersagen stärker gewichten.
  5. Zurück zu 1.

Das Modell wird mit jeder Iteration besser.

Maschinelles Lernen mit PySpark

Bäume boosten

Erstelle einen Gradient-Boosted-Tree-Klassifikator.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Fit auf die Trainingsdaten.

gbt = gbt.fit(cars_train)
Maschinelles Lernen mit PySpark

Bäume vergleichen

Vergleichen wir die drei Baumtypen auf Testdaten.

# AUC für Decision Tree
0.5875

# AUC für Random Forest
0.65

# AUC für Gradient-Boosted Tree
0.65

Beide Ensemble-Methoden schneiden besser ab als ein einzelner Entscheidungsbaum.

Maschinelles Lernen mit PySpark

Ensembles aus allen Modellen!

Maschinelles Lernen mit PySpark

Preparing Video For Download...