CommencezCommencez gratuitement

Exécuter un modèle ALS implicite avec validation croisée

Maintenant que nous avons plusieurs modèles ALS, chacun avec un ensemble différent d'hyperparamètres, nous pouvons les entraîner sur une portion d'entraînement du jeu de données msd à l'aide de la validation croisée, puis les exécuter sur un jeu de test et évaluer leur performance avec la fonction ROEM vue plus tôt. Malheureusement, cela prend trop de temps pour cet exercice, donc cela a été fait séparément. À titre de référence, vous pouvez toutefois évaluer votre model_list avec la boucle suivante (nous utilisons le jeu de données msd dans ce cas) :

# 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)

Pour vous guider dans les étapes, les prédictions de test de 192 modèles ont déjà été générées et leur ROEM a été calculé. Elles se trouvent dans la liste ROEMS fournie. Comme une liste n'est pas propre à PySpark, et que numpy fonctionne très bien avec les listes, nous allons utiliser numpy ici. Suivez les instructions ci-dessous pour trouver le meilleur ROEM et le modèle qui l'a produit.

Cette activité fait partie du cours

Créer des moteurs de recommandation avec PySpark

Voir le cours

Instructions de l’exercice

  • Importez numpy.
  • Extrayez le plus petit ROEM de la liste ROEMS fournie en utilisant numpy.argmin(). La méthode .argmin() retourne l'indice de la plus faible valeur dans la liste fournie. Nommez le résultat i et affichez i.
  • Utilisez le découpage de liste (list slicing) pour récupérer la valeur dans ROEMS à l'indice i.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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: ", ____[____])
Modifier et exécuter le code