Ensemble

Machine Learning with PySpark

Andrew Collier

Data Scientist, Fathom Data

Co je ensemble?

Je to kolekce modelů.

Kolekce podobných modelů

Moudrost davu — kolektivní úsudek skupiny je lepší než názor jednotlivého experta.

Machine Learning with PySpark

Rozmanitost ensemble

 

 

 

Rozmanitost a nezávislost jsou důležité, protože nejlepší kolektivní rozhodnutí jsou výsledkem neshody a soutěže, nikoli konsensu nebo kompromisu.

― James Surowiecki, The Wisdom of Crowds

Machine Learning with PySpark

Random Forest

Random Forest — ensemble rozhodovacích stromů

Vytváření rozmanitosti modelů:

  • každý strom trénován na náhodné podmnožině dat
  • pro dělení v každém uzlu se používá náhodná podmnožina příznaků

Žádné dva stromy v lese by neměly být stejné.

Kolekce stromů

Machine Learning with PySpark

Vytvoření lesa stromů

Zpět k datům o autech: vyrobeno v USA (0.0) nebo ne (1.0).

Vytvořte klasifikátor Random Forest.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Natrénujte na trénovacích datech.

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

Zobrazení stromů

Jak přistupovat ke stromům uvnitř lesa?

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]

Každý z nich lze použít k individuálním predikcím.

Machine Learning with PySpark

Predikce jednotlivých stromů

Jaké predikce generuje každý strom?

+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
|   0.0|   0.0|   0.0|   0.0|   0.0|  0.0| <- perfect agreement
|   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| <- perfect agreement
+------+------+------+------+------+-----+
Machine Learning with PySpark

Konsensuální predikce

Pomocí metody .transform() generujte konsensuální predikce.

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

Důležitost příznaků

Model využívá tyto příznaky: cyl, size, mass, length, rpm a consumption.

Který z nich je nejdůležitější nebo nejméně důležitý?

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

Výsledek:

  • rpm je nejdůležitější
  • cyl je nejméně důležitý.
Machine Learning with PySpark

Gradient-Boosted Trees

Iterativní posilovací algoritmus:

  1. Sestavte rozhodovací strom a přidejte ho do ensemble.
  2. Předpovězte štítek každé trénovací instance pomocí ensemble.
  3. Porovnejte predikce se známými štítky.
  4. Zdůrazněte trénovací instance s nesprávnými predikcemi.
  5. Vraťte se na krok 1.

Model se s každou iterací zlepšuje.

Machine Learning with PySpark

Posilování stromů

Vytvořte klasifikátor Gradient-Boosted Tree.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Natrénujte na trénovacích datech.

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

Porovnání stromů

Porovnejme tři typy stromových modelů na testovacích datech.

# AUC for Decision Tree
0.5875

# AUC for Random Forest
0.65

# AUC for Gradient-Boosted Tree
0.65

Obě ensemble metody dosahují lepších výsledků než samostatný rozhodovací strom.

Machine Learning with PySpark

Ensemble ze všech modelů!

Machine Learning with PySpark

Preparing Video For Download...