Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

Hướng dẫn bài tập

  • Import numpy.
  • Trích xuất giá trị ROEM nhỏ nhất từ danh sách ROEMS bằng numpy.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ào i và in i.
  • Dùng cú pháp cắt danh sách để lấy giá trị trong ROEMS tạ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: ", ____[____])
Chỉnh sửa và Chạy Mã