Neighborhood-based Collaborative Filtering: Phương pháp gợi ý dựa trên láng giềng gần nhất (P2)

Tram Ho

Ở phần 2 này thì mình sẽ viết demo cho Neighborhood-based Collaborative Filtering (NBCF).

Lý thuyết mình đã trình bày ở phần 1, nếu muốn các bạn có thể xem lại tại đây ?

1. Về hàm khoảng cách

Trong bài này, mình sẽ demo với 2 hàm khoảng cách cơ bản là cosinepearson

Với cosine, mình sử dụng hàm cosine_similarity có sẵn của sklearn.

Còn pearson, mình sử dụng pearsonr của scipy. Nhưng do hàm này không nhận ma trận (mảng 2 chiều) nên mình phải convert lại như vậy:

2. Xây dựng class NBCF

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.
  • k: số lượng láng giềng lựa chọn để dự đoán rating.
  • uuCF: Nếu sử dụng uuCF thì uuCF = 1 , ngược lại uuCF = 0. Tham số nhận giá trị mặc định là 1.
  • dist_f: Hàm khoảng cách, như đã nói ở mục 1, ở đây mình sử dụng 2 hàm cosinepearson. Tham số nhận giá trị mặc định là hàm cosine_similarity của klearn.
  • limit: Số lượng items gợi ý cho mỗi user. Mặc định bằng 10.

Lưu ý, class NBCF đồng bộ cho cả hai phương pháp iiCFuuCF nên khi tính toán bằng uuCF, ma trận Utility truyền vào là Y, ngược lại thì cột 0 và 1 của Y được đổi chỗ cho nhau (hoán đổi vị trí của user và item)

Hàm chuẩn hóa

Như lý thuyết trong Phần 1, mỗi rating của mỗi user được chuẩn hóa bằng cách trừ đi trung bình cộng các rating mà user đó đã đánh giá:

Hàm tính khoảng cách tương đồng

Hàm dự đoán rating và đưa ra danh sách items

Lưu ý, với uuCF = 0, mình sẽ thực hiện hàm đổi chỗ 2 tham số ui khi thực hiện hàm pred

3. Đánh giá thuật toán

Tương tự với Content-base, ở đây mình cũng đánh giá thuật toán bằng RMSE và precision recall . Các bạn có thể tham khảo một chút:

Vậy là kết thúc 2 phần của Neighborhood-based Collaborative Filtering. Còn Matrix Factorization nữa thôi là mình sẽ kết thúc chủ đề này. Hy vọng là mình sẽ hoàn thành được ?

Dưới đây là link source code và tài liệu tham khảo. Hẹn gặp bạn ở bài viết tiếp theo nhé ?

Source code

Link tài liệu tham khảo

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo