机器学习12.推荐系统(1)--协同过滤、相似度计算、奇异值分解

本文围绕推荐系统展开,介绍了协同过滤的ItemCF和UserCF方法,包括相似度计算、公式升级、优缺点对比及评价指标。还阐述了基于内容的推荐系统(矩阵分解),如电影推荐实例,以及多种相似度计算方法。最后讲解了SVD在推荐系统中的应用,可对数据降维。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

推荐系统:

整体可分为召回(recall)+排序(rank),召回是指找出很多待推荐的物品,排序是指对于这些物品打分,依照打分顺序选择靠前的几个推荐给用户。

协同过滤 Collaborative filtering:

  • CF分为 Neighborhood model (比如User-based 和 Item-based) 和 Latent factor model (例如SVD),首先介绍Neighborhood model(本质上是KNN)。
ItemCF
  • ItemCF:

    • 给用户推荐他喜欢的物品的相似物品–>如何衡量物品的相似度?
    • 在用户-物品矩阵中,是按列计算相似度的。
  • 物品相似度矩阵的计算:
    S i j = ∣ u ( i ) ∣ ∩ ∣ u ( j ) ∣ ∣ u ( i ) ∣ ∪ ∣ u ( j ) ∣ S_{ij}=\frac{|u(i)|\cap|u(j)|} {{\sqrt{|u(i)| \cup |u(j)|}}} Sij=u(i)u(j) u(i)u(j)
    这个式子表示物品 i i i和物品 j j j之间的相似度, u ( i ) u(i) u(i)表示对于物品 i i i有过操作的用户的集合。分子表示计算两个物品公共的用户的集合,分母是对人数做了归一化。

  • 计算用户对于新物品 j j j的评分(假设用户已经访问过物品 i i i):
    P u j = ∑ i ∈ 用 户 访 问 过 的 物 品 集 合 S i j ∗ r u i P_{uj}=\sum_{i\in 用户访问过的物品集合}S_{ij}*r_{ui} Puj=i访Sijrui
    r u i r_{ui} rui是一个权重,是用户u对于已访问过的物品i的打分(如电影评分)。

  • 一些公式升级

  1. 降低活跃用户的权重,如某个用户是批发商,他啥东西都买,那么我们要降低他的权重(活跃用户的权重适当降低):
    S i j = ∑ u ∈ u ( i ) ∩ u ( j ) 1 ( l o g 1 + ∣ N ( u ) ∣ ) ∣ u ( i ) ∣ ∪ ∣ u ( j ) ∣ S_{ij}=\frac{\sum_{u \in u(i)\cap u(j)} \frac{1}{(log{1+|N(u)|)}}} {{\sqrt{|u(i)| \cup |u(j)|}}} Sij=u(i)u(j) uu(i)u(j)(log1+N(u))1
    ∣ N ( u ) ∣ |N(u)| N(u)是用户u访问过的物品的个数,可见 他在分母上所以访问个数越多,权重越低。
  2. 对用户的喜好加入时间衰减
    S i j = ∑ u ∈ u ( i ) ∩ u ( j ) f ( Δ t ) ∣ u ( i ) ∣ ∪ ∣ u ( j ) ∣ S_{ij}=\frac{\sum_{u \in u(i)\cap u(j)} f (\Delta t)} {{\sqrt{|u(i)| \cup |u(j)|}}} Sij=u(i)u(j) uu(i)u(j)f(Δt)
    f ( Δ t ) = 1 1 + α Δ t f (\Delta t)=\frac{1}{1+\alpha \Delta t} f(Δt)=1+αΔt1 是时间衰减项
