Chạy mô hình implicit ALS với cross-validation
Giờ bạn đã có một số mô hình ALS, mỗi mô hình dùng một bộ siêu tham số khác nhau, chúng ta có thể huấn luyện chúng trên phần dữ liệu huấn luyện của tập msd bằng cross validation, sau đó chạy trên tập kiểm tra và đánh giá hiệu năng của từng mô hình bằng hàm ROEM đã bàn trước đó. Tiếc là việc này tốn quá nhiều thời gian cho bài tập này, nên đã được thực hiện sẵn. Tuy vậy, để bạn tham khảo, bạn có thể đánh giá model_list của mình bằng vòng lặp sau (ở đây chúng ta dùng tập 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)
Để hướng dẫn bạn theo từng bước, dự đoán trên tập kiểm tra cho 192 mô hình đã được tạo sẵn và ROEM của chúng đã được tính. Các giá trị này nằm trong danh sách ROEMS đã cung cấp. Vì danh sách không phải là kiểu riêng của PySpark và numpy xử lý danh sách rất tốt, chúng ta sẽ dùng numpy ở đây. Hãy làm theo hướng dẫn dưới đây để tìm ROEM tốt nhất và mô hình tạo ra nó.
Bài tập này là một phần của khóa học
Xây dựng Recommendation Engine với PySpark
Hướng dẫn bài tập
- Import
numpy. - Trích xuất giá trị ROEM nhỏ nhất từ danh sách
ROEMSbằngnumpy.argmin(). Phương thức.argmin()sẽ trả về chỉ số của giá trị nhỏ nhất trong danh sách. Gán kết quả vàoivà ini. - Dùng cú pháp cắt danh sách để lấy giá trị trong
ROEMStại chỉ sối.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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: ", ____[____])