Aan de slagBegin gratis

Een cross-validated implicit ALS-model uitvoeren

Nu we meerdere ALS-modellen hebben, elk met een andere set hyperparameters, kunnen we ze trainen op een trainingsdeel van de msd-gegevensset met cross-validatie, en ze daarna uitvoeren op een testset om te evalueren hoe goed elk model presteert met behulp van de eerder besproken ROEM-functie. Helaas kost dit te veel tijd voor deze oefening, dus dit is alvast apart gedaan. Voor je referentie kun je je model_list evalueren met de onderstaande lus (we gebruiken hier de msd-gegevensset):

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

Om je stap voor stap mee te nemen, zijn de testvoorspellingen voor 192 modellen al gegenereerd en is hun ROEM berekend. Ze staan in de meegeleverde lijst ROEMS. Omdat een lijst niet uniek is voor PySpark en numpy heel goed werkt met lijsten, gebruiken we hier numpy. Volg de instructies hieronder om de beste ROEM en het model dat die opleverde te vinden.

Deze oefening maakt deel uit van de cursus

Aanbevelingssystemen bouwen met PySpark

Bekijk cursus

Oefeninstructies

  • Importeer numpy.
  • Haal de kleinste ROEM uit de meegeleverde lijst ROEMS met numpy.argmin(). De methode .argmin() geeft de index terug van de laagste waarde in de opgegeven lijst. Noem het resultaat i en print i.
  • Gebruik list slicing om de waarde in de ROEMS-lijst op index i op te halen.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

# 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: ", ____[____])
Code bewerken en uitvoeren