Ensemble

Maskininlärning med PySpark

Andrew Collier

Data Scientist, Fathom Data

Vad är ett ensemble?

En samling modeller.

En samling likartade modeller

Folkmassan har rätt — en grupps samlade bedömning är bättre än en enskild experts.

Maskininlärning med PySpark

Mångfald i ensemble

 

 

 

Mångfald och oberoende är viktigt eftersom de bästa kollektiva besluten är resultatet av oenighet och tävlan, inte konsensus eller kompromiss.

― James Surowiecki, The Wisdom of Crowds

Maskininlärning med PySpark

Random Forest

Random Forest — ett ensemble av beslutsträd

Skapar modellmångfald:

  • varje träd tränas på ett slumpmässigt urval av data
  • ett slumpmässigt urval av särdrag används vid varje noddelning

Inget träd i skogen ska vara det andra likt.

En samling träd

Maskininlärning med PySpark

Skapa en skog av träd

Tillbaka till bildata: tillverkad i USA (0.0) eller inte (1.0).

Skapa en Random Forest-klassificerare.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Anpassa till träningsdata.

forest = forest.fit(cars_train)
Maskininlärning med PySpark

Se träden

Hur kommer man åt träden i skogen?

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]

Vart och ett kan användas för individuella prediktioner.

Maskininlärning med PySpark

Prediktioner från enskilda träd

Vilka prediktioner genererar varje träd?

+------+------+------+------+------+-----+
|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
+------+------+------+------+------+-----+
Maskininlärning med PySpark

Konsensusprediktioner

Använd metoden .transform() för att generera konsensusprediktioner.

+-----+----------------------------------------+----------+
|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       |
+-----+----------------------------------------+----------+
Maskininlärning med PySpark

Särdragsvikter

Modellen använder dessa särdrag: cyl, size, mass, length, rpm och consumption.

Vilket är mest respektive minst viktigt?

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

Resultatet visar:

  • rpm är viktigast
  • cyl är minst viktigt.
Maskininlärning med PySpark

Gradient-Boosted Trees

Iterativ boostingalgoritm:

  1. Bygg ett beslutsträd och lägg till i ensemblet.
  2. Prediktera etikett för varje träningsinstans med ensemblet.
  3. Jämför prediktioner med kända etiketter.
  4. Betona träningsinstanser med felaktiga prediktioner.
  5. Återgå till 1.

Modellen förbättras för varje iteration.

Maskininlärning med PySpark

Boosting av träd

Skapa en Gradient-Boosted Tree-klassificerare.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Anpassa till träningsdata.

gbt = gbt.fit(cars_train)
Maskininlärning med PySpark

Jämföra träd

Låt oss jämföra de tre trädmodellerna på testdata.

# AUC for Decision Tree
0.5875

# AUC for Random Forest
0.65

# AUC for Gradient-Boosted Tree
0.65

Båda ensemblemetoderna presterar bättre än ett enkelt beslutsträd.

Maskininlärning med PySpark

Kombinera alla modeller!

Maskininlärning med PySpark

Preparing Video For Download...