UserCF
  • UserCF:

    • 给用户推荐兴趣相似的用户感兴趣的物品(如问别人喜欢看什么书,自己也去借一本相同的)–>如何衡量用户的相同兴趣?
    • 在用户-物品矩阵中,是按行计算相似度的。
  • 用户相似度矩阵的计算:
    S u v = ∣ N ( u ) ∣ ∩ ∣ N ( v ) ∣ ∣ N ( u ) ∣ ∪ ∣ N ( v ) ∣ S_{uv}=\frac{|N(u)|\cap|N(v)|} {{\sqrt{|N(u)| \cup |N(v)|}}} Suv=N(u)N(v) N(u)N(v)
    整体看来,与itemCF相同, N ( u ) N(u) N(u)表示用户u有过操作的item的集合。

  • 计算用户 u u u对于新物品 i i i的评分:
    P u i = ∑ v ∈ 其 他 相 似 用 户 集 合 S u v ∗ r v i P_{ui}=\sum_{v \in 其他相似用户集合}S_{uv}*r_{vi} Pui=vSuvrvi
    S u v S_{uv} Suv是两个用户相似度评分, r v i r_{vi} rvi是另一个用户对物品i的打分

  • 一些公式升级

  1. 降低活跃商品的权重(如果商品被很多人购买,那么不能称之为个性推荐,只有那些不常被购买的物品才是个性的东西,如《新华字典》与《机器学习》)
    对物品i进行推荐,其权重修正如下,越活越权重越低
    S u v = ∑ i ∈ N ( u ) ∩ N ( v ) 1 ( l o g 1 + ∣ u ( i ) ∣ ) ∣ N ( u ) ∣ ∪ ∣ N ( v ) ∣ S_{uv}=\frac{\sum_{i \in N(u)\cap N(v)} \frac{1}{(log{1+|u(i)|)}}} {{\sqrt{|N(u)| \cup |N(v)|}}} Suv=N(u)N(v) iN(u)N(v)(log1+u(i))1
  2. 对用户的喜好加入时间衰减(意义在于,保证两个用户当前的兴趣是相同的,所以需要对点击时间差加上权重)
    S i j = ∑ i ∈ N ( u ) ∩ N ( v ) f ( Δ t i ) ∣ N ( u ) ∣ ∪ ∣ N ( v ) ∣ S_{ij}=\frac{\sum_{i \in N(u)\cap N(v)} f (\Delta t_i)} {{\sqrt{|N(u)| \cup |N(v)|}}} Sij=N(u)N(v) iN(u)N(v)f(Δti)
    f ( Δ t i ) = 1 1 + α Δ ∣ t u i − t v i ∣ f (\Delta t_i)=\frac{1}{1+\alpha \Delta |t_{ui}-t_{vi}|} f(Δti)=1+αΔtuitvi1 是用户u和用户v访问物品的时间差。
ItemCF & UserCF 优缺点
  • 推荐实时性:
    • ItemCF :立即,只需返回相似的物品;
    • UserCF: 不会立刻,因为要重新计算用户间的相似度矩阵。
  • 新用户的推荐:
    • ItemCF :可以推荐相似物品。
    • UserCF:不能立刻推荐,因为无法计算用户相似度。
  • 新物品的推荐
    • ItemCF :不能立刻推荐,因为无法计算物品相似度。
    • UserCF:被用户点击后,可以推荐给相似用户。
  • 可解释性:
    • ItemCF :可解释
    • UserCF:不可解释
  • 性能考量:
    • 由于需要计算物品相似度矩阵/用户相似度矩阵,需要根据实际情况选择哪种CF。由于实际中用户数量一般远大于商品数量,所以一般选择itemCF。
    • ItemCF更具有个性化的考量,性能更好。
