LoslegenKostenlos starten

Ein cross-validiertes implizites ALS-Modell ausführen

Jetzt, da wir mehrere ALS-Modelle mit unterschiedlichen Hyperparameterwerten haben, können wir sie mithilfe von Cross-Validation auf einem Trainingsanteil des msd-Datensatzes trainieren, sie anschließend auf einem Testdatensatz ausführen und mit der zuvor besprochenen Funktion ROEM bewerten, wie gut jedes Modell abschneidet. Leider dauert das für diese Übung zu lange, daher wurde es separat durchgeführt. Zu deiner Orientierung kannst du deine model_list aber mit der folgenden Schleife auswerten (wir verwenden hier den msd-Datensatz):

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

Um dich Schritt für Schritt durch den Prozess zu führen, wurden die Testvorhersagen für 192 Modelle bereits erzeugt und ihr ROEM berechnet. Du findest sie in der bereitgestellten Liste ROEMS. Da eine Liste nicht spezifisch für PySpark ist und numpy hervorragend mit Listen funktioniert, verwenden wir hier numpy. Folge den Anweisungen unten, um den besten ROEM und das Modell zu finden, das ihn geliefert hat.

Diese Übung ist Teil des Kurses

<Kurs>Recommendation Engines mit PySpark erstellen</Kurs>
Kurs ansehen

Übungsanweisungen

  • Importiere numpy.
  • Ermittle den kleinsten ROEM aus der bereitgestellten Liste ROEMS mit numpy.argmin(). Die Methode .argmin() gibt den Index des kleinsten Werts in der übergebenen Liste zurück. Nenne das Ergebnis i und gib i aus.
  • Verwende Listenslicing, um den Wert in der Liste ROEMS an Index i zu finden.

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

# 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 bearbeiten und ausführen