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

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

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]

总结

方法 优势 劣势
协同过滤 不需要特征工程 冷启动问题
基于内容 可解释性强 特征工程复杂
矩阵分解 处理稀疏矩阵 难以融入特征
深度学习 自动特征学习 需要大量数据
相关推荐
AI日报派送佬37 分钟前
2026年10月14日AI行业日报|Gemini 4 Argon正式发布;小模型跨设备传播风险引发安全热议
网络·人工智能·openai·谷歌·deepseek·anthropic·ai日报
镜象科技2 小时前
职业院校AI心理健康解决方案怎么选?三个特殊场景与三类路线
人工智能
Leo.yuan2 小时前
企业Data Agent架构选型:帆软Dora基于NL2BI的现有BI体系复用方案
大数据·人工智能
朱涛的自习室2 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
米小虾2 小时前
上下文:Agent 的眼睛里到底装着什么
人工智能·agent
米小虾2 小时前
Agent = 大脑 + 眼睛 + 手脚:一篇看懂现代 AI Agent 的骨架
人工智能
小小测试开发3 小时前
安全评测得分 0.9556 掉到 0.3257,只改了 top_k 和 prompt_style 之外的题面比例
人工智能·安全·prompt
slacker-kian3 小时前
[实践]-用LLM对文本结构化:把多段文本描述变成规范的 JSON 知识库
人工智能·llm·prompt·结构化·pydantic·one-shot 提示
品牌常新3 小时前
景区巡逻机器人怎么选?派宝S5全地形守护解析
运维·人工智能·机器人