如何捕捉推荐系统中随时间变化的动态信息
2013-12-21 22:13
309 查看
首先来看为时间信息建模的重要性
事物是动态变化的。不仅是人的喜好、品味会随着时间的推移改变(比如,一个喜欢看韩剧的用户渐渐喜欢上了国产“恐怖片”;或用户打分的标准比以往更严格了,感觉极好的也只打4分)。物品的流行度也会随着其他物品的出现,时间的发展而改变(文中显示,老电影评分tend to 比新电影的高)。因此,让推荐系统捕捉到用户和物品的改变能显著地提高推荐的准确度。[2]
进一步,用户和物品的变化可以分两种:long-term trends 和 temporary effects。 模型的目的应该是捕捉到长期的变化趋势,忽略一些暂时表现出的noise。以往的方法会对以前的评价赋予较小的权值,以重点考虑当前的行为。但作者指出在衡量物品间的相似度方面,历史评价记录跟最新评价是同样efficient的(如,看了A的90%用户也看了B,那么A和B是相似的,这点无论在过去还是现在都成立)。[2]
接下来看两个实际的模型
[1] Exploring Temporal Effects for Location Recommendation on Location-Based Social Networks
作者在矩阵分解中加入时间信息,它利用了用户签到在时间上的两个属性:首先,用户在不同时间呈现不同的签到喜好。其次,用户在相邻时间呈现的签到喜好是相近的。因此,假设总共有T个时间段,该方法为每个用户在T个时间段分别创建用户preference矩阵。然后对相邻时段的两个preference矩阵的差值做约束 —— 约束因子为对应时段两个签到向量的余弦相似度。
[2] Collaborative Filtering with Temporal Dynamics
首先解释几个词的意思(自编,仅供参考):
物品bias:某一样物品内在就比其他好,于是获得的评分相对高一般水准要高个0.4分,比如说。
物品的bias动态:举个例子,虽然一个电影从质量上来讲要高于其他电影0.5分,但实际表现出来的差值在不同时间段是不同的 —— 动态变化的
用户bias:每个用户心中的基准分是不一样的。对于大家都认为一般的电影,有人给3分,有人给4分。
用户的bias动态:举个例子,一个用户打分标准变宽松了,平均提高了0.3分 —— 动态变化了
1、作者首先为系统的bias建模。
为物品的bias动态建模:因为物品的变化相对人的变化要小,所以可以把总的时间段分成几段(文中采用的是10周一段),并为每一段分别赋一个物品bias值。
为用户的bias动态建模:由于人比物易变,因此这里采用的时间段长度是1天。大体上,若以函数 f 来建模,其自变量x就是时间点t到参照时间点t_0的距离。当然,f(|t-t_0|)可以是线性函数,也可以是更复杂的函数。另外,作者发现用户一天中的评论趋向于集中在一个评分上,即方差小。于是他又为用户加上一个按天计的bias(原文:assign a single parameter per user and day, absorbing the day-specific variability)。至于参照时间点t_0的选取,文中采用评分记录覆盖的时间段的中间位置。
这里有个疑问:既然是per user and day,那如果测试集数据采集的日期大于训练集采集的日期怎么办?
2、这些与用户真正喜好无关的bias被建模之后,剩下的就能更准确地反应用户的喜好和物品的类属。于是可以大胆地使用隐语义和基于邻域的方法了。
对于隐语义:保持物品的特征不变,使用之前类似的思想给用户的特征加上了随时间的线性变化。
对于邻域模型:由于用户兴趣的变化,过去打5分的电影与现在打5分的电影“相似度”不大可能高(比如,以前他打5分的恐怖片可能现在只会给3分,因为他转性看文艺片了)。所以一个物品对另一个物品的参考价值,是随时间距离的增长而递减的。
这个模型为称为timeSVD++,当特征维度为200,它在Netflix上取得了0.8799的成绩。
总结
其实要在推荐系统中加入时间因素很直观,可以把捕捉用户动态的问题看成一个regression问题。但问题是这种变化通常不是连续的[1][2]。解决的办法是同时捕捉连续和离散的成分。连续成分:使用全局的regression函数来捕捉。离散成分:将timeline分段,并为每段设置独有的基准值。可以看到,[1]中的基准值是那T个用户preference矩阵。[1]不同于[2]的做法是,不使用连续的函数,而是改用“使相邻两个变量的差值尽可能小“的限制。不过本质上都是一样的。
参考文献:
[1] Exploring Temporal Effects for Location Recommendation on Location-Based Social Networks
[2] Collaborative Filtering with Temporal Dynamics
事物是动态变化的。不仅是人的喜好、品味会随着时间的推移改变(比如,一个喜欢看韩剧的用户渐渐喜欢上了国产“恐怖片”;或用户打分的标准比以往更严格了,感觉极好的也只打4分)。物品的流行度也会随着其他物品的出现,时间的发展而改变(文中显示,老电影评分tend to 比新电影的高)。因此,让推荐系统捕捉到用户和物品的改变能显著地提高推荐的准确度。[2]
进一步,用户和物品的变化可以分两种:long-term trends 和 temporary effects。 模型的目的应该是捕捉到长期的变化趋势,忽略一些暂时表现出的noise。以往的方法会对以前的评价赋予较小的权值,以重点考虑当前的行为。但作者指出在衡量物品间的相似度方面,历史评价记录跟最新评价是同样efficient的(如,看了A的90%用户也看了B,那么A和B是相似的,这点无论在过去还是现在都成立)。[2]
接下来看两个实际的模型
[1] Exploring Temporal Effects for Location Recommendation on Location-Based Social Networks
作者在矩阵分解中加入时间信息,它利用了用户签到在时间上的两个属性:首先,用户在不同时间呈现不同的签到喜好。其次,用户在相邻时间呈现的签到喜好是相近的。因此,假设总共有T个时间段,该方法为每个用户在T个时间段分别创建用户preference矩阵。然后对相邻时段的两个preference矩阵的差值做约束 —— 约束因子为对应时段两个签到向量的余弦相似度。
[2] Collaborative Filtering with Temporal Dynamics
首先解释几个词的意思(自编,仅供参考):
物品bias:某一样物品内在就比其他好,于是获得的评分相对高一般水准要高个0.4分,比如说。
物品的bias动态:举个例子,虽然一个电影从质量上来讲要高于其他电影0.5分,但实际表现出来的差值在不同时间段是不同的 —— 动态变化的
用户bias:每个用户心中的基准分是不一样的。对于大家都认为一般的电影,有人给3分,有人给4分。
用户的bias动态:举个例子,一个用户打分标准变宽松了,平均提高了0.3分 —— 动态变化了
1、作者首先为系统的bias建模。
为物品的bias动态建模:因为物品的变化相对人的变化要小,所以可以把总的时间段分成几段(文中采用的是10周一段),并为每一段分别赋一个物品bias值。
为用户的bias动态建模:由于人比物易变,因此这里采用的时间段长度是1天。大体上,若以函数 f 来建模,其自变量x就是时间点t到参照时间点t_0的距离。当然,f(|t-t_0|)可以是线性函数,也可以是更复杂的函数。另外,作者发现用户一天中的评论趋向于集中在一个评分上,即方差小。于是他又为用户加上一个按天计的bias(原文:assign a single parameter per user and day, absorbing the day-specific variability)。至于参照时间点t_0的选取,文中采用评分记录覆盖的时间段的中间位置。
这里有个疑问:既然是per user and day,那如果测试集数据采集的日期大于训练集采集的日期怎么办?
2、这些与用户真正喜好无关的bias被建模之后,剩下的就能更准确地反应用户的喜好和物品的类属。于是可以大胆地使用隐语义和基于邻域的方法了。
对于隐语义:保持物品的特征不变,使用之前类似的思想给用户的特征加上了随时间的线性变化。
对于邻域模型:由于用户兴趣的变化,过去打5分的电影与现在打5分的电影“相似度”不大可能高(比如,以前他打5分的恐怖片可能现在只会给3分,因为他转性看文艺片了)。所以一个物品对另一个物品的参考价值,是随时间距离的增长而递减的。
这个模型为称为timeSVD++,当特征维度为200,它在Netflix上取得了0.8799的成绩。
总结
其实要在推荐系统中加入时间因素很直观,可以把捕捉用户动态的问题看成一个regression问题。但问题是这种变化通常不是连续的[1][2]。解决的办法是同时捕捉连续和离散的成分。连续成分:使用全局的regression函数来捕捉。离散成分:将timeline分段,并为每段设置独有的基准值。可以看到,[1]中的基准值是那T个用户preference矩阵。[1]不同于[2]的做法是,不使用连续的函数,而是改用“使相邻两个变量的差值尽可能小“的限制。不过本质上都是一样的。
参考文献:
[1] Exploring Temporal Effects for Location Recommendation on Location-Based Social Networks
[2] Collaborative Filtering with Temporal Dynamics
相关文章推荐
- 信息管理系统如何获取当前日期时间
- ORACLE物化视图--物化视图日志如何避免系统时间变化带来的影响
- 推荐系统 | 信息过载的大数据时代,大数据推荐系统如何搭建,趋势何方
- 广电网络资源管理系统的动态显示信息变化
- 3月29日 如何在winform中加入动态系统时间
- ORACLE物化视图--物化视图日志如何避免系统时间变化带来的影响
- c++ 如何获取系统时间 - zjnig711的信息仓库 - 博客频道 - CSDN.NET
- 如何保证企业信息安全系列之-企业系统层安全保障精要 推荐
- 如何在网页中动态显示当前的系统日期和时间?
- 如何动态抓取系统时间并以字符串形式保存。
- 如何记录 Linux 的系统运行时间的统计信息
- PB9.0如何动态获取系统时间
- C#中动态显示当前系统时间
- ios 如何获得系统时间和日期
- 探讨SQL利用INFORMATION_SCHEMA系统视图如何获取表的主外键信息
- 如何获取系统时间并与输入的时间进行对比
- win8.1动态壁纸如何设置?window8.1系统动态壁纸设置方法
- oracle常用的修改表信息及其获取系统日期时间的sql语句
- 如何改系统调度的默认时间片值
- 如何在myeclipse中添加作者时间等信息