CommencerCommencez gratuitement

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

Maintenant que nous avons plusieurs modèles ALS, chacun avec un jeu 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 leurs performances avec la fonction ROEM présentée plus tôt. Malheureusement, cela prendrait trop de temps pour cet exercice, donc cela a été fait séparément. Pour référence, vous pouvez toutefois évaluer votre model_list avec la boucle suivante (nous utilisons ici le jeu de données 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)

Pour vous guider pas à pas, les prédictions de test pour 192 modèles ont déjà été générées et leur ROEM a été calculé. Vous les trouverez dans la liste ROEMS fournie. Comme une liste n’est pas propre à PySpark, et que numpy gère très bien 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.

Cet exercice fait partie du cours

<cours>Créer des moteurs de recommandation avec PySpark</cours>
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() renverra l’indice de la plus petite valeur de la liste. Appelez le résultat i et affichez i.
  • Utilisez l’indexation de liste pour récupérer la valeur de la liste 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