Ensemble

Uczenie maszynowe z PySpark

Andrew Collier

Data Scientist, Fathom Data

Czym jest ensemble?

To zbiór modeli.

Zbiór podobnych modeli

Mądrość tłumu — zbiorowa opinia grupy lepsza niż zdanie pojedynczego eksperta.

Uczenie maszynowe z PySpark

Różnorodność ensemble

 

 

 

Różnorodność i niezależność są ważne, ponieważ najlepsze decyzje zbiorowe są wynikiem niezgody i rywalizacji, a nie konsensusu czy kompromisu.

― James Surowiecki, The Wisdom of Crowds

Uczenie maszynowe z PySpark

Random Forest

Random Forest — ensemble drzew decyzyjnych

Tworzenie różnorodności modeli:

  • każde drzewo trenowane na losowym podzbiorze danych
  • losowy podzbiór cech używany do podziałów w węzłach

Żadne dwa drzewa w lesie nie powinny być identyczne.

Zbiór drzew

Uczenie maszynowe z PySpark

Tworzenie lasu drzew

Powracamy do danych o samochodach: wyprodukowany w USA (0.0) lub nie (1.0).

Tworzenie klasyfikatora Random Forest.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Dopasowanie do danych treningowych.

forest = forest.fit(cars_train)
Uczenie maszynowe z PySpark

Podgląd drzew

Jak uzyskać dostęp do drzew w lesie?

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żde z nich można użyć do samodzielnych predykcji.

Uczenie maszynowe z PySpark

Predykcje poszczególnych drzew

Jakie predykcje generuje każde drzewo?

+------+------+------+------+------+-----+
|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
+------+------+------+------+------+-----+
Uczenie maszynowe z PySpark

Predykcje konsensusowe

Metoda .transform() generuje predykcje konsensusowe.

+-----+----------------------------------------+----------+
|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       |
+-----+----------------------------------------+----------+
Uczenie maszynowe z PySpark

Ważność cech

Model używa cech: cyl, size, mass, length, rpm i consumption.

Która z nich jest najważniejsza, a która najmniej?

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

Wynika z tego:

  • rpm jest najważniejsza
  • cyl jest najmniej ważna.
Uczenie maszynowe z PySpark

Gradient-Boosted Trees

Iteracyjny algorytm boostingu:

  1. Zbuduj drzewo decyzyjne i dodaj do ensemble.
  2. Przewiduj etykiety dla każdej instancji treningowej.
  3. Porównaj predykcje ze znanymi etykietami.
  4. Zwiększ wagę instancji z błędnymi predykcjami.
  5. Wróć do kroku 1.

Model poprawia się z każdą iteracją.

Uczenie maszynowe z PySpark

Boosting drzew

Tworzenie klasyfikatora Gradient-Boosted Tree.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Dopasowanie do danych treningowych.

gbt = gbt.fit(cars_train)
Uczenie maszynowe z PySpark

Porównanie drzew

Porównajmy trzy typy modeli drzewiastych na danych testowych.

# AUC for Decision Tree
0.5875

# AUC for Random Forest
0.65

# AUC for Gradient-Boosted Tree
0.65

Obie metody ensemble działają lepiej niż pojedyncze drzewo decyzyjne.

Uczenie maszynowe z PySpark

Ensemble wszystkich modeli!

Uczenie maszynowe z PySpark

Preparing Video For Download...