评价指标
  • 推荐算法评价指标(不同场景下不同)

    • 信息流:点击率、平均阅读时长
    • 电商:转化率(成交次数/点击次数) 、平均成交额度
    • item覆盖率 (解决有一些item永远不会被推荐)
  • 离线评价指标

    • 在测试集上的性能
    • F1值, F 1 = 2 ∗ r ∗ p r + p F_1=\frac{2*r*p}{r+p} F1=r+p2rp
      • recall:正确推荐商品占用户需求的比例,6/10。越高越好。我们推荐的东西越多(50),越可能包含用户需求的商品。
      • precision:推荐商品中有用推荐的个数,6/50。越高越好。推荐的东西越多(50),该值会降低。
        在这里插入图片描述
        r e c a l l = t p t p + f n = 6 6 + 4 recall = \frac{tp}{tp+fn}=\frac{6}{6+4} recall=tp+fntp=6+46,fn为预测false(错的),且预测为negative(负类),则真实其实是正类,也就是图中最左侧的4。
        p r e c i s i o n = t p t p + f p = 6 6 + 44 precision = \frac{tp}{tp+fp}=\frac{6}{6+44} precision=tp+fptp=6+446,fp为预测false(错的),且预测为positive(正类),则真实其实是负类,也就是图中最右侧的44。
  • ABtest:制作多个推荐系统在线上进行测试,将用户随机分到其中一个组,根据其他指标衡量哪个系统比较好。指标包括:CTR(Click Through Rate),CR(Conversion Rate,网络转化率,即不仅仅要点击,还要进行某个操作,比如看完了电影,购买了商品的比例)等。

基于内容的的推荐系统(矩阵分解)

实例,电影推荐系统,对内容进行分解:
目的是填写下面这张矩阵表,然后选择分数高的推荐给用户。
在这里插入图片描述
对电影内容可做分解,得到不同电影的成分矩阵X【难点,如何计算电影的成分?–>人为观察标定】:
(此处特征数量 n = 3 n=3 n=3,即将电影分解成了3个特征:爱情、喜剧、武侠)
在这里插入图片描述
求出用户喜好矩阵 θ \theta θ,将他和X相乘就可以得到用户评分矩阵, θ j \theta_j θj表示j用户对于不同类型电影的喜好程度。----怎么求?

  • 用户喜好矩阵 θ \theta θ:根据用户已经打过分的电影和电影的成分矩阵,求得用户对每部电影的喜好程度(即填写上边的表格)。
    在这里插入图片描述

  • 也可以通过问卷调查得到用户喜好矩阵 θ \theta θ,然后用相似的办法求电影内容矩阵。(注意更换正则化项)

  • 或者通过类似的方法同时求出两个矩阵,因为他们的目标函数是相同的,只需要加上各自的正则化项即可。

  • 实例,假设已求得电影内容矩阵 X X X和用户喜好矩阵 θ \theta θ:
    在这里插入图片描述
    我们此时相当于在原始评分矩阵的一个子空间进行推荐,我们可以使用类似协同过滤的思路:

    • 给用户推荐和他相似用户的其他用户正在看的电影
    • 给用户推荐他看过电影的相似电影
  • 问题:如何计算向量间的相似度?

    • 见后续分解

相似度的计算

  • 欧氏相似度 Euclidean Distance Similarity:
    s i m ( x , y ) = 1 1 + d ( x , y ) sim(x,y)=\frac{1}{1+d(x,y)} sim(x,y)=1+d(x,y)1
    d ( x , y ) d(x,y) d(x,y)是两个点的欧氏距离

  • 余弦相似度 Cosine Similarity(即余弦夹角,与量纲无关):
    s i m ( x , y ) = x ∗ y ∣ x ∣ ∣ y ∣ sim(x,y)=\frac{x*y}{|x||y|} sim(x,y)=xyxy

  • 皮尔森相关性相似度(相关系数) Pearson Correlation Similarity:
    s i m ( x , y ) = r ( x , y ) = C o v ( x ∗ y ) v a r ( x ) v a r ( y ) sim(x,y)=r(x,y)=\frac{Cov(x*y)}{\sqrt{var(x)var(y)}} sim(x,y)=r(x,y)=var(x)var(y) Cov(xy)

  • Jaccard 距离:
    用于计算集合的差异性,就是前边CF里的相似度计算公式,意思是两个集合的交集除以并集
    s i m ( X , Y ) = ∣ X ∩ Y ∣ ∣ X ∣ U ∣ Y ∣ {sim(X,Y)={\frac {|X\cap Y|}{|X|U|Y|}}} sim(X,Y)=XUYXY

