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
Instructions de l’exercice
- Importez
numpy. - Extrayez le plus petit ROEM de la liste
ROEMSfournie en utilisantnumpy.argmin(). La méthode.argmin()retourne l'indice de la plus faible valeur dans la liste fournie. Nommez le résultatiet affichezi. - Utilisez le découpage de liste (list slicing) pour récupérer la valeur dans
ROEMSà l'indicei.
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: ", ____[____])