Ensemble

Apprentissage automatique avec PySpark

Andrew Collier

Data Scientist, Fathom Data

Qu'est-ce qu'un ensemble ?

C'est un ensemble de modèles.

Une collection de modèles similaires

La sagesse de la foule — l'avis collectif d'un groupe surpasse souvent celui d'un expert seul.

Apprentissage automatique avec PySpark

Diversité des ensembles

 

 

 

La diversité et l'indépendance sont essentielles, car les meilleures décisions collectives naissent du désaccord et de la confrontation, pas du consensus ni du compromis.

― James Surowiecki, The Wisdom of Crowds

Apprentissage automatique avec PySpark

Random Forest

Random Forest — un ensemble d'arbres de décision

Créer de la diversité entre modèles :

  • chaque arbre est entraîné sur un sous-ensemble aléatoire des données
  • un sous-ensemble aléatoire de variables est utilisé pour le découpage à chaque nœud

Aucun arbre de la forêt ne doit être identique.

Une collection d'arbres

Apprentissage automatique avec PySpark

Créer une forêt d'arbres

Revenons aux voitures : fabriquée aux USA (0.0) ou non (1.0).

Créez un classifieur Random Forest.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Ajustez-le sur l'ensemble d'entraînement.

forest = forest.fit(cars_train)
Apprentissage automatique avec PySpark

Voir les arbres

Comment accéder aux arbres de la forêt ?

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]

Chacun peut servir à produire des prédictions individuelles.

Apprentissage automatique avec PySpark

Prédictions des arbres individuels

Quelles prédictions chaque arbre génère-t-il ?

+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
|   0.0|   0.0|   0.0|   0.0|   0.0|  0.0| <- accord parfait
|   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| <- accord parfait
+------+------+------+------+------+-----+
Apprentissage automatique avec PySpark

Prédictions par consensus

Utilisez la méthode .transform() pour générer des prédictions par consensus.

+-----+----------------------------------------+----------+
|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       |
+-----+----------------------------------------+----------+
Apprentissage automatique avec PySpark

Importance des variables

Le modèle utilise ces variables : cyl, size, mass, length, rpm et consumption.

Laquelle est la plus ou la moins importante ?

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

On dirait :

  • rpm est la plus importante
  • cyl est la moins importante.
Apprentissage automatique avec PySpark

Gradient-Boosted Trees

Algorithme de boosting itératif :

  1. Construire un arbre de décision et l'ajouter à l'ensemble.
  2. Prédire le label de chaque instance d'entraînement avec l'ensemble.
  3. Comparer les prédictions aux labels connus.
  4. Accentuer les instances mal prédites.
  5. Revenir à l'étape 1.

Le modèle s'améliore à chaque itération.

Apprentissage automatique avec PySpark

Booster des arbres

Créez un classifieur Gradient-Boosted Tree.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Ajustez-le sur l'ensemble d'entraînement.

gbt = gbt.fit(cars_train)
Apprentissage automatique avec PySpark

Comparer les arbres

Comparons les trois types de modèles d'arbres sur les données de test.

# AUC for Decision Tree
0.5875

# AUC for Random Forest
0.65

# AUC for Gradient-Boosted Tree
0.65

Les deux méthodes d'ensemble font mieux qu'un simple arbre de décision.

Apprentissage automatique avec PySpark

Ensemble de tous les modèles !

Apprentissage automatique avec PySpark

Preparing Video For Download...