SVD

  • 前言:我们可以不在原始的评分矩阵上计算不同item的相似度(因为矩阵很稀疏,相似度计算不一定准确),而矩阵分解则是另一种潜在语义模型(这两种方法都是CF的分支)。前边电影推荐系统的例子其实是一种对于评分矩阵的矩阵分解,假设电影含有 n n n个隐成分,则评分表 A ∈ R m ∗ n A \in R^{m*n} ARmn可分解为电影成分矩阵 X X X,用户偏好矩阵 θ \theta θ
    接下来,先介绍数学定义的SVD,在之后的章节将他和推荐系统融合。

  • 回忆PCA:以方差最大为目标,对原始数据进行降维。推倒后发现其实是对原始数据的协方差矩阵做了特征值分解,特征值的大小反应了这一维的贡献程度(方差占比)。(在这个过程中体现了矩阵的{旋转缩放}作用)
    SVD:对矩阵(可以不是方阵) A A A进行奇异值分解,分解(同时体现旋转缩放投影):
    A = U Σ V T A = U\Sigma V^T A=UΣVT
    其中:

    • A ∈ R m × n A \in R^{m \times n} ARm×n,
      U ∈ R m × m U \in R^{m \times m} URm×m 每一列是 A A T AA^T AAT的特征向量,
      Σ ∈ R m × n \Sigma \in R^{m \times n} ΣRm×n 是由奇异值组成的对角矩阵,奇异值是 A A T AA^T AAT的特征值的平方根,非零元素的个数等于原矩阵 A A A的秩 r r r
      V T ∈ R n × n V^T \in R^{n \times n} VTRn×n 每一列是 A T A A^TA ATA的特征向量
      左奇异矩阵可以对原始数据做行数的压缩, A d × n ′ = U d × m T A m × n A'_{d \times n} = U_{d \times m}^TA_{m \times n} Ad×n=Ud×mTAm×n,同理右奇异矩阵可以做列数的压缩(即pca降维)
  • 原矩阵 A A A可展开成:
    A = U [ Σ 0 0 0 ] V T = σ 1 u 1 v 1 T + σ 2 u 2 v 2 T + σ r u r v r T A = U \begin{bmatrix} \Sigma & 0 \\0 & 0 \\ \end{bmatrix} V^T = \sigma_1u_1v_1^T + \sigma_2u_2v_2^T + \sigma_ru_rv_r^T A=U[Σ000]VT=σ1u1v1T+σ2u2v2T+σrurvrT
    注意展开式右侧,如果选取奇异值较大的几项代替整个展开式,则可以进行矩阵 A A A的压缩(图像压缩)。

  • 矩阵 U U U V V V都是正交矩阵(两组基),矩阵 A A A的作用是将一个向量从以 V V V为基的空间旋转到以 U U U为基的空间,并且同时做了一定程度的缩放(缩放倍数就是奇异值大小),如果 V V V的维度大于 U U U的维度,那么还进行了投影

  • SVM在推荐系统中的应用(参考):

    • 在推荐系统(协同过滤)中,先对原评分矩阵 A A A做svd,得到较小的分解矩阵(选取前几个奇异值,使得总占比大于阈值)。使用分解矩阵对原始数据进行降维
      A T ∗ U 4 ∗ Σ 4 . I A^T * U_4 * \Sigma_4 .I ATU4Σ4.I
      得到隐层的物品的特征向量(此时每行是一个物品),在计算物品相似度的评分。
    • 也可以反过来提取用户的隐层特征,上式变为:
      A ∗ V 4 T ∗ Σ 4 . I A*V_4^T * \Sigma_4.I AV4TΣ4.I
      则可计算用户的相似度,对用户做聚类等操作…
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值