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

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

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新角度几秒前
Cursor Composer 模式:多文件重构的工作流与边界
人工智能
神奇霸王龙1 分钟前
GPT-Image-2 角色一致性屠榜:2026 五款图生图模型 IP 漫剧实测
人工智能·gpt·tcp/ip·ai·ai作画·prompt·音视频
深圳市快瞳科技有限公司2 分钟前
宠物行为识别:将日常行为转化为可量化的健康指标
人工智能·算法·计算机视觉·宠物
tokenKe9 分钟前
ego-lite:给 AI Agent 用的最快浏览器 | SSP Github Daily
人工智能·github
网易云信9 分钟前
企业级 IM,不是功能更多,而是场景更对
人工智能·后端
糖果店的幽灵11 分钟前
大模型测评DeepEval快速入门-RAG指标详解
数据库·人工智能·langgraph·大模型测评·deepeval
小码哥哥12 分钟前
如何从架构层面评价国内六大企业AI知识库的技术差异?
人工智能·架构
库拉大叔13 分钟前
写小说谁家强?GPT-5.6、Claude 4.8 Opus、Gemini 3.5文学素养硬核横评
人工智能·gpt·aigc
科技大视界15 分钟前
企业 Agent 2026 选型指南:智能体应用进入深水区
大数据·人工智能
wujian831119 分钟前
怎么用AI做excel表格 AI导出鸭来救场
人工智能·ai·excel·豆包·deepseek·ai导出鸭