推荐系统中的矩阵分解演变方式
Posted jhcelue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐系统中的矩阵分解演变方式相关的知识,希望对你有一定的参考价值。
推荐算法主要分为基于内容的算法和协同过滤. 协同过滤的两种基本方法是基于邻居的方法(基于内容/物品的协同过滤)和隐语义模型. 矩阵分解乃是实现隐语义模型的基石.
矩阵分解依据用户对物品的评分, 判断出用户和物品的隐语义向量, 然后依据用户和物品的隐语义向量来进行推荐.
推荐系统用到的数据能够有显式评分和隐式评分. 显式评分时用户对物品的打分, 显式评分矩阵通常很稀疏. 隐式评分是指用户的浏览, 购买, 搜索等历史记录, 表示的是用户行为的有无, 所以是一个密集矩阵.
矩阵分解方法会将用户和物品映射到维的隐向量空间, 用户对物品的评分表示为两个向量的内积. 亦即, 每一个物品表示为向量, 每一个用户表示成向量. 对于物品, 向量的元素表示的是物品具有这些隐因子的程度, 对于用户, 向量表示的是用户对各个隐因子的兴趣, 元素的值可正可负. 两个向量的内积
表示的就是预计的用户对物品的评分. 所以基本的挑战就是计算用户和物品到隐向量的映射.
最简单的就是神秘值分解(Singular value decomposition, SVD), 使用SVD须要分解用户物品评分矩阵, 可是通常该矩阵中有非常多值是缺失的, 这样的情况下的SVD是不可行的. 另外, 仅仅处理已知的这些评分easy导致过拟合. 能够通过填充数据来使得矩阵变得稠密, 可是填充数据的准确性非常是问题.
最主流的做法是仅仅对那些已观測到的评分进行建模, 而且通过使用正则化项来避免过拟合, 亦即求解下面问题:
当中是所以已知评分的用户-物品对, 控制着正则化的程度.
两种经常使用的求解上式的算法为随机梯度下降(SGD)和ALS(Alternating Least Square).
对于每一个用户-物品评分, 计算预測误差
然后依照梯度下降的方向更新用户和物品的隐向量:
由于和都是未知的, 所以公式2不是凸的. 可是, 当我们固定当中一个变量, 则2式变成一个二次函数, 可以被最优的求解. 所以ALS算法的思想就是交替的固定和, 然后求解另外一个变量的二次函数的最优值.
通常SGD都会比ALS要简单并且高速, 可是ALS的并行性比較好, 并且能够较好地处理稀疏数据(?).
矩阵分解方法的一个优点就是能够灵活的加入很多面向应用的要求. 比方, 通常来说, 不同用户的评分倾向不同, 用的用户的打分普遍较高, 有的普遍较低, 物品亦然. 所以只使用用户和物品之间的交互来对评分进行建模不是非常好, 还须要加上一些偏置项. 一种一阶偏置项近似为:
当中描写叙述的是全部评分的平均值, 描写叙述的是用户和物品相对于的偏差.
评分模型为:
转化为最优化问题为:
当解决冷启动问题时, 用户的评分信息非常少, 这时候就须要使用用户的其它输入信息, 比方用户隐式反馈(浏览, 购买历史等). 令表示用户有隐反馈的物品. 系统能够通过这些物品来对用户建模, 亦即把每一个物品表示成一个隐向量, 则用户能够通过下式来描写叙述:
能够对上式进行正则化:
也能够使用用户的一些其它属性(性别, 年龄, 收入等)来对用户建模, 令表示用户的一些布尔属性,则隐向量表示用户的某个属性, 用户的全部属性能够通过下式来描写叙述:
用户对物品的评分能够表示为:
到如今为止, 模型是静态的, 可是实际中物品的流行程度会随着时间变化, 用户的评分倾向也会变化, 用户的隐向量也会随时间变化. 所以能够将这些变量表示成时间的函数来更好地描写叙述这些现象:
不同的评分的可信度不同. 比方广告会影响某个物品的评分, 另外, 有些作弊的用户会对某些物品恶意的打高分或者低分. 另外, 在使用隐式反馈时, 能够使用某些行为(比方浏览)等得次数来表示用户喜欢某个物品的程度. 能够通过为某个评分设置权重来解决上述问题:
參考文献:
[1]. Yuhuda Koren, Robert Bell and Chris Volinsky. Matrix Factorization Techniques for Recommender Systems.
矩阵分解依据用户对物品的评分, 判断出用户和物品的隐语义向量, 然后依据用户和物品的隐语义向量来进行推荐.
推荐系统用到的数据能够有显式评分和隐式评分. 显式评分时用户对物品的打分, 显式评分矩阵通常很稀疏. 隐式评分是指用户的浏览, 购买, 搜索等历史记录, 表示的是用户行为的有无, 所以是一个密集矩阵.
1. 基本矩阵分解
矩阵分解方法会将用户和物品映射到维的隐向量空间, 用户对物品的评分表示为两个向量的内积. 亦即, 每一个物品表示为向量, 每一个用户表示成向量. 对于物品, 向量的元素表示的是物品具有这些隐因子的程度, 对于用户, 向量表示的是用户对各个隐因子的兴趣, 元素的值可正可负. 两个向量的内积
表示的就是预计的用户对物品的评分. 所以基本的挑战就是计算用户和物品到隐向量的映射.
最简单的就是神秘值分解(Singular value decomposition, SVD), 使用SVD须要分解用户物品评分矩阵, 可是通常该矩阵中有非常多值是缺失的, 这样的情况下的SVD是不可行的. 另外, 仅仅处理已知的这些评分easy导致过拟合. 能够通过填充数据来使得矩阵变得稠密, 可是填充数据的准确性非常是问题.
最主流的做法是仅仅对那些已观測到的评分进行建模, 而且通过使用正则化项来避免过拟合, 亦即求解下面问题:
当中是所以已知评分的用户-物品对, 控制着正则化的程度.
2. 学习算法
两种经常使用的求解上式的算法为随机梯度下降(SGD)和ALS(Alternating Least Square).
2.1 随机梯度下降
对于每一个用户-物品评分, 计算预測误差
然后依照梯度下降的方向更新用户和物品的隐向量:
2.2 ALS(Alternating Least Square)
由于和都是未知的, 所以公式2不是凸的. 可是, 当我们固定当中一个变量, 则2式变成一个二次函数, 可以被最优的求解. 所以ALS算法的思想就是交替的固定和, 然后求解另外一个变量的二次函数的最优值.
通常SGD都会比ALS要简单并且高速, 可是ALS的并行性比較好, 并且能够较好地处理稀疏数据(?).
3. 加入偏置项
矩阵分解方法的一个优点就是能够灵活的加入很多面向应用的要求. 比方, 通常来说, 不同用户的评分倾向不同, 用的用户的打分普遍较高, 有的普遍较低, 物品亦然. 所以只使用用户和物品之间的交互来对评分进行建模不是非常好, 还须要加上一些偏置项. 一种一阶偏置项近似为:
当中描写叙述的是全部评分的平均值, 描写叙述的是用户和物品相对于的偏差.
评分模型为:
转化为最优化问题为:
4. 其它的输入源
当解决冷启动问题时, 用户的评分信息非常少, 这时候就须要使用用户的其它输入信息, 比方用户隐式反馈(浏览, 购买历史等). 令表示用户有隐反馈的物品. 系统能够通过这些物品来对用户建模, 亦即把每一个物品表示成一个隐向量, 则用户能够通过下式来描写叙述:
能够对上式进行正则化:
也能够使用用户的一些其它属性(性别, 年龄, 收入等)来对用户建模, 令表示用户的一些布尔属性,则隐向量表示用户的某个属性, 用户的全部属性能够通过下式来描写叙述:
用户对物品的评分能够表示为:
5. 时间因素
到如今为止, 模型是静态的, 可是实际中物品的流行程度会随着时间变化, 用户的评分倾向也会变化, 用户的隐向量也会随时间变化. 所以能够将这些变量表示成时间的函数来更好地描写叙述这些现象:
6. 不同可信度的输入源
不同的评分的可信度不同. 比方广告会影响某个物品的评分, 另外, 有些作弊的用户会对某些物品恶意的打高分或者低分. 另外, 在使用隐式反馈时, 能够使用某些行为(比方浏览)等得次数来表示用户喜欢某个物品的程度. 能够通过为某个评分设置权重来解决上述问题:
參考文献:
[1]. Yuhuda Koren, Robert Bell and Chris Volinsky. Matrix Factorization Techniques for Recommender Systems.
以上是关于推荐系统中的矩阵分解演变方式的主要内容,如果未能解决你的问题,请参考以下文章