2009年3月28日星期六

TimeSVD

最近一直在写一篇关于如何使用时间信息的论文,准备投4月份的WI,今天将论文中的一些结果加入到以前的预测器集合中,RMSE从0.8770降到了0.8761。以前的预测器集合中已经有了很多考虑时间信息的预测器,不过这个这个预测器效果是最好的。

根据我的估计,时间信息对最终结果的影响大概在0.007 - 0.01之间,在我的论文中将会阐述这个结果的由来。

2009年3月23日星期一

Global Effects in Netflix Prize

忙活了几天,终于把那个global effects给搞定了,不容易啊,嘿嘿

Today, I have implement alogrithm of global effects in Netflix. My method is similar to Koren's method. However, I think, his paper is not very clearly. I have tested many methods and at last get same result as him. Therefore, I will give detail description of my algorithms.


Related Papers:
The BigChaos Solution to the Netflix Prize 2008
Scalable Collaborative Filtering with Jointly Derived Neighborhood Interpolation Weights

0. global average

b0(u,i) = global_mean

1. movie effect

x(u,i) = average(i) = sum_u {r(u,i) - b0(u,i)} / n(i)

we calculate average rating of movies. In order to avoid, we also shrink average(i) by:

average(i) = average(i) * n(i) / (n(i) + alpha)

In my implement, we choose alpha = 22 and get RMSE = 1.0527

b1(u,i) = b0(u,i) + p(u) x(u,i)

Here, p(u) is estimate by Koren's method.

p(u) = sum_i (b1(u,i) - b0(u,i)) * x(u,i) / sum_i x(u,i) * x(u,i)

and shrink by:

p(u) = p(u) * n(u) / (n(u) + alpha)
2. user effect

x(u,i) = average(u) = sum_u {r(u,i) - b1(u,i)} / n(u)

we also shrink x(u,i), choose alpha = 7.5 and get RMSE = 0.9840

Then, we get predictor b2:
b2(u,i) = b1(u,i) + p(u) x(u,i)

3. user X time(user)

Let t(u) be the first time when user u give ratings. t(u,i) is the time when u assign rating to i. Then, the effect x(u,i) is:

x(u,i) = sqrt(t(u,i) - t(u)) ; t(u,i) - t(u) > beta
x(u,i) = 0 ; otherwise

In our algorithm, we choose beta = 18 and shrink parameter alpha = 160. We get RMSE = 0.9801.

Then, we get predictor b3:
b3(u,i) = b2(u,i) + p(u) x(u,i)

2009年3月19日星期四

在已有的模型结果上做KNN

假设我们已经有了一个预测器b。我们定义item直接的相似度为:


然后用item-based KNN进行预测,我们在20个factor的SVD结果上,进行了K=30的KNN算法。计算出一个预测器,加入到最后的预测器集合中融合,得到RMSE=0.8782

我准备将这个方法应用到更多的预测器上

2009年3月18日星期三

电影发布时间的影响

今天开始考虑电影发布时间对精度的影响,最近几天经过调整,目前RMSE=0.8791。这几天还在实现user-based factorized neighborhood model。
处理电影时间,我用了一个简单的模型:b(u,t),u是用户,t是电影发行时间。我以每8年作为一个时间段,然后在NSVD模型中加入这个修正项。

2009年3月12日星期四

基于分解的邻域算法

经过一夜的计算,NSVD算法终于跑出了一个50维的结果,我将他放入到融合模型中,没想到性能有大大的提升,RMSE从0.8873到了0.8811

模型的基本公式如下,也是用梯度法训练的。




---------------------------------------------------
本文使用了在线Latex公式编辑器,感觉不错,地址是http://thornahawk.unitedti.org/equationeditor/equationeditor.php

普通的SVD方法已经到头了

之前我的融合算法中,svd用的最高是500个latent class,刚刚加入了1000维的,最终RMSE只是从0.8874变成了0.8873,看来单纯增加维数已经没有用了。

