EmpezarEmpieza gratis

Ejecución de un modelo ALS implícito con validación cruzada

Ahora que tenemos varios modelos ALS, cada uno con un conjunto distinto de hiperparámetros, podemos entrenarlos en una parte de entrenamiento del conjunto de datos msd usando validación cruzada, y después ejecutarlos sobre un conjunto de prueba y evaluar su rendimiento con la función ROEM que vimos antes. Lamentablemente, esto lleva demasiado tiempo para este ejercicio, así que se ha hecho por separado. Pero, para que lo tengas de referencia, puedes evaluar tu model_list con el siguiente bucle (en este caso usamos el conjunto msd):

# Split the data into training and test sets
(training, test) = msd.randomSplit([0.8, 0.2])

#Building 5 folds within the training set.
train1, train2, train3, train4, train5 = training.randomSplit([0.2, 0.2, 0.2, 0.2, 0.2], seed = 1)
fold1 = train2.union(train3).union(train4).union(train5)
fold2 = train3.union(train4).union(train5).union(train1)
fold3 = train4.union(train5).union(train1).union(train2)
fold4 = train5.union(train1).union(train2).union(train3)
fold5 = train1.union(train2).union(train3).union(train4)

foldlist = [(fold1, train1), (fold2, train2), (fold3, train3), (fold4, train4), (fold5, train5)]

# Empty list to fill with ROEMs from each model
ROEMS = []

# Loops through all models and all folds
for model in model_list:
    for ft_pair in foldlist:

        # Fits model to fold within training data
        fitted_model = model.fit(ft_pair[0])

        # Generates predictions using fitted_model on respective CV test data
        predictions = fitted_model.transform(ft_pair[1])

        # Generates and prints a ROEM metric CV test data
        r = ROEM(predictions)
        print ("ROEM: ", r)

    # Fits model to all of training data and generates preds for test data
    v_fitted_model = model.fit(training)
    v_predictions = v_fitted_model.transform(test)
    v_ROEM = ROEM(v_predictions)

    # Adds validation ROEM to ROEM list
    ROEMS.append(v_ROEM)
    print ("Validation ROEM: ", v_ROEM)

Para acompañarte en los pasos, ya se han generado las predicciones de prueba para 192 modelos y se ha calculado su ROEM. Las encontrarás en la lista ROEMS proporcionada. Como una lista no es algo específico de PySpark y numpy funciona muy bien con listas, usaremos numpy aquí. Sigue las instrucciones de abajo para encontrar el mejor ROEM y el modelo que lo obtuvo.

Este ejercicio forma parte del curso

Creación de motores de recomendación con PySpark

Ver curso

Instrucciones del ejercicio

  • Importa numpy.
  • Extrae el ROEM más pequeño de la lista ROEMS usando numpy.argmin(). El método .argmin() devuelve el índice del valor más bajo de la lista. Llama al resultado i e imprime i.
  • Usa indexación de listas para obtener el valor de ROEMS en el índice i.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

# Import numpy
import numpy

# Find the index of the smallest ROEM
i = numpy.____(____)
print("Index of smallest ROEM:", ____)

# Find ith element of ROEMS
print("Smallest ROEM: ", ____[____])
Editar y ejecutar código