摘要
这篇报告描述了2012EMI音乐数据科学Hackathon中排名第一的盛大创新院的音乐推荐算法思路。他们使用了分解机器(大致看了下好像就是矩阵分解模型)和线性回归来融合大量特征。他们使用了用户的年龄,性别,工作状态,地区等其他用户资料来对用户兴趣进行建模。他们还融合了用户对EMI音乐家的描述来提升预测精度。此外,他们使用了一种简单的集成方法和后处理策略来合成两个不同的预测器,以生成最终的结果。
引言
与传统推荐问题如Netflix竞赛相比,EMI的数据竞赛的复杂程度表现在两个方面:(1)用户和产品(音乐家)都有更为丰富的特征。例如在Words.csv中,用户对一些问题的回答表明了他们对EMI音乐家的熟悉度;此外用户还可以选择一些词来描述这些音乐家(类似于标签)(2)用户资料更为丰富,如年龄,性别,地区(这里选择的是英国的数据),工作的状态,听歌习惯(一些答案可以)。因此我们需要可以有效融合不同特征的模型,同样需要对这些特征进行有效的预处理。
本文使用了Factorization Machine和线性回归的方法。我们从训练数据中抽取了不同的特征融合到模型中。在对不同的特征预处理,使用一种基于随机梯度下降的训练框架来优化模型。我们构建了两种模型分别不同的特征的重要性,还使用了一种线性组合的方法集成这两个模型,使用后处理的策略以获得更高的精度。
本文结构如下:第二节介绍了我们使用的预处理方法,如何生成测试数据集;第三节提出了最终的模型;第四节和第五节提出了集成方法和后处理方法。
预处理方法
words.csv
这个表主要描述用户对音乐家的看法。团队用预处理手段将表征用户偏好转到[0,1]区间上。
首先合并“Good lyrics”栏目。
将“Like_Artist”栏映射到[0,1]区间内(除以100),删除所有缺失值。
“Heard_of”和“Own_artitist_music”栏目转换为离散值:如果用户给某个答案给了对应答案,将其转换为1。
用户
这个表是用户的个人文档,包括他们对音乐的态度。
对于音乐习惯问题,我们报了所有有效的评价,并将它们转换为[0,1]区间内。
对于年龄栏,保留所有有效值。
对于剩下的栏目,如“性别”,“工作”等将这些值转为离散值。
生成测试数据集
将train.csv按照75/25的比例随机分成训练集和测试集。在训练集上训练模型,在测试集上测试。
模型
符号 我们用
U
表示用户集合,
分解模型
有用户偏差和产品偏差的基准SVD模型定义如下:
其中 pu 是一个d维的用户特征向量, qi 是一个产品特征向量。d是预先设置的参数。偏差特征 bui 定义如下:
在该公式中,参数 μ 大表整体评分均值, bu 和 bi 分别表示用户和产品的评分偏差。这些参数可以通过求解下式得到:
模型学习方法
随机梯度下降(SGD)是求解优化问题的有效方法。我们将预测误差表示为
eui
。SGD基于下列方程更新参数:
线性回归
在统计学中,线性回归是对自变量X和因变量Y进行建模的方法。在线性回归中,我们使用线性预测函数对数据进行建模,从数据中估计出未知的模型参数。
这里我们使用线性回归方法整合用户信息和用户对音乐家的描述,然后我们可以将矩阵分解模型的预测值和线性回归的预测值进行结合以更好地建模。
$y_{ui}用下式定义:
其中 {Xkui} 是words.csv和users.csv转换而来的特征值。
对于离散值, Xkui 要么为0,要么为1,如”性别”,”工作”;对于连续值如”like artist”和很多用户的习惯问题, Xkui 将被转换为0-1之间的连续值。对于年龄这一特征,我们将”age”属性上对应的值x转为一个新的值
将等于36 的 Xkui 的值设为1。
参数 βi 通过调整SGD更新过程学习(3.2)得到,对于每步,我们加上:
集成
我们对两个模型的预测结果进行简单的求和平均。
后处理
该任务是预测用户有多大可能喜欢一首音乐。评分范围在[0,100]之间,所以如果我们的模型少于0或者大于100应该将其重新放到0-100之间。
对于每个用户,我们要减少预测评分与训练数据的评分分布的偏差。对于用户
u
,我们发现训练数据中最小评分为