作者 : 庄程 旭 清华大学电子工程系
DESCRIPTION
基于邻域, LDA 和 FM 的 混合推荐系统 设计. 作者 : 庄程 旭 清华大学电子工程系. 百度电影推荐. ?. 评分. 训练数据: 1,262,741 测试数据: 314,679 电影总数: 8,369 用户总数: 143,670 标签总数: 1,129 平均关注数: 6.91 用户观看电影记录: 9,871,737. 关注. 标签. 魔幻片. 外语片. 问题描述. FM. 基础模型. kNN. RBM. LibFM. Factorization machines. Basic - PowerPoint PPT PresentationTRANSCRIPT
作者 : 庄程旭清华大学电子工程系
基于邻域, LDA 和 FM 的混合推荐系统设计
百度电影推荐
问题描述
评分
标签关注
魔幻片外语片
?训练数据: 1,262,741测试数据: 314,679电影总数: 8,369用户总数: 143,670标签总数: 1,129平均关注数: 6.91用户观看电影记录:
9,871,737
基础模型
模型建立 实证研究 比赛之后文献综述
Factorization machines
BasicModels
RandomForest
1. LibFM
2. SVD++
RBMkNN
1. Tag 作为 item feature
Basic Features
模型建立 实证研究 比赛之后文献综述
1. 根据用户喜爱程度调整参数2. 根据 tag 的所标注电影数进行分类
2. 将 Social 信息直接作为 user feature
模型建立 实证研究 比赛之后文献综述
Basic Features
1. 只保留相似度高的好友
相似度计算:
2. 只保留入度高的好友
1. 计算“品味相同”的人,取前30 个直接作为 user feature
实证研究 比赛之后文献综述 模型建立
Advanced Features
基本思路:参考 kNN 的思想,参考相邻的人的打分来得出最后
的打分
2. 计算“品味相同”的电影,取前 30 个直接作为 movie feature
模型建立 实证研究 比赛之后文献综述
初步实验
每一套模型均采用以下 4 种参数和程序运行方式:
LibFM :采用 MCMC 学习,初始值选取参数 0.1 ,特征维数 20 维,迭代 100 轮SVD++_2 :采用 SGD 学习,迭代 200 轮,特征维数50 维,前 100 轮步长 0.01 ,后 100 轮步长 0.001 ,参数惩罚 0.0001 ,用 sigmoid 化。
SVD++_1 :采用 SGD 学习,迭代 200 轮,特征维数50 维,前 100 轮步长 0.01 ,后 100 轮步长 0.001 ,参数惩罚 0.1 。
SVD++_3 :采用 SGD 学习,迭代 400 轮,特征维数50 维,前 200 轮步长 0.01 ,后 200 轮步长 0.001 ,参数惩罚 0.0001 ,用 sigmoid 化。
模型建立 实证研究 比赛之后文献综述
初步实验
模型 LibFM SVD++_1 SVD++_2 SVD++_3
Tag 0.6198 0.6382 0.6242 0.6435
GoodTag 0.6186 0.6390 0.6262 0.6451
Tag+diff 0.6200 0.6348 0.6283 0.6592
Sns 0.6207 0.6388 0.6297 0.6426
Sns+thread
0.6208 0.6389 0.6325 0.6527
Sns50 0.6227 0.6375 0.6243 0.6510
Snsall 0.6234 0.6375 0.6259 0.6440
Movieall 0.6148 0.6304 0.6168 0.6365
模型建立 实证研究 比赛之后文献综述
初步分析
Tag 和 sns 之间的对比1. Tag 比起 sns 来说更加密集2. 这是个很不成熟的 Sns 系统:3. 一部电影至少 1 个 tag ,大部分电影有 10 个tag
一部电影平均有 12.93 个 tag一个人平均只有 6.91 个关注(并
且大部分人关注一个从未有打分记录的官方账号)
总共 143,670 个人,有 98733 个人只有 3 个或者以下被关注数目,有 40715 个人根本没有人关注
1. user 数据的分散性
模型建立 实证研究 比赛之后文献综述
根据数据分析
1 121 241 361 481 601 721 841 961 1081120113210
2000000
4000000
6000000
8000000
10000000
12000000
1 121 241 361 481 601 721 841 961 1081120113210
2000000
4000000
6000000
8000000
10000000
12000000
2. movie 数据的集中性含义:相似的人太相似;user 的相似对里有 54.2% 的相似度
超过 0.5 ,甚至有 30.1% 的相似度超过0.7 。
而 movie 的相似对里面只有 9.1% 的相似度超过了 0.5 。
而相似的电影能够很好的扩大数据量
通过相似的电影,能够看到更多的潜在的打分用户
本质考虑:在人和电影的二分图之间引
入隐层来增强两两之间的联系,从而相当于扩大了训练数据量
模型建立 实证研究 比赛之后文献综述
深入分析
现象:人的打分记录的分散。电影打分记录的集中。
“ 对称性破缺”启发:
movie 的 feature 效果更好。
因为 movie 需要更多的自由度!来应对更多的 user 。
模型建立 实证研究 比赛之后文献综述
深入分析
深入思考:对于不同数据量的电影,给
予不同的重视,用较多的 feature的数量来满足其适应 data 的需求。对于较少的数据量的电影,用较少的 feature 来防止过拟合。
模型建立 实证研究 比赛之后文献综述
修改之前的模型
1. 用聚类来使 user 更集中:1. 用 LDA 的方法来做 user 的聚
类,之后添加最相似的 30 个类作为 user feature 。
2. 直接选取观看电影数超过 100 的人作为相似分析的全集。
3. 只选取打过分的人作为相似分析的全集(只有 9873 个人打过分)
2. 将相似电影和其他 feature 混合:
movie + tagmovie + snsallmovie50
模型建立 实证研究 比赛之后文献综述
新模型测试
模型 LibFM SVD++_1 SVD++_2 SVD++_3
Movie+tag 0.6138 0.6309 0.6159 0.6390
Movie50 0.6148 0.6320 0.6180 0.6421
Movie+snsall
0.6146 0.6279 0.6189 0.6526
Snsallchange 0.6207 0.6381 0.6261 0.6417
Snsallthread 0.6219 0.6381 0.6262 0.6432
Sns_topic 0.6225 0.6403 0.6309 0.6373
Snsall 0.6234 0.6375 0.6259 0.6440
Movieall 0.6148 0.6304 0.6168 0.6365
模型建立 实证研究 比赛之后文献综述
在比赛中实践
比赛中共设计了 30 套以上的模型:Tag+average , user_movieSum+average , movie_userSns+actor , movietagallMovie+topic , sns+tag+movie…
技巧: 切分训练数据,重新训练模型后混合结果;对于训练数据,做后抹零处理…
用最优线性混合对于所有的模型进行混合
模型建立 实证研究 比赛之后文献综述
深入思考
如何利用不成熟的 sns 信息?长尾数据的利用一直是机器学习的难
题。如何良好的聚类 user 信息?
这个主要的思路在于找到很好的相似人。品味相似,而且能够扩充数据。
模型建立 实证研究 比赛之后文献综述
深入思考
更好的寻找“相似”?现在寻找相似的方法忽略了二
阶相似之间的联系。因此可以采用随机游走的方
法,关在在于多游走几次。问题在于时间效率。
模型建立 实证研究 比赛之后文献综述
对于推荐系统实践的建议
相似人
相似电影
Tag 和标签
模型建立 实证研究 比赛之后文献综述
比赛之后对于训练集的重新拷问
为什么和第一名差这么多?
数据泄露。
模型建立 实证研究 比赛之后文献综述
比赛之后对于训练集的重新拷问
对于 user history 的顺序问题:乱序?
时间顺序!!
模型建立 实证研究 比赛之后文献综述
比赛之后对于训练集的重新拷问
前 k 打分,后 k 打分: vali 上的rmse 为 0.6173Movie_tag : vali 上打分 0.6223打乱顺序之后: vali 上打分0.6332
模型建立 实证研究 比赛之后文献综述
比赛之后对于训练集的重新拷问
前 k 打分,后 k 打分为什么效果这么好:
对于人的处理,从心情角度。而不是从内容角度。实际上:
在真实的推荐系统上,肯定不能获得之后的评分。但是能够知道今天的评分。有一定的作用。
谢谢欢迎提问