Recsys đơn giản bằng 10 dòng code


#1

Mình xin chia sẻ cách giải quyết bài toán Recommendation theo hướng tiếp cận Collaborative Filtering với thuật toán KNN-itembased

Load các thư viện cần thiết

import numpy as np
import pandas as pd
from sklearn.neighbors import NearestNeighbors

Đọc dữ liệu từ file

Ở đây mình sử dụng tập movielen 1M - Các bạn có thể xem tại đây

df = pd.read_csv('ml-1m/ratings.dat',sep='::',names=['UserID','ItemID','Rating','Timestamp'])
df.head()

Xử lý dữ liệu

Ở đây mình chuyển danh sách cạnh : (user,item,rating) thành ma trận vuông :M(U,I), sử dụng pivot của pandas. Hàm fillna(0) để điền vào vị trí (U,I) trống thể hiện user chưa xếp hạng cho item

df_pivot = df.pivot(index='ItemID',columns='UserID',values='Rating').fillna(0)

Lấy dữ liệu rating

ratings = df_pivot.values

KNN - model

Bạn có thể thay đổi metric bằng 'cosine'. Tham khảo NearestNeighbors

model_knn = NearestNeighbors(metric='euclidean',algorithm='kd_tree')
model_knn.fit(ratings)

Build

giả sử mình chọn toàn bộ rating của item1

item1_ratings = df_pivot.iloc[1,:].values.reshape(1,-1)

sau đó gọi hàm phía dưới để lấy những item gần nhất với item1

dist,k_item = model_knn.kneighbors(item1_ratings,n_neighbors=10)

dist ở đây chính là khoảng cách giữa các item với item1

dist.flatten()

k_item là tên các item đó

k_item.flatten()

Source code


Recommend System