Ansamblu

Machine Learning cu PySpark

Andrew Collier

Data Scientist, Fathom Data

Ce este un ansamblu?

Este o colecție de modele.

O colecție de modele similare

Înțelepciunea mulțimii — opinia colectivă a unui grup este mai bună decât cea a unui singur expert.

Machine Learning cu PySpark

Diversitatea ansamblului

 

 

 

Diversitatea și independența sunt importante deoarece cele mai bune decizii colective sunt produsul dezacordului și al contestației, nu al consensului sau compromisului.

― James Surowiecki, The Wisdom of Crowds

Machine Learning cu PySpark

Random Forest

Random Forest — un ansamblu de arbori de decizie

Crearea diversității modelului:

  • fiecare arbore antrenat pe un subset aleatoriu de date
  • subset aleatoriu de caracteristici folosit pentru divizare la fiecare nod

Niciun arbore din pădure nu ar trebui să fie identic cu altul.

O colecție de arbori

Machine Learning cu PySpark

Creați o pădure de arbori

Revenind la datele despre mașini: fabricate în SUA (0.0) sau nu (1.0).

Creați un clasificator Random Forest.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Antrenați pe datele de antrenament.

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

Vizualizarea arborilor

Cum se accesează arborii din pădure?

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]

Fiecare poate fi utilizat pentru predicții individuale.

Machine Learning cu PySpark

Predicții din arbori individuali

Ce predicții generează fiecare arbore?

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

Predicții de consens

Utilizați metoda .transform() pentru predicții de consens.

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

Importanța caracteristicilor

Modelul folosește aceste caracteristici: cyl, size, mass, length, rpm și consumption.

Care este cea mai importantă sau cea mai puțin importantă?

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

Rezultat:

  • rpm este cea mai importantă
  • cyl este cea mai puțin importantă.
Machine Learning cu PySpark

Arbori cu Gradient Boosting

Algoritm de boosting iterativ:

  1. Construiți un arbore de decizie și adăugați-l la ansamblu.
  2. Preziceți eticheta fiecărei instanțe de antrenament folosind ansamblul.
  3. Comparați predicțiile cu etichetele cunoscute.
  4. Accentuați instanțele cu predicții incorecte.
  5. Reveniți la pasul 1.

Modelul se îmbunătățește la fiecare iterație.

Machine Learning cu PySpark

Boosting pe arbori

Creați un clasificator GBT.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Antrenați pe datele de antrenament.

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

Compararea arborilor

Să comparăm cele trei tipuri de modele pe datele de testare.

# AUC for Decision Tree
0.5875

# AUC for Random Forest
0.65

# AUC for Gradient-Boosted Tree
0.65

Ambele metode de ansamblu performează mai bine decât un simplu arbore de decizie.

Machine Learning cu PySpark

Ansamblu din toate modelele!

Machine Learning cu PySpark

Preparing Video For Download...