推荐算法及其一个算法案例

三、推荐算法

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y2DiNVfs-1581990726736)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E8%AF%BE%E4%BB%B6/_book/day01_%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E4%BB%8B%E7%BB%8D/img/%E5%9F%BA%E4%BA%8E%E7%94%A8%E6%88%B7%E7%9A%84%E5%8D%8F%E5%90%8C%E8%BF%87%E6%BB%A4%E6%8E%A8%E8%8D%901.png)]

Item-Based CF

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LC7HTyq2-1581990726739)(file:///C:/Users/%E6%B8%85%E9%A3%8E/Desktop/%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E8%AF%BE%E4%BB%B6/_book/day01_%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E4%BB%8B%E7%BB%8D/img/%E5%9F%BA%E4%BA%8E%E7%89%A9%E5%93%81%E7%9A%84%E5%8D%8F%E5%90%8C%E8%BF%87%E6%BB%A4%E6%8E%A8%E8%8D%901.png)]

代码实现: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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值