Ensamble

Machine learning con PySpark

Andrew Collier

Data Scientist, Fathom Data

¿Qué es un ensamble?

Es una colección de modelos.

Una colección de modelos similares

Sabiduría de la multitud: la opinión colectiva de un grupo supera a la de una sola persona experta.

Machine learning con PySpark

Diversidad en el ensamble

 

 

 

La diversidad y la independencia importan porque las mejores decisiones colectivas surgen del desacuerdo y la confrontación, no del consenso ni el compromiso.

― James Surowiecki, The Wisdom of Crowds

Machine learning con PySpark

Random Forest

Random Forest: un ensamble de árboles de decisión

Cómo crear diversidad de modelos:

  • cada árbol se entrena con un subconjunto aleatorio de datos
  • en cada nodo se usa un subconjunto aleatorio de variables para dividir

Ningún árbol del bosque debería ser igual.

Una colección de árboles

Machine learning con PySpark

Crea un bosque de árboles

Volviendo a los datos de coches: fabricado en USA (0.0) o no (1.0).

Crea un clasificador Random Forest.

from pyspark.ml.classification import RandomForestClassifier

forest = RandomForestClassifier(numTrees=5)

Ajusta al conjunto de entrenamiento.

forest = forest.fit(cars_train)
Machine learning con PySpark

Ver los árboles

¿Cómo acceder a los árboles dentro del bosque?

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]

Cada uno puede usarse para hacer predicciones individuales.

Machine learning con PySpark

Predicciones de árboles individuales

¿Qué predicciones genera cada árbol?

+------+------+------+------+------+-----+
|tree 0|tree 1|tree 2|tree 3|tree 4|label|
+------+------+------+------+------+-----+
|   0.0|   0.0|   0.0|   0.0|   0.0|  0.0| <- total acuerdo
|   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| <- total acuerdo
+------+------+------+------+------+-----+
Machine learning con PySpark

Predicciones por consenso

Usa el método .transform() para generar predicciones por consenso.

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

Importancias de variables

El modelo usa estas variables: cyl, size, mass, length, rpm y consumption.

¿Cuál es la más o la menos importante?

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

Parece que:

  • rpm es la más importante
  • cyl es la menos importante.
Machine learning con PySpark

Árboles con Gradient Boosting

Algoritmo iterativo de boosting:

  1. Construye un árbol de decisión y añádelo al ensamble.
  2. Predice la etiqueta de cada instancia de entrenamiento con el ensamble.
  3. Compara las predicciones con las etiquetas reales.
  4. Da más peso a las instancias mal predichas.
  5. Vuelve al paso 1.

El modelo mejora en cada iteración.

Machine learning con PySpark

Boosting de árboles

Crea un clasificador de Gradient-Boosted Trees.

from pyspark.ml.classification import GBTClassifier

gbt = GBTClassifier(maxIter=10)

Ajusta al conjunto de entrenamiento.

gbt = gbt.fit(cars_train)
Machine learning con PySpark

Comparar árboles

Comparemos los tres tipos de modelos de árboles en los datos de prueba.

# AUC para Decision Tree
0.5875

# AUC para Random Forest
0.65

# AUC para Gradient-Boosted Tree
0.65

Ambos métodos de ensamble rinden mejor que un árbol de decisión simple.

Machine learning con PySpark

¡Ensamblemos todos los modelos!

Machine learning con PySpark

Preparing Video For Download...