推荐系统原理与实现:协同过滤/内容推荐/深度学习
推荐系统原理与实现协同过滤/内容推荐/深度学习1. 推荐系统分类推荐系统方法 ├── 协同过滤Collaborative Filtering │ ├── 基于用户相似用户喜欢的物品 │ ├── 基于物品相似物品推荐 │ └── 矩阵分解SVD/ALS ├── 基于内容Content-Based │ ├── 物品特征匹配 │ └── 用户画像匹配 ├── 混合推荐Hybrid │ └── 多种方法组合 └── 深度学习推荐 ├── Wide Deep ├── DeepFM └── Two-Tower2. 协同过滤importnumpyasnpfromsklearn.metrics.pairwiseimportcosine_similarity# 用户-物品矩阵# R[i][j] 用户 i 对物品 j 的评分Rnp.array([[5,3,0,1],[4,0,0,1],[1,1,0,5],[0,0,5,4],])# 基于用户的协同过滤user_simcosine_similarity(R)print(用户相似度矩阵:)print(user_sim)# 基于物品的协同过滤item_simcosine_similarity(R.T)print(物品相似度矩阵:)print(item_sim)# 预测评分defpredict_user_cf(R,user_sim,user_id,item_id,k2):similar_usersnp.argsort(user_sim[user_id])[::-1][1:k1]ratingsR[similar_users,item_id]weightsuser_sim[user_id,similar_users]returnnp.dot(ratings,weights)/(weights.sum()1e-8)3. 矩阵分解SVDfromsurpriseimportSVD,Dataset,Readerfromsurprise.model_selectionimportcross_validate# 加载数据readerReader(rating_scale(1,5))dataDataset.load_from_df(df[[user_id,item_id,rating]],reader)# SVD 模型modelSVD(n_factors50,n_epochs20,lr_all0.005,reg_all0.02)# 交叉验证resultscross_validate(model,data,measures[RMSE,MAE],cv5)print(fRMSE:{results[test_rmse].mean():.4f})4. 基于内容的推荐fromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.metrics.pairwiseimportlinear_kernel# 物品特征items[action movie with explosions,romantic comedy love story,...]# TF-IDF 向量化tfidfTfidfVectorizer(stop_wordsenglish)tfidf_matrixtfidf.fit_transform(items)# 计算相似度cosine_simlinear_kernel(tfidf_matrix,tfidf_matrix)defget_recommendations(title,cosine_simcosine_sim):idxindices[title]sim_scoreslist(enumerate(cosine_sim[idx]))sim_scoressorted(sim_scores,keylambdax:x[1],reverseTrue)sim_scoressim_scores[1:11]item_indices[i[0]foriinsim_scores]returndf[title].iloc[item_indices]总结方法优势劣势协同过滤不需要特征工程冷启动问题基于内容可解释性强特征工程复杂矩阵分解处理稀疏矩阵难以融入特征深度学习自动特征学习需要大量数据