Ensemble

Machine Learning avec PySpark

Andrew Collier

Data Scientist, Fathom Data

Qu'est-ce qu'un ensemble ?

C'est un regroupement de modèles.

Une collection de modèles semblables

Sagesse de la foule — l'opinion collective d'un groupe surpasse celle d'un seul expert.

Machine Learning 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

Machine Learning avec PySpark

Forêt aléatoire

Forêt aléatoire — 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 caractéristiques est utilisé pour le découpage à chaque nœud

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

Une collection d'arbres

Machine Learning avec PySpark

Créer une forêt d'arbres

Revenons aux données sur les voitures : fabriquée aux É.-U. (0.0) ou non (1.0).

Créez un classifieur Forêt aléatoire.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Ajustez-le aux données d'entraînement.

forest = forest.fit(cars_train)
Machine Learning 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 à faire des prédictions individuelles.

Machine Learning 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| <- entente parfaite
|   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| <- entente parfaite
+------+------+------+------+------+-----+
Machine Learning avec PySpark

Prédictions consensuelles

Utilisez la méthode .transform() pour produire des prédictions consensuelles.

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

Importance des caractéristiques

Le modèle utilise ces caractéristiques : 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 constate :

  • rpm est la plus importante
  • cyl est la moins importante.
Machine Learning avec PySpark

Arbres à Gradient Boosted

Algorithme de rehaussement itératif :

  1. Construire un arbre de décision et l'ajouter à l'ensemble.
  2. Prédire l'étiquette de chaque instance d'entraînement avec l'ensemble.
  3. Comparer les prédictions aux étiquettes connues.
  4. Accorder plus de poids aux instances mal prédites.
  5. Revenir à l'étape 1.

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

Machine Learning avec PySpark

Rehausser les arbres

Créez un classifieur à Gradient-Boosted Trees.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Ajustez-le aux données d'entraînement.

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

Comparer les arbres

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

# AUC pour l'arbre de décision
0.5875

# AUC pour la forêt aléatoire
0.65

# AUC pour l'arbre à Gradient Boosted
0.65

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

Machine Learning avec PySpark

Ensemble de tous les modèles !

Machine Learning avec PySpark

Preparing Video For Download...