1.8 推荐(recommendation)(协同过滤推荐算法)
协同过滤是一种借助"集体计算"的途径。它利用大量已有的用户偏好来估计用户对其未接触过的物品的喜好程度。其内在思想是相似度的定义。
在基于用户的方法的中,如果两个用户表现出相似的偏好(即对相同物品的偏好大体相同),那就认为他们的兴趣类似。要对他们中的一个用户推荐一个未知物品,便可选取若干与其类似的用户并根据他们的喜好计算出对各个物品的综合得分,再以得分来推荐物品。其整体的逻辑是,如果其他用户也偏好某些物品,那这些物品很可能值得推荐。
1.8.1 交替最小二乘(ALS(alternating least squares))
在机器学习上下文中,ALS特指使用交替最小二乘求解的一个协同推荐算法。例如通过观察所有用户给产品的打分,来推断每个用户的喜好并向用户推荐适合的产品。用户评分矩阵是由用户的特征矩阵乘以物品的特征矩阵得到的,即A = U * V,如果得到了U和V,那么评分矩阵中的每个元素A(i, j)都可由U(i, _) * V(_, j)计算得到。
ALS的核心就是假设:打分矩阵是近似低秩的,也就是一个m * n的打分矩阵A可以用两个小矩阵Um*k和Vn*k的乘积来近似:A ≈ UVT,其中k远远小于m和n。这样,我们就把整个系统的自由度从O(m*n)降到了O( (m+n)*k )。
用户打分矩阵A可以用UVT来近似,那么最直接的一个可以量化的目标就是通过U和V重构A所产生的误差。在ALS里,我们使用Frobenius范数来量化重构误差,就是每个元素与重构之间的误差平方和。至此,我们把一个协同推荐的问题通过低秩假设成功转变成了一个优化问题,优化问题的求解采用ALS(交替最小二乘)。
ALS的目标函数不是凸的,而是变量相互耦合在一起,所以它并不算好解。但如果我们把用户特征矩阵U和产品特征矩阵V二者固定其一,这个问题立刻变成了一个凸的且可拆分的问题。也就是说,固定U求产品特征vj,我们只需要最小化从0到j(箭头右边式子)的值就好了,这个问题就是经典的最小二乘问题。所谓“交替”,就是指我们先随机生成U(0),,然后固定它求解V(0),再固定V(0)求解U(1),这样交替进行下去。因为每步迭代都会降低重构误差,并且误差是有下界的,所以ALS一定会收敛。但由于问题是非凸的,因此ALS并不保证会收敛到全局最优解。但在实际应用中,ALS对初始点不是很敏感,是不是全局最优解造成的影响并不大。
1.8.2 矩阵分解(Matrix Factorization)
矩阵分解(Matrix Factorization)技术目前主要应用于系统领域,用于实现隐含语义模型(Latent Factor Model)。通过矩阵分解,一方面可以减少运算量,另一方面可以很好的解决由于用户数目和物品数目过多引起的行为矩阵稀疏化问题。
Matrix Factorization的原理比较简单,就是将一个矩阵分解为两个矩阵的乘积。与ALS核心相同。