Validación cruzada

Machine learning con PySpark

Andrew Collier

Data Scientist, Fathom Data

Conjunto de datos completo

Machine learning con PySpark

Conjunto de datos dividido en entrenamiento y prueba

Machine learning con PySpark

Datos de entrenamiento divididos en varios folds

Machine learning con PySpark

Fold tras fold: primero

Primer fold

Machine learning con PySpark

Fold tras fold: segundo

Segundo fold

Machine learning con PySpark

Fold tras fold: demás folds

Folds restantes

Machine learning con PySpark

Volvemos a cars

cars.select('mass', 'cyl', 'consumption').show(5)
+------+---+-----------+
|  mass|cyl|consumption|
+------+---+-----------+
|1451.0|  6|       9.05|
|1129.0|  4|       6.53|
|1399.0|  4|       7.84|
|1147.0|  4|       7.84|
|1111.0|  4|       9.05|
+------+---+-----------+
Machine learning con PySpark

Estimador y evaluador

Un objeto para construir el modelo. Puede ser un pipeline.

regression = LinearRegression(labelCol='consumption')

Un objeto para evaluar el rendimiento del modelo.

evaluator = RegressionEvaluator(labelCol='consumption')
Machine learning con PySpark

Rejilla y validador cruzado

from pyspark.ml.tuning import CrossValidator, ParamGridBuilder

Una rejilla de valores de parámetros (por ahora vacía).

params = ParamGridBuilder().build()

El objeto de validación cruzada.

cv = CrossValidator(estimator=regression,
                    estimatorParamMaps=params,
                    evaluator=evaluator,
                    numFolds=10, seed=13)
Machine learning con PySpark

Los validadores cruzados también se entrenan

Aplica validación cruzada a los datos de entrenamiento.

cv = cv.fit(cars_train)

¿Cuál es el RMSE medio entre folds?

cv.avgMetrics
[0.800663722151572]
Machine learning con PySpark

Los validadores cruzados actúan como modelos

Haz predicciones sobre los datos de prueba originales.

evaluator.evaluate(cv.transform(cars_test))
# RMSE en datos de prueba
0.745974203928479

Mucho menor que el RMSE con validación cruzada.

# RMSE de validación cruzada
0.800663722151572

Una simple división train-test habría dado una visión demasiado optimista del rendimiento.

Machine learning con PySpark

¡Valida con VC todos los modelos!

Machine learning con PySpark

Preparing Video For Download...