三、推荐算法
1)推荐模型构建流程
Data(数据)—>Features(特征)—>ML Algorithm(选择算法训练模型)—>Prediction Output(预测输出)
- 数据清洗/数据处理
- 数据来源
- 显性数据
- 比如用户的评分、评价等
- 隐性数据
- 历史订单、点击记录、搜索记录
- 显性数据
- 数据量/数据能否满足要求
- 数据来源
- 特征工程
- 从数据中筛选特征
- 用数据表述特征
- 选择合适的算法
- 协同过滤
- 基于内容
- 产生推荐结果
- 对推荐结果进行评估
2)最经典的推荐算法:协同过滤
算法的思想:物以类聚,人以群分
基本的协同过滤推荐算法基于以下的假设:
- 跟你喜好相似的人喜欢的东西你也很有可能喜欢:基于用户的协同过滤推荐
- 跟你喜欢的东西相似的东西你也很有可能喜欢:基于物品的协同过滤推荐
实现协同过滤推荐的步骤:
-
1.找出最相似的人或物品:TOP-N相似的人或物品
通过计算两两的相似度来进行排序,找出TOP-N相似人或者物品
-
2.根据相似的人或物品产生推荐结果
利用TOP-N结果生成初始推荐结果,然后过滤掉用户已经有过记录的物品或明确表示过不喜欢的物品
3)相似度计算
相似度的计算方法
- 欧式距离:衡量两个点的直线距离,不适合做布尔向量计算,它的值是一个非负数,最大值正无穷,通常计算相似度的结果是[-1,1]或[0,1]之间。
- 余弦相似度
- 度量两个向量之间的夹角,用夹角的余弦值来度量相似的情况
- 两个向量的夹角为0,余弦值为1,夹角为90度,余弦值为0,夹角为180,余弦值为-1
- 余弦相似度在度量文本相似度、用户相似度和物品相似度的时候较为常用
- 预先相速度的特点:与向量长度无关,需要对向量长度归一化,两个向量只要方向一致,无论程度强弱,都可以视为相似
- 余弦相似度
- 皮尔逊相关系数Pearson
- 实际上也是余弦相似度,不过就是对向量做了中心化处理,向量a和b各自减去向量的均值后,再计算余弦相似度
- 皮尔逊相似度计算结果在[-1,1]之间,-1表示负相关,1表示正相关
- 度量两个遍历是不是同增同减,变化趋势是否一致,不适合计算布尔向量
- 杰卡德相似度Jaccard
- 两个集合的交集元素个数在并集中所占的比例,适合用于布尔向量
- 就是交集比上并集
- 如何选择余弦相似度
- 余弦和皮尔逊适合处理用户的一些评分数据,不适合处理boolearn
- 杰卡德适合做boolearn类型的数据
以下有一个简单的小案例,数据集相当于一个用户对物品的购买记录
User-Based CF
Item-Based CF
代码实现:User_Based CF
# 根据表格构建数据集
users = ["User1", "User2", "User3", "User4", "User5"]
items = ["Item A", "Item B", "Item C", "Item D", "Item E"]
# 用户购买记录数据集
datasets = [
[1,0,1,1,0],
[1,0,0,1,1],
[1,0,1,0,0],
[0,1,0,1,1],
[1,1,1,0,1