《现代推荐算法》矩阵分解系列(SVD++,Time SVD++)原理

/关注 长歌大腿 公众号,发送“机器学习”关键字,可获取包含机器学习(包含深度学习),统计概率,优化算法等系列文本与视频经典资料,如《ESL》《PRML》《MLAPP》等。/

文章来源《现代推荐算法》矩阵分解系列(SVD++,Time SVD++)原理 .

SVD++的推荐算法

针对于上面的推荐算法,我们是能够根据一个平台上的庞大的用户群体,一个庞大的数据体来说,对于推荐算法也是个进化的过程,比如我并没有观看过这部电影,但是我看了这种类似题材的电影并且有过评分,但是平台用了机器学习算法分析后决定给我推荐这个电影。

假如就是利用上面介绍的“FunkSVD”和"BiasSVD"算法,但是矩阵计算出来的是我应该对这部片子的理论评分是 9分,恰巧我经过系统推荐(但是系统并不会把系统分析了我的数据后的评分和是9分反馈在界面上)观看了这部电影,而且,我觉得还真的不错啊,我给出了9.5分的反馈。这样就比较麻烦了,因为系统利用推荐系统给我推荐的评分和我真实看过后给出的评分不一致差别还有点大,这个时候,就是反馈的理想值出了问题了,既然我有这个问题,那么针对于别人也可能有这个问题,那么如何在推荐中去更深层的优化整个问题也成了关键,所以机器学习大神又提出了思维,出现了SVD++算法。

SVD++算法就是在BiasSVD算法上进一步做优化,增加考虑用户的隐式反馈。

对于某一个用户i,它提供了隐式反馈的物品集合定义,这个用户对某个物品j对应的隐式反馈修正的评分值为,那么该用户所有的评分修正值为,一般我们将它表示为用形式,则加入了隐式反馈项以后的优化目标函数是这样的:

a r g m i n p i , q j ∑ i , j ( m i , j − μ − b i − b j − q j T p i − q j T 1 ∣ N ( i ) ∣ ∑ s ∈ N ( i ) y s ) 2 + λ ( ∥ p i ∥ 2 2 + ∥ q j ∥ 2 2 + ∥ b i ∥ 2 2 + ∥ b j ∥ 2 2 + ∑ s ∈ N ( i ) ∥ y s ∥ 2 2 ) argmin_{p_{i},q_{j}} \sum_{i,j}(m_{i,j}-\mu -b_{i}-b_{j}-q_{j}^{T}p_{i}-q_{j}^{T}\frac{1}{\sqrt{\left | N(i) \right |} }\sum_{s\in N(i)}y_{s})^{2}+ \lambda (\left \| p_{i} \right \|_{2}^{2}+\left \| q_{j} \right \|_{2}^{2}+\left \| b_{i} \right \|_{2}^{2}+\left \| b_{j} \right \|_{2}^{2} + \sum_{s\in N(i)}\left \| y_{s} \right \|_{2}^{2}) argminpi,qji,j(mi,jμbibjqjTpiqjTN(i) 1sN(i)ys)2+λ(pi22+qj22+bi22+bj22+sN(i)ys22)

引入是为了消除不同,|N(i)|个数引起的差异。式子够长的,不过需要考虑用户的隐式反馈时。
优化方式仍采用梯度求导方式,在此不再进行描述,与上节FUNKSVD与BiasSVD类似。

Time SVD++的推荐算法

word2vec算法也是可以做推荐的,是因为基于人的时间序列的浏览轨迹的变化应该是变化的,更具有个人思维,喜爱的爱好,所以也能算精准化推荐,特别是拿了亚马逊购物平台实际的应用讲解。那么,我们思考一下,时间是个很重要的东西,那么在在基于“结构化数据”的矩阵分解中,参与打分矩阵的人也是从会出现随着时间改变,兴趣,爱好,热度都会改变的,把这种考量的增加到基于矩阵分解的打分矩阵中会如何,所以,出现了“Time SVD++算法”,就是在“SVD++算法”,又增加了“时间序列”这个考虑项,时间序列这个会引起两个状态变化:

  • 物品的流行度或者是随时间的变化程度,原则大部分是会随时间衰减的,因为人的审美随时间变化,当然,没有随时间变化的那部分我们都称呼为“经典款”。
  • 人的评分标准也是随时间变化的,比如年轻时要求更严格,中年会更随和,年老会更和蔼。
  • 同一天的人的审美变化应该不会有太大变化,有变化也是轻微的变化。

下面我们介绍:

1.用户对物品一天内评分的轻微变化
函数 b u i ( t ) b_{ui}(t) bui(t)表示用户u对产品i在t(这一天)的评分。原则上是轻微变化,不会剧烈变化。

b u i ( t ) = μ + b u ( t ) + b i ( t ) b_{ui}(t) = \mu +b_{u}(t)+b_{i}(t) bui(t)=μ+bu(t)+bi(t)

2.物品本身随着时间变化的偏置’

b i ( t ) = b i + b i , b i n ( t ) b_{i}(t) =b_{i} +b_{i,bin(t)} bi(t)=bi+bi,bin(t)

对于产品偏差,不需要太精细的分辨,可以将产品偏差分割为基于时间的bin。在每个时间区间 对应的bin我们使用一个不同的产品偏差。

3.用户本身随着时间变化的偏置:

d e v u ( t ) = s i g n ( t − t u ) ∣ t − t u ∣ β dev_{u}(t)=sign(t-t_{u})\left | t-t_{u} \right | ^{\beta} devu(t)=sign(ttu)ttuβ

用户 u, 评分日期的均值 t u t_{u} tu ; 设用户在t天评价了一部电影,则与该评分相关的时间偏置

4.那么,针对于在时间序列的bin区间内,用户的用户的偏置就是:

b u ( t ) = b u + α u d e v u ( t ) b_{u}(t)=b_{u}+\alpha _{u} dev_{u}(t) bu(t)=bu+αudevu(t)

$\alpha _{u} $是相应的机器学习里面的“学习率”,这里叫做衰减因子。

你可能感兴趣的:(机器学习)