交替最小二乘法(ALS)的工作原理

假设我们有一个评分矩阵,我们希望通过交替优化用户矩阵和物品矩阵来最小化误差。

假设:

  • 我们有一个评分矩阵 ( R ),它的维度是 ( m \times n ),即 ( m ) 个用户和 ( n ) 个物品(比如电影、商品等)。
  • 矩阵分解目标:我们想将这个矩阵分解成两个较小的矩阵:
    • 用户特征矩阵 ( U )(维度为 ( m \times k ),每个用户有 ( k ) 个特征)
    • 物品特征矩阵 ( V )(维度为 ( n \times k ),每个物品有 ( k ) 个特征)
  • 目标是找到 ( U ) 和 ( V ) 使得它们的乘积 ( UV^T ) 尽可能接近原始评分矩阵 ( R )。

第一步:定义误差

首先,定义预测矩阵为 ( \hat{R} = UV^T )。我们的目标是最小化这个预测矩阵 ( \hat{R} ) 和实际评分矩阵 ( R ) 之间的误差。

误差可以表示为:
[ E = \sum_{(i,j) \in K} (R_{ij} - U_i V_jT)2 ]
其中:

  • ( E ) 是总的平方误差。
  • ( R_{ij} ) 是用户 ( i ) 对物品 ( j ) 的评分。
  • ( U_i ) 是用户 ( i ) 的特征向量(大小为 ( 1 \times k ))。
  • ( V_j ) 是物品 ( j ) 的特征向量(大小为 ( 1 \times k ))。
  • ( K ) 是包含用户对物品评分的所有索引集(即,已知评分的用户-物品对)。

我们希望通过优化 ( U ) 和 ( V ) 来最小化这个误差。

第二步:固定物品矩阵 ( V ),优化用户矩阵 ( U )

首先,我们固定物品特征矩阵 ( V ),然后根据评分矩阵 ( R ) 优化用户特征矩阵 ( U )。

对每个用户 ( i ),我们的目标是通过最小化以下的平方误差来计算 ( U_i ):
[ E = \sum_{j \in K_i} (R_{ij} - U_i V_jT)2 + \lambda | U_i |^2 ]

其中:

  • ( K_i ) 是用户 ( i ) 给物品打过分的物品集合。
  • ( \lambda ) 是正则化参数,用来防止过拟合(类似于加了惩罚项)。

为了最小化这个误差,我们可以用最小二乘法来求解 ( U_i ) 的最优值。实际上,这是一个线性回归问题。我们可以把它写成一个矩阵形式的方程:

[ U_i = (V_{K_i}^T V_{K_i} + \lambda I)^{-1} V_{K_i}^T R_i ]

其中:

  • ( V_{K_i} ) 是物品特征矩阵中用户 ( i ) 打过分的物品行的子矩阵。
  • ( R_i ) 是用户 ( i ) 的评分向量。
  • ( I ) 是单位矩阵。

通过这一步,我们可以得到所有用户的特征向量 ( U_i )。

第三步:固定用户矩阵 ( U ),优化物品矩阵 ( V )

接下来,我们固定用户特征矩阵 ( U ),对物品特征矩阵 ( V ) 进行优化。这一步的计算过程与第二步类似,只是换成了物品的特征向量。

对每个物品 ( j ),我们最小化以下误差:
[ E = \sum_{i \in K_j} (R_{ij} - U_i V_jT)2 + \lambda | V_j |^2 ]

这里的 ( K_j ) 是打过分的用户集合,表示哪些用户对物品 ( j ) 进行了评分。

同样,使用最小二乘法,我们可以得到物品特征矩阵 ( V_j ) 的更新公式:
[ V_j = (U_{K_j}^T U_{K_j} + \lambda I)^{-1} U_{K_j}^T R_j ]

其中:

  • ( U_{K_j} ) 是用户特征矩阵中打过物品 ( j ) 的用户行的子矩阵。
  • ( R_j ) 是物品 ( j ) 的评分向量。

通过这一步,我们可以得到所有物品的特征向量 ( V_j )。

第四步:反复交替更新,直到收敛

上述的两个步骤(优化 ( U ) 和优化 ( V ))反复进行。每次更新用户矩阵 ( U ) 后,再更新物品矩阵 ( V ),直到误差不再显著减少,也就是收敛。

总结:

  • 步骤 1:初始化用户矩阵 ( U ) 和物品矩阵 ( V ),通常是随机初始化。
  • 步骤 2:固定物品矩阵 ( V ),用最小二乘法计算用户矩阵 ( U )。
  • 步骤 3:固定用户矩阵 ( U ),用最小二乘法计算物品矩阵 ( V )。
  • 步骤 4:反复交替更新,直到平方误差收敛(即误差不再明显减小)。

通过这些步骤,ALS 可以找到合适的用户和物品的特征向量,从而预测用户对未评分物品的评分。

希望这些计算步骤能帮助你更好地理解 ALS 的计算过程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值