Hệ thống gợi ý lọc cộng tác Item-Item với độ tương đồng Cosine hiệu chỉnh
Sim(i, j) = ⟦frac:Σu ∈ Ui, j (Ru, i - Ru)(Ru, j - Ru)|√(Σu ∈ Ui, j (Ru, i - Ru)2) √(Σu ∈ Ui, j (Ru, j - Ru)⟦su
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: matrix operations, adjusted cosine, normalization.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu hạn chế của Cosine thông thường khi người dùng có xu hướng chấm điểm khắt khe hoặc hào phóng khác nhau.
- Triển khai Adjusted Cosine Similarity giữa 2 vật phẩm i và j:
Sim(i, j) = Σu ∈ Ui, j (Ru, i - Ru)(Ru, j - Ru)√(Σu ∈ Ui, j (Ru, i - Ru)2) √(Σu ∈ Ui, j (Ru, j - Ru)2) trong đó Ui, j là tập người dùng đánh giá cả i và j, Ru là điểm đánh giá trung bình của người dùng u. Nếu |Ui, j| < mincommonusers hoặc mẫu số bằng 0, Sim(i, j) = 0.0.
- Dự đoán điểm số của người dùng u cho vật phẩm i chưa đánh giá:
Ru, i = Ru + Σj ∈ Sk(i) Sim(i, j) · (Ru, j - Ru)Σj ∈ Sk(i) |Sim(i, j)| trong đó Sk(i) là tập tối đa k vật phẩm có Sim(i, j) > 0 mà người dùng u đã từng đánh giá. Nếu mẫu số bằng 0, gán Ru, i = Ru.
Mô tả bài toán
Cài đặt lớp ItemItemRecommender(k=2, min_common_users=1):
- fit(self, rating_matrix: np.ndarray) -> self:
- rating_matrix: mảng 2D kích thước (M, N) với M người dùng và N vật phẩm. Giá trị np.nan thể hiện người dùng chưa đánh giá vật phẩm đó.
- Kiểm tra: mảng 2D, không rỗng. Nếu sai, raise ValueError.
- Tính toán và lưu trữ ma trận độ tương đồng kích thước (N, N).
- predict(self, user_idx: int, item_idx: int) -> float:
- Trả về điểm số dự đoán của user_idx cho item_idx.
- Nếu user_idx hoặc item_idx nằm ngoài phạm vi, raise IndexError.
Input
- Các tham số truyền vào hàm/lớp ItemItemRecommender hoặc dữ liệu đầu vào theo định dạng mô tả.
Output
- Kết quả trả về của hàm/lớp ItemItemRecommender hoặc dữ liệu in ra màn hình theo đúng đặc tả.
Ràng buộc
- Thời gian chạy tối đa: 1500ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
ItemItemRecommender(matrix=[[5.0, 3.0, None], [4.0, None, 4.0], [1.0, 1.0, None]], user_idx=0, item_idx=2, k=1)
Output
[3.0, 5.5]
Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
ItemItemRecommender(matrix=[[1.0, 2.0]], user_idx=5, item_idx=0)
Output
True
Giải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
