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

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

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]

总结

方法 优势 劣势
协同过滤 不需要特征工程 冷启动问题
基于内容 可解释性强 特征工程复杂
矩阵分解 处理稀疏矩阵 难以融入特征
深度学习 自动特征学习 需要大量数据
相关推荐
eBest数字化转型方案2 小时前
Route Optimization for FMCG:多目标排线算法的工程实现
大数据·人工智能·算法
武子康2 小时前
Seedream 5.0 Pro 进入 Vercel AI Gateway:图像生成开始网关化
人工智能·ai·chatgpt·gateway·agent·claude·harness
能源科技集2 小时前
GWh时代储能逻辑生变,远景动力(AESC)790Ah电芯反向定义系统最优解
人工智能
Forerror20262 小时前
API网关怎么部署?MAI Gateway配置教程与最佳实践
人工智能·gateway·maigateway·finapi·企业级ai网关·大模型财务管控
2601_962100732 小时前
AI批量生成视频的工程化复盘(2026):一条能断点续跑、不重复扣量的出片脚本
人工智能·音视频
qq_425516182 小时前
双语字幕会议记录APP:多语言会议整理工具推荐
人工智能·智能手机·语音识别
xian_wwq2 小时前
【学习笔记】-深度认知系列-第8讲主流AI模型横向评测——GPT、Claude、Gemini、盘古、文心、通义
人工智能·笔记·学习
面包狗AI4S2 小时前
Codex/ChatGPT 反复 Reconnecting(正在重新连接) 5/5 的最简修复方法
人工智能·vscode·chatgpt
小柯南敲键盘2 小时前
跨境电商批量图片翻译与视频字幕翻译,就用跨马AI工具
大数据·人工智能·python·音视频
嘿嘿-662 小时前
Cherry Studio 接入ChatGpt:GPT-5.6 Sol 文本测试与 GPT-Image-2 出图教程
人工智能·gpt·ai·chatgpt·node.js·ai编程