SVDFeature 是由上海交大Apex Data & Knowledge Management Lab(APEX)开发的一个推荐系统工具包。他们提出了一种基于feature 的矩阵分解的框架。SVDFeature使设计推荐算法变得非常简单,只需在此框架内增加一些新的feature(如neighborhood特征、时间特征等)。SVDFeature 曾在KDDCup’11 track 1中取得单模型的最好成绩。
SVDFeature 模型如下
其中α表示用户特征,β表示商品特征,γ表示全局特征
Active function and Loss function有以下几种选择:
模型训练
SVDFeature 采用随机梯度下降进行训练。对于L2 loss其参数更新规则如下:
许多矩阵分解模型都可以包含在此框架内:
(1)矩阵分解模型
对应的特征表示为:
(2)Pairwise rank 模型
对应的特征表示为:
(3)SVD++ 模型
相当于SVDFeature的特例:
处理大规模数据
推荐系统中的数据集通常很大,而单机内存容量有限,很难将所有数据一次性加载到内存中。SVDFeature采用的方案是将数据先存储在硬盘(buffer file)上,当训练过程中用到该数据时再从硬盘中读取。另外,因为是采用随机梯度下降进行训练,需要先将数据进行shuffle后再存到buffer file上。采用这种方案,无论要处理的数据集有多大,只要模型参数能够加载到内存中就可以运行。
为了降低频繁读取硬盘的开销,SVDFeature采用了pre-fetch 策略。一个专门的线程负责读取数据,一个线程负责模型训练。这样只要I/O的速度和模型训练的速度相近,I/O的开销就可以被隐藏。
软件使用
SVDFeature-1.2.2 下载地址:
http://apex.sjtu.edu.cn/projects/33下载完成后进行编译
ubuntu 系统:分别在主目录和tools目录下执行make命令运行demo文件夹下的例子
采用movielens ml-100k 数据集
basicMF:
迭代40次 rmse:
implicitFeedback
每次迭代RMSE为:
pairwiseRank
参考文献
《Feature-Based Matrix Factorization》
《SVDFeature: A Toolkit for Feature-based Collaborative Filtering》
《Svdfeature-manual》