ÎncepețiÎncepe gratuit

Rularea unui model ALS implicit cu validare încrucișată

Acum că avem mai multe modele ALS, fiecare cu un set diferit de valori ale hiperparametrilor, le putem antrena pe o porțiune de antrenament a setului de date msd folosind validarea încrucișată, apoi le putem rula pe un set de testare și evalua cât de bine performează fiecare, folosind funcția ROEM discutată anterior. Din păcate, acest proces necesită prea mult timp pentru acest exercițiu, așa că a fost realizat separat. Ca referință, poți evalua model_list folosind bucla de mai jos (în acest caz folosim setul de date 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)

Pentru a-ți parcurge pașii, predicțiile de testare pentru 192 de modele au fost deja generate, iar valoarea ROEM a fost calculată pentru fiecare. Acestea se găsesc în lista ROEMS furnizată. Deoarece o listă nu este specifică PySpark și numpy funcționează foarte bine cu liste, vom folosi numpy aici. Urmează instrucțiunile de mai jos pentru a găsi cel mai bun ROEM și modelul care l-a produs.

Acest exercițiu face parte din cursul

Construiește motoare de recomandare cu PySpark

Vezi cursul

Instrucțiuni pentru exercițiu

  • Importă numpy.
  • Extrage cel mai mic ROEM din lista ROEMS furnizată folosind numpy.argmin(). Metoda .argmin() returnează indexul celei mai mici valori din lista dată. Numește rezultatul i și afișează i.
  • Folosește feliere de listă pentru a găsi valoarea din lista ROEMS la indexul i.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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: ", ____[____])
Editează și rulează codul