Collaborative Filtering

本文详细介绍了如何使用分布式处理技术对亚马逊推荐系统进行优化,包括数据分块、归一化、计算余弦相似度等关键步骤。通过将数据分割成多个块并并行处理,实现了高效的数据处理和相似度计算,最终通过取top操作获得最优推荐结果。

Paper链接:http://www.cs.umd.edu/~samir/498/Amazon-Recommendations.pdf
博客链接:http://www.xysay.com/amazon-item-to-item-collaborative-filtering-207.html

分布式处理

重编号

  • 功能是,为了避免数据倾斜,以及本来是string类型的id
  • 就是分桶,每个桶预设了默认的起始,比如1000000、2000000,依次自增

做归一化

  • 观察cos距离公式,其实就可以是向量各自除以它的模,再相乘,为了后面分布式的处理

分块分发

  • 为了在MR里实现,分块处理。比如分成四块,那算相似度,可以看成是下面的两个的相乘
    这里写图片描述
  • 其实上面的分块,对应的就是一个4*4的行列式,如下图,所以,在map阶段,分为“left”“right”两种类型,每份数据map多次,map到不同的多个reducer里面
    这里写图片描述
  • 然后,根据left right的标示,就知道该计算计算哪个了。
  • 最后,再做一次取top就行了。
### 协同过滤的概念 协同过滤是一种广泛应用于推荐系统的算法,旨在通过分析用户行为数据来预测用户可能感兴趣的商品或服务。该技术基于这样的假设:如果两个用户在过去表现出相似的兴趣,则在未来他们可能会对相同的事物保持一致的态度。 #### 用户-用户协同过滤(UserCF) 一种常见的形式是用户-用户协同过滤(UserCF),其核心理念在于找到具有相似偏好的其他个体,并据此向目标用户提供个性化建议[^1]。具体来说: - **计算相似度**:首先衡量不同成员之间的亲密度; - **寻找邻居集**:依据上述指标挑选出最接近的若干位作为参照对象; - **生成推荐列表**:最后综合考虑这些伙伴的历史记录给出最终的选择方案。 ```python from sklearn.metrics.pairwise import cosine_similarity import numpy as np def compute_user_similarities(ratings_matrix): """ 计算用户间的余弦相似度矩阵 参数: ratings_matrix (numpy.ndarray): 用户评分矩阵 返回: similarity_matrix (numpy.ndarray): 用户间相似度矩阵 """ # 使用sklearn库中的cosine_similarity函数快速求解两两之间夹角余弦值 similarity_matrix = cosine_similarity(ratings_matrix) return similarity_matrix def recommend_items(user_id, ratings_matrix, k_neighbors=5, top_n=10): """ 对指定用户进行物品推荐 参数: user_id (int): 待推荐的目标用户ID ratings_matrix (numpy.ndarray): 用户评分矩阵 k_neighbors (int): 考虑近邻的数量,默认取前五个最近似的用户 top_n (int): 推荐条目数量上限,默认最多返回十个商品链接 返回: recommended_item_ids (list[int]): 给定用户的top n个推荐项ID列表 """ similarities = compute_user_similarities(ratings_matrix) sorted_indices = np.argsort(similarities[user_id])[::-1][1:k_neighbors+1] neighbor_ratings = ratings_matrix[sorted_indices] item_scores = np.mean(neighbor_ratings, axis=0) unseen_mask = ratings_matrix[user_id] == 0 candidate_scores = item_scores * unseen_mask recommended_item_ids = (-candidate_scores).argsort()[:top_n].tolist() return recommended_item_ids ``` ### 实现案例 为了更好地理解如何实际部署这样一个系统,在电子商务网站上构建了一个简单的Web应用程序实例。此应用采用了Python微框架Flask搭建RESTful API接口,允许前端页面发送HTTP请求获取定制化的购物指南[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值