Filtrage collaboratif
from scipy.sparse.linalg import svds
import numpy as np
# SVD-based matrix factorization
U, sigma, Vt = svds(R, k=50) # R = user-item matrix
predictions = np.dot(np.dot(U, np.diag(sigma)), Vt)
Neural CF avec PyTorch
class NeuralCF(nn.Module):
def __init__(self, n_users, n_items, embed_dim=64):
super().__init__()
self.user_embed = nn.Embedding(n_users, embed_dim)
self.item_embed = nn.Embedding(n_items, embed_dim)
self.mlp = nn.Sequential(
nn.Linear(embed_dim*2, 128), nn.ReLU(),
nn.Linear(128, 64), nn.ReLU(),
nn.Linear(64, 1), nn.Sigmoid()
)
def forward(self, user_ids, item_ids):
u = self.user_embed(user_ids)
i = self.item_embed(item_ids)
return self.mlp(torch.cat([u, i], dim=-1))
Métriques d'évaluation
- NDCG@K : Normalized Discounted Cumulative Gain
- HR@K : Hit Rate à K
- MRR : Mean Reciprocal Rank