下一步工作主要是改进NSVD(Neighborhood based SVD)算法,个人感觉,SVD和邻域加上一些非线性核函数,应该是所有可用的方法,而RBM,个人感觉,有点像加了核函数的NSVD算法。

2009年3月11日星期三

时间信息在推荐系统中的作用

今天加入了UserTimeSVD模型,目前的RMSE = 0.8874

根据我的研究,时间对于用户的影响超过了时间对于电影的影响。我计算了一些用户每个月的平均评分,发现用户在某些时间喜欢对他们喜欢的电影评分,而在另一些时间喜欢对不喜欢的电影评分。

而对于电影来说,一部电影会被很多用户评分,所以平均意义上,电影的评分不会有太大变化。不过我还发现一个现象,就是当电影刚出现时,他的评分在最初的几个月会有比较大的波动,但经过大概半年之后,他的评分就不会有变化了。

目前我正在写这方面的论文。如果我们用SVD分解,用50个latent factor,在Probe上的RMSE是0.908,但考虑了用户兴趣随时间变化后,可以得到更精确的RMSE为0.903

2009年3月6日星期五

加入了sigmoid核函数方法,RMSE0.8949

加入了sigmoid核函数方法,RMSE0.8949

考虑用户时间因素的SVD模型(TimeSVD02Model)

这个模型中,考虑了user评分的时间变化因素,在基本的SVD模型中加入了一项,变为

r(u,i,t) = mean + b(u) + b(i) + b(t) + dot(p(u),q(i)) + dot(x(u),y(t))

其中p(u),q(i)是一个d1维的向量,x(u),y(t)是一个d2维的向量

考虑电影的时间因素(ItemKNN3Model)

在item-basedKNN中,可以考虑电影的时间因素。

电影i,j的相似度为s(i,j),考虑时间因素后,定义为

s(i,j) = s(i,j) * exp(-k * |t(i) - t(j)|)

2009年3月5日星期四

关于SVD模型中的kernel

基本的svd模型是
r(ui) = mean + b(u) + b(i) + dot(p(u), q(i))

dot()是表示两个向量的点乘。

其实这里的dot(p(u),q(i))是考虑到了u和i的特点对均值做的一个偏差。他的分布应该是以0为中心的正态分布。我现在考虑引入kernel函数,目前用sigmoid核函数。

sigmoid(x) = a * (1 - exp(-kx)) / (1 + exp(-kx))

到目前为止的进度

2009/02/24

SVD模型 d = 250,学习速率0.0055,正则化参数0.002,RMSE = 0.904

2009/02/25

今天用一种新的方法计算item-based算法中的相关系数,只需要3个小时(包含读取文件的时间)。

邻域数为30,得到RMSE = 0.9416

邻域数为100,RMSE = 0.9574

邻域数为20,RMSE = 0.9394

2009/02/27

今天利用模型融合的方法,融合了SVD和item-based KNN两种方法,得到 RMSE = 0.9025

调整参数,alpha = 0.04 beta = 0.5 RMSE = 0.9012

alpha = 0.04 beta = 0.9 RMSE = 0.9013

2009/02/28

item-based 10NN + SVD250 RMSE = 0.9002

2009/03/01

今天发现我在计算probe数据集的RMSE时忘记开根号了,低级错误啊。我一直困惑为什么probe的RMSE在0.8左右,而quiz的确大于0.9,原来是根号的缘故.0.9 * 0.9 = 0.81,呵呵

2009/03/04

今天修改了FLC模型,

item-based 10NN + SVD250 RMSE =0.8994

2009/03/05

简单的线性回归 9个模型融合 RMSE = 0.8989

FCL RMSE = 0.8974 这说明FLC模型还是比线性回归融合的更好的。

现在正在计算NSVD模型,明天也加入融合

2009/03/06

今天加入了NSVD模型,并采用FLC融合,RMSE = 0.8965

下一阶段将考虑时间因素和电影标题