Mulai sekarangMulai gratis

Menjalankan model ALS implisit dengan validasi silang

Sekarang kita memiliki beberapa model ALS, masing-masing dengan seperangkat nilai hiperparameter yang berbeda, kita dapat melatihnya pada bagian pelatihan dari himpunan data msd menggunakan validasi silang, lalu menjalankannya pada himpunan data uji dan mengevaluasi kinerjanya menggunakan fungsi ROEM yang telah dibahas sebelumnya. Sayangnya, ini memerlukan waktu terlalu lama untuk latihan ini, sehingga telah dilakukan terpisah. Namun, sebagai referensi, Anda dapat mengevaluasi model_list Anda menggunakan loop berikut (pada kasus ini kita menggunakan himpunan data 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)

Untuk memandu Anda melalui langkah-langkahnya, prediksi uji untuk 192 model sudah dihasilkan dan nilai ROEM-nya telah dihitung. Nilai-nilai tersebut ada dalam daftar ROEMS yang disediakan. Karena daftar bukanlah struktur khusus PySpark dan numpy bekerja sangat baik dengan daftar, kita akan menggunakan numpy di sini. Ikuti instruksi di bawah untuk menemukan ROEM terbaik dan model yang menghasilkannya.

Latihan ini merupakan bagian dari kursus

Membangun Recommendation Engine dengan PySpark

Lihat Kursus

Instruksi latihan

  • Impor numpy.
  • Ekstrak nilai ROEM terkecil dari daftar ROEMS yang disediakan menggunakan numpy.argmin(). Metode .argmin() akan mengembalikan indeks dari nilai terendah dalam daftar yang diberikan. Simpan hasilnya sebagai i dan cetak i.
  • Gunakan pengirisan daftar (list slicing) untuk menemukan nilai dalam daftar ROEMS pada indeks i.

Latihan interaktif langsung praktik

Cobalah latihan ini dengan melengkapi kode contoh ini.

# 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: ", ____[____])
Edit dan Jalankan Kode