推荐系统原理与实现:协同过滤/内容推荐/深度学习

推荐系统原理与实现:协同过滤/内容推荐/深度学习

1. 推荐系统分类

复制代码
推荐系统方法:
├── 协同过滤(Collaborative Filtering)
│   ├── 基于用户:相似用户喜欢的物品
│   ├── 基于物品:相似物品推荐
│   └── 矩阵分解:SVD/ALS
├── 基于内容(Content-Based)
│   ├── 物品特征匹配
│   └── 用户画像匹配
├── 混合推荐(Hybrid)
│   └── 多种方法组合
└── 深度学习推荐
    ├── Wide & Deep
    ├── DeepFM
    └── Two-Tower

2. 协同过滤

python 复制代码
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# 用户-物品矩阵
# R[i][j] = 用户 i 对物品 j 的评分
R = np.array([
    [5, 3, 0, 1],
    [4, 0, 0, 1],
    [1, 1, 0, 5],
    [0, 0, 5, 4],
])

# 基于用户的协同过滤
user_sim = cosine_similarity(R)
print("用户相似度矩阵:")
print(user_sim)

# 基于物品的协同过滤
item_sim = cosine_similarity(R.T)
print("物品相似度矩阵:")
print(item_sim)

# 预测评分
def predict_user_cf(R, user_sim, user_id, item_id, k=2):
    similar_users = np.argsort(user_sim[user_id])[::-1][1:k+1]
    ratings = R[similar_users, item_id]
    weights = user_sim[user_id, similar_users]
    return np.dot(ratings, weights) / (weights.sum() + 1e-8)

3. 矩阵分解(SVD)

python 复制代码
from surprise import SVD, Dataset, Reader
from surprise.model_selection import cross_validate

# 加载数据
reader = Reader(rating_scale=(1, 5))
data = Dataset.load_from_df(df[['user_id', 'item_id', 'rating']], reader)

# SVD 模型
model = SVD(n_factors=50, n_epochs=20, lr_all=0.005, reg_all=0.02)

# 交叉验证
results = cross_validate(model, data, measures=['RMSE', 'MAE'], cv=5)
print(f"RMSE: {results['test_rmse'].mean():.4f}")

4. 基于内容的推荐

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import linear_kernel

# 物品特征
items = ['action movie with explosions', 'romantic comedy love story', ...]

# TF-IDF 向量化
tfidf = TfidfVectorizer(stop_words='english')
tfidf_matrix = tfidf.fit_transform(items)

# 计算相似度
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)

def get_recommendations(title, cosine_sim=cosine_sim):
    idx = indices[title]
    sim_scores = list(enumerate(cosine_sim[idx]))
    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
    sim_scores = sim_scores[1:11]
    item_indices = [i[0] for i in sim_scores]
    return df['title'].iloc[item_indices]

总结

方法 优势 劣势
协同过滤 不需要特征工程 冷启动问题
基于内容 可解释性强 特征工程复杂
矩阵分解 处理稀疏矩阵 难以融入特征
深度学习 自动特征学习 需要大量数据
相关推荐
回眸&啤酒鸭3 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
AI的探索之旅3 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein3 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu3 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
wukangjupingbb3 天前
智能网联汽车安全能力框架
人工智能
龙亘川3 天前
明月照湾区,智启新赛道:从顶流文旅IP盛会看智慧文旅升级路径
人工智能·智慧城市·开源软件·数据可视化
飞猫的边缘AI3 天前
边缘AI应用:家用AI摄像头怎么做数据训练?
人工智能·边缘计算·ai算法·边缘ai