Inizia subitoInizia gratis

Esecuzione di un modello ALS implicito con convalida incrociata

Ora che abbiamo diversi modelli ALS, ognuno con un diverso set di iperparametri, possiamo addestrarli su una parte di training dell'insieme di dati msd usando la convalida incrociata, quindi eseguirli su un insieme di test e valutare le prestazioni di ciascuno usando la funzione ROEM di cui abbiamo parlato prima. Purtroppo questo richiede troppo tempo per questo esercizio, quindi è stato fatto separatamente. Per riferimento, però, puoi valutare il tuo model_list usando il seguente ciclo (in questo caso stiamo usando l'insieme di dati 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)

Per accompagnarti passo passo, le predizioni di test per 192 modelli sono già state generate e il loro ROEM è stato calcolato. Si trovano nella lista ROEMS fornita. Poiché una lista non è specifica di PySpark e perché numpy funziona molto bene con le liste, qui useremo numpy. Segui le istruzioni qui sotto per trovare il ROEM migliore e il modello che lo ha prodotto.

Questo esercizio fa parte del corso

Costruire motori di raccomandazione con PySpark

Visualizza corso

Istruzioni dell'esercizio

  • Importa numpy.
  • Estrai il ROEM più piccolo dalla lista ROEMS fornita usando numpy.argmin(). Il metodo .argmin() restituisce l'indice del valore più basso nella lista data. Chiama il risultato i e stampa i.
  • Usa lo slicing delle liste per trovare il valore nella lista ROEMS all'indice i.

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

# 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: ", ____[____])
Modifica ed esegui il codice