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
Instruksi latihan
- Impor
numpy. - Ekstrak nilai ROEM terkecil dari daftar
ROEMSyang disediakan menggunakannumpy.argmin(). Metode.argmin()akan mengembalikan indeks dari nilai terendah dalam daftar yang diberikan. Simpan hasilnya sebagaiidan cetaki. - Gunakan pengirisan daftar (list slicing) untuk menemukan nilai dalam daftar
ROEMSpada indeksi.
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: ", ____[____])