Kom igångKom igång gratis

Kör en korsvaliderad implicit ALS-modell

Nu när vi har flera ALS-modeller, var och en med olika hyperparametervärden, kan vi träna dem på en träningsdel av datamängden msd med korsvalidering och sedan köra dem på en testmängd för att utvärdera hur väl varje modell presterar med hjälp av funktionen ROEM som vi diskuterade tidigare. Det tar tyvärr för lång tid att göra detta i den här övningen, så det har gjorts separat. Som referens kan du utvärdera din model_list med följande loop (vi använder datamängden msd i det här fallet):

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

För att guida dig genom stegen har testprediktionerna för 192 modeller redan genererats och deras ROEM beräknats. De finns i listan ROEMS som tillhandahålls. Eftersom en lista inte är unik för PySpark, och eftersom numpy fungerar mycket bra med listor, använder vi numpy här. Följ instruktionerna nedan för att hitta det bästa ROEM-värdet och den modell som gav det.

Den här övningen är en del av kursen

Bygg rekommendationsmotorer med PySpark

Visa kurs

Övningsinstruktioner

  • Importera numpy.
  • Extrahera det lägsta ROEM-värdet från den tillhandahållna listan ROEMS med hjälp av numpy.argmin(). Metoden .argmin() returnerar indexet för det lägsta värdet i listan. Spara resultatet i i och skriv ut i.
  • Använd listindexering för att hämta värdet i listan ROEMS vid index i.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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: ", ____[____])
Redigera och kör kod