
协同过滤推荐算法通过分析用户或物品的相似性来推荐,冷启动问题可通过基于内容特征、混合推荐(如矩阵分解降维)或社交信息缓解新用户/新内容的推荐难题。
老师口吻:协同过滤的核心是“相似性”,即用户或物品的行为模式相似,则推荐给一个对象的物品/用户可能也适合另一个对象。
| 项目 | 用户-用户协同过滤 | 物品-物品协同过滤 |
|---|---|---|
| 定义 | 基于用户相似性,推荐相似用户喜欢的物品 | 基于物品相似性,推荐与用户已喜欢物品相似的物品 |
| 特性 | 相似用户行为一致,推荐物品需用户评分 | 相似物品用户偏好相似,推荐物品需用户评分 |
| 使用场景 | 用户数量远大于物品(如社交平台推荐好友喜欢的内容) | 物品数量远大于用户(如电商推荐商品,用户评分稀疏) |
| 注意点 | 用户冷启动(新用户无评分) | 物品冷启动(新物品无评分) |
新物品基于内容特征提取示例(文本场景):
假设新物品是“一本名为《数据科学入门》的书籍”,特征提取步骤:
用户-用户协同过滤中处理评分稀疏性的伪代码(用余弦相似度替代皮尔逊):
def user_user_similarity(user_ratings, user_id, k=3):
target_user_items = user_ratings[user_id] # 目标用户评分的物品
similar_users = {} # 存储相似用户及相似度
for other_user in user_ratings:
if other_user != user_id:
common_items = set(target_user_items.keys()) & set(user_ratings[other_user].keys())
if not common_items: # 避免空集,直接跳过
continue
# 计算余弦相似度(对稀疏数据更稳定)
sim = cosine_similarity(target_user_items, user_ratings[other_user], common_items)
similar_users[other_user] = sim
top_k_users = sorted(similar_users.items(), key=lambda x: x[1], reverse=True)[:k]
recommended_items = set()
for u, _ in top_k_users:
for item in user_ratings[u]:
if item not in target_user_items:
recommended_items.add(item)
return recommended_items
# 计算余弦相似度的辅助函数(简化版)
def cosine_similarity(u1, u2, common_items):
dot_product = sum(u1[item] * u2[item] for item in common_items)
norm_u1 = sum(v**2 for v in u1.values())
norm_u2 = sum(v**2 for v in u2.values())
return dot_product / (norm_u1 * norm_u2)
(约90秒)
“协同过滤推荐算法核心是找相似的用户或物品来推荐。用户-用户协同过滤就是找和你行为相似的K个用户,推荐他们喜欢的物品;物品-物品则是找和你已喜欢物品相似的物品推荐。冷启动问题,比如新用户没评分,可以用基于内容的特征(比如物品的标签、描述)先推荐,或者混合推荐——比如先用基于内容的模型给初始推荐,再用协同过滤微调,或者用矩阵分解(SVD)降维处理评分稀疏性,这样能更好地推荐新内容。”