第2节:协同过滤与矩阵分解

协同过滤

物以类聚,人以群分

  • 基于用户的协同过滤算法(user-based)
  • 基于物品的协同过滤算法(item-based)
  • 矩阵分解(如果得到用户对所有商品的评分)
  • 矩阵分解中的隐式与显式情况解决思路

特征长什么样子

用户行为类型特征作用
评分显式整数量化的偏好 ,可能的取值是 [0, n]; n 一般取值为 5 或者是 10通过用户对物品的评分 ,可以精确的得到用户的偏好
投票显式布尔量化的偏好 ,取值是 0 或 1通过用户对物品的投票 ,可以较精确的得到用户的偏好
转发显式布尔量化的偏好 ,取值是 0 或 1通过用户对物品的投票 ,可以精确的得到用户的偏好。
保存书签显示布尔量化的偏好 ,取值是 0 或 1通过用户对物品的投票 ,可以精确的得到用户的偏好。
标记标签显示一些单词 ,需要对单词进行分析 ,得到偏 好通过分析用户的标签 ,可以得到用户对项目的理解 , 同时可以分析出用户的情感:喜欢还是讨厌
评论显示一段文字 ,需要进行文本分析 ,得到偏好通过分析用户的评论 ,可以得到用户的情感 :喜欢还是讨厌
点击流隐式一组用户的点击 ,用户对物品感兴趣 ,需 要进行分析 ,得到偏好用户的点击一定程度上反映了用户的注意力 ,所以它也可以从一定程度上反映用户的喜好。
页面停留时间隐式一组时间信息 ,噪音大 ,需要进行去噪, 分析 ,得到偏好用户的页面停留时间一定程度上反映了用户的注意力和喜好 ,但噪音偏大 ,不好利用。
购买隐式布尔量化的偏好 ,取值是 0 或 1用户的购买是很明确的说明这个项目它感兴趣。

基于用户的协同过滤

  • 首先找到相似用户(相似度计算)
    • 属性特征,行为特征等都可以当做计算输入
    • User1喜欢1,2,3,4;User3当前喜欢2,3
    • 如果这俩用户计算后相似度较高,就可以把1,4推给User3

在这里插入图片描述

  • 存在的问题:数据稀疏,计算复杂度,人是善变的,冷启动问题
    • 稀疏:通常商品非常多,用户购买的只是其中极小一部分
    • 计算:计算相似度矩阵是个大活,用户和商品都比较多的时候就难了
    • 冷启动:新用户来了怎么办?

基于物品的协同过滤

  • 还是要先得到用户与商品的交互数据
    • 此时发现商品1和3经常在一起出现
    • 那这俩商品之间肯定有鬼。。。(相关度)
    • User3目前只买了商品2和3,此时可以推给他商品1

在这里插入图片描述

  • 更流行,现阶段各大网站基本都是用户较多,商品(种类)比用户少的多
    • 商品属性通常比较固定,特征获取容易,而且基本不会改变
    • 即便上架了新商品,它自身也有各种标签,不会像用户一样是张白纸
    • 应用场景更适合当下各种网站,APP(实时的除外,例如新闻)

小例子

首先计算商品之间的相似度(pearson),邻居设置为2,预测r51=?
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

矩阵分解

为什么需要矩阵分解

  • 用户:1个亿,商品100W,这得是多大的一个矩阵,要命了
    • 能不能间接点来求呢?最终目标就是把每个用户对各个商品的喜好预测出来
    • 跟找中介租房子差不多,通过中介来重新组合矩阵
    • 矩阵分解已经成为推荐系统中用的最多的方法

在这里插入图片描述

矩阵分解实例

  • 用户-歌曲之间的行为数据
    • 1代表听过该歌曲,0表示没有
    • 可以想象成一个非常稀疏的矩阵
    • 目标:预测空白值到底等于多少

在这里插入图片描述

矩阵分解

  • user-item矩阵分解
    • 得到user,item两个矩阵
    • 原矩阵:m*n(用户,音乐)
    • user(mk),item(kn)

在这里插入图片描述

  • 这俩矩阵可有实际值
    • K等于多少合适呢?
    • 其中的数值代表什么?
    • 如何计算得到?

在这里插入图片描述

隐向量

  • 其实就是特征的高维表达,只不过很难去理解
    • 例如用户的隐向量可以想象成是这个样子:

在这里插入图片描述

  • 用户与商品向量可以当做其特征表示
    • 这可不是随机值,可以观察下数值特点
    • 不同颜色表示特征鲜明的地方,也就是喜好

在这里插入图片描述
在这里插入图片描述

  • 隐向量真的可以理解吗?通常只是比喻而已,一般难以理解
    • 例如一个50维的向量,鬼知道它具体表什么含义
    • 没关系,咱们理解不了无所谓,计算机能更好的理解就可以了

在这里插入图片描述

  • 目标其实就是得到一个大表
    • 分解后的矩阵还原回这个大表即可
    • 数值即表示对当前商品喜好程度
    • 方法蛮简单,具体怎么做呢?

在这里插入图片描述

目标函数

  • 跟回归方程很像:在这里插入图片描述

  • 用户矩阵:在这里插入图片描述商品矩阵:在这里插入图片描述

  • N为用户个数,M为商品个数,还需注意隐向量维度

  • 其中还额外引入了正则化惩罚项

后续的改进

  • 如果用户就特别刁钻,评分都会很低;如果商品本身就很好,评分都较高
  • 这里还需要注意的就是用户与商品的本身属性信息,之前公式中木有涉及
  • 在原公式中在这里插入图片描述分别加入用户与商品偏置项
  • 例如bu表示用户偏置,bi表示商品偏置

隐式情况分析

  • 用户-商品的评分矩阵做起来非常直接,但是哪有那么正好的事啊
    • 通常收集的数据都是用户的行为:观看时间,点击次数等指标

    • 这种数据该怎么求解呢?首先定义置信度:在这里插入图片描述

    • 置信度默认为1,表示用户没有产生行为的商品;行为越多,置信度越大

  • 重新定义评分:在这里插入图片描述(有行为的则评分为1)
    • 新的优化目标:在这里插入图片描述

    • 总结起来就是置信度越大的你得预测的越准,要不损失就大了

    • 求解过程依旧交替使用最小二乘法,固定Y优化X,再固定X优化Y

Embedding的作用

  • 无处不在的Embedding,Ai的核心其实就是让计算机能更懂我!
  • NLP,CV领域做得太多啦,推荐中也不例外,Embedding做好啦一切都解决了!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值