Matrix Factorization: Phương pháp gợi ý dựa trên kỹ thuật phân rã ma trận (P2)

Tram Ho

Tương tự như các bài trước, sau lý thuyết ở Phần 1, thì trong phần 2 này mình sẽ trình bày demo thuật toán. Cùng mình tìm hiểu nhé 😃

1. Xây dựng class MF

Hàm khởi tạo

Tham số đầu vào:

  • Y: ma trận Utility, gồm 3 cột, mỗi cột gồm 3 số liệu: user_id, item_id, rating.
  • n_factors: số chiều ẩn giữa các users và items, mặc định n_factors = 2.
  • X: ma trận users
  • W: ma trận ratings
  • lamda: trọng số regularization của hàm mất mát để tránh overfitting , mặc định lamda = 0.1
  • learning_rate: là learning_rate – trọng số Gradient Descent, sử dụng để điều chỉnh tốc độ học., mặc định learning_rate = 2
  • n_epochs: số lần lặp để huấn luyện, mặc định n_epochs = 50
  • top: số lượng items gợi ý cho mỗi user. Mặc định bằng 10.
  • filename: File lưu số liệu đánh giá.

 

 

Thay đổi các trọng số, bạn có thể quan sát ảnh hưởng của trọng số tới kết quả đánh giá cuả thuật toán.

Hàm getUserRated() và getItemsRatedByUser()

Hàm get_user_rated_item(i) trả về danh sách users đã đánh giá item thứ i

Hàm get_item_rated_by_user(u) trả về danh sách items được đánh giá bởi user thứ u

Chúng ta sẽ sử dụng 2 hàm này để tối ưu hai ma trận XW.

Hàm update XW:

Đây là hai hàm tối ưu XW, với số vòng lặp đang được cố định là 50 lần.

 

Thuật toán chính

2. Đánh giá

Tương tự như 2 phương pháp trước, ở đây mình sử dụng 2 độ đo, RMSEPR:

3. Demo với tập dữ liệu Movielen

Kết quả mình thu được là:

Thay đổi các trọng số để tìm bộ trọng số tốt nhất

Source code và tài liệu tham khảo:

Code

https://machinelearningcoban.com/2017/05/31/matrixfactorization/

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo