spark数据挖掘 - 基于 Audioscrobbler 数据集音乐推荐实战

基于 Audioscrobbler 数据集音乐推荐实战

1. 数据集

这个例子将使用 Audioscrobbler 公开的数据集。Audioscrobbler是http://www.last.fm/zh/第一个音乐推荐系统.
http://www.last.fm/zh/ 是第一个网络流媒体音频网站,成立与2002年。
Audioscrobbler 为 “scrobbling” 提供了一个开发的 API,主要记录听众听取了哪些作家的歌曲。 这个网站利用这些信息建立了一个强大的额音乐推荐系统。这个系统达到了数百万用户,因为第三方的App和网站可以提供收听数据给推荐引擎。 在那个时期,研究推荐系统大部分局限在学习类似评级的数据集。也就是说,推荐的人往往使用需要输入像 “某某某 评分3.5分” 这样的工具。 然而,Audioscrobbler 数据集有趣地方在于仅仅记录播放的历史:“某某某 播放了 什么”。一个播放记录带来的信息量远远小于一个评分数据带来的信息量,但是评分数据总量肯定没有播放历史记录的数据多,当大量播放历史记录放在一起的时候,比评分数据将更有价值。 由这个网站公布的一个2005年的数据集合可以在http://www-etud.iro.umontreal.ca/~bergstrj/audioscrobbler_data.html上面下载。这个数据集合没有解压之前大小是 135MB,解压之后是 500MB,解压之后将会看到主要的数据集是 user_artist_data.txt 文件,里面大约包含 141000 唯一的用户和 1.6 百万唯一的artist艺术家,大约 24.2 百万用户播放记录。 当然每个 artist 都是用 id 记录的,id 与 名字的对照关系是在 artist_data.txt 中。注意同一个 artist 可能对应很多不同名字即有不同的 id。 所以这里还有一个文件 artist_alias.txt 标识每个 artist 的别名。里面用一个唯一的id 标识所有同一个artist id 列表。

2. 推荐算法

我们需要选择一种适合于这种隐士反馈数据的算法。这个数据集全部是用户与作家的歌曲之间的交互行为数据。它没有包含用户和作家本身除了名字之外的其他属性信息。 这个就是典型的协同过滤算法。举个例子:比如决定两个用户具有相同的品味的原因是他们有相同的年龄,这个不是协同过滤。决定两个用户都喜欢同一首歌曲的原因是他们之间有很多共同喜欢的歌曲,这才是协同过滤。
这个数据集很大,因为他包含1千万多条用户播放记录。但是从另一个方面来说,它又很小数据量不够,因为它很稀疏。平均起来,每个用户才放过171个艺术家的歌曲,而总共的艺术家有 1.6 百万个。有些用户甚至只是听歌一个作曲家的歌曲,我们需要一种算法,能够对这种用户也给出合理的推荐。毕竟,每个人刚开始在系统中开始产生记录的那一刻都只听过一个作家。这个也说明算法对新用户准确度低,这种情况当用户交互行为变多的时候会慢慢变好。 当然,我们需要我们的算法有能力扩展,处理大数据,并且很快。
接下来我们例子里面展示的算法是广泛分类算法模型中的一个叫做隐因素模型。模型尝试通过观察不到的潜在的原因去解释这些观察到的大量的用户产品交互行为。 更具体的来说,这个例子将使用一个矩阵分解模型。下面介绍交叉最小方差模型。

交叉最小方差

算法名字 交叉最小方差, Alternating Least Squares, ALS
算法描述 Spark上的交替性最小二乘ALS本质是一种协同过滤的算法
算法原理 1. 首先将用户推荐对象交互历史转换为矩阵,行表示用户,列表示推荐对象,矩阵对应 i,j 表示用户 i 在对象 j 上有没有行为 <br /> 2. 协同过滤就是要像填数独一样,填满1得到的
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值