一、苦恼的一周
最近做实验,被一个问题苦恼了一周。本来想要验证算法在40%、60%、80%数据集比例情况下的不同实验效果。结果发现,训练集比例越大,效果竟然越差!!!这和我以往的–训练集越多,训练效果越好的认知完全相违背!!!
然后我开始一个个的排除这样情况的原因:
- 先看看是不是我训练集和测试集的弄反了,结果没有反;
- 再看看我的实验方法是不是哪里有错误,结果找不出错误;
- 然后我又在想我划分数据集是按总的评分数据量随机划分的,或者换成按每个用户留一定比例在训练集,一定比例在测试集的方法划分试试,结果还是训练集比例越大,效果越差;
- 简直无奈了,我就想是不是数据集的问题,结果换了几个数据集还是同样的问题;
- 最后我不用我自己写的算法了,我用 LibRec 中已经实现的方法看看,结果发现那些算法的结果也是这样,我都震惊了!!!到底是哪里出错了???
二、附上证据
下面附上我跑 LibRec 中已经实现算法的实验结果:
1、证据1:MostPopular方法
首先是最基本的 pop
方法,使用的数据集是 movielens/ml-100k
,TopN=10
,参数配置都是 LibRec 中的默认配置
Training | Precision | Recall | NDCG | AUC | Novelty | AP | RR |
0.8 | 0.1902 | 0.1132 | 0.1860 | 0.8809 | 11.1020 | 0.11068 | 0.40134 |
0.6 | 0.3107 | 0.1002 | 0.2751 | 0.9560 | 10.6027 | 0.1972 | 0.5676 |
0.4 | 0.3949 | 0.0918 | 0.3374 | 0.9944 | 10.1971 | 0.2699 | 0.6476 |
0.2 | 0.4538 | 0.0852 | 0.3778 | 1.0115 | 10.0071 | 0.3206 | 0.7045 |
从实验结果可以看出准确性指标 Precision 以及 AUC 随着训练集数据越少,效果越好,排序指标 NDCG、AP(是MAP)、RR(是MRR)也是随着训练集越少,效果越好,只有 Recall 和 新颖性指标 Novelty 随着训练集越少,效果在不断的下降。
2、证据2:BPR方法
Rendle et al., BPR: Bayesian Personalized Ranking from Implicit Feedback, UAI 2009.
下面换一个经典的 BPR 算法,使用的数据集是 movielens/ml-100k
,TopN=10
Training | Precision | Recall | NDCG | AUC | Novelty | AP | RR |
0.8 | 0.2563 | 0.1652 | 0.3101 | 0.9222 | 14.8216 | 0.1864 | 0.5502 |
0.6 | 0.3744 | 0.1370 | 0.4141 | 0.9763 | 12.6314 | 0.2702 | 0.6798 |
0.4 | 0.3895 | 0.1005 | 0.4196 | 0.9970 | 11.1562 | 0.2671 | 0.6855 |
0.2 | 0.3686 | 0.0834 | 0.3890 | 0.9875 | 14.5735 | 0.2495 | 0.6075 |
从实验结果可以看出在训练比例大于0.2以上时,准确性指标 Precision 以及 AUC 随着训练集数据越少,效果越好,排序指标 NDCG、AP(是MAP)、RR(是MRR)也是随着训练集越少,效果越好,只有 Recall 和 新颖性指标 Novelty 随着训练集越少,效果在不断的下降。
或者你会问,训练集比例都 0.2了,这训练有啥用???没有训练好进行推荐那不就是随机推荐???所以我看了下随机推荐的结果,随机推荐跟训练集的多少没有关系,完全就是随机给每一个用户进行推荐,压根就不需要训练集,实验结果显示在 movielens/ml-100k 数据集下,它的 precision效果是远远 < 0.1的~ 所以训练还是有些用处的。
3、证据3:CADE方法
Collaborative Denoising Auto-Encoders for Top-N Recommender Systems,WSDM 2016
下面换CADE方法,使用的数据集是 movielens/ml-100k
,TopN=10
,参数配置都是 LibRec 中的默认配置。
Training | Precision | Recall | NDCG | AUC | Novelty | AP | RR |
0.8 | 0.1661 | 0.0977 | 0.2088 | 0.8469 | 20.6802 | 0.1047 | 0.3914 |
0.6 | 0.2416 | 0.0735 | 0.3009 | 0.9084 | 20.5823 | 0.1538 | 0.4936 |
0.4 | 0.2681 | 0.0572 | 0.1746 | 0.9334 | 21.2737 | 0.1665 | 0.5143 |
0.2 | 0.2313 | 0.0363 | 0.1146 | 0.9273 | 24.3241 | 0.1327 | 0.4644 |
值得一提的是,在CADE这篇论文原文中,是有和 pop 以及 BPR 方法做对比的,但效果和论文中表现的并不一致,在我这里显示的是 CADE 不如 pop 和 BPR方法,当然我我这里用的是movielens 100k的数据集,而原文中用的是movielens 10M 的数据集,同时数据集的处理方式以及参数并没有达到与论文中一致,所以先不纠结这个~
4、证据4
我在最近看的一篇论文中找到了这样一段话,贴上来给大家看看
5、小结
从以上三个实验结果中,不难得出确实是训练集比例越大,precision效果越差,但是同时也可以发现,recall 效果是越好的,所以如果真的想要验证算法在40%、60%、80%数据集比例情况下的不同实验效果。还是选择 Recall 指标吧。我就先暂时不纠结为什么和我以往的认知不一样了~
三、另外的突发奇想
Biased Matrix Factorization Recommender
我有在思考是不是因为这是TopN推荐的原因,如果是评分预测,是不是会符合这个事实???
下面使用的方法是bias-MF,使用的数据集是 movielens/ml-100k
,TopN=10
,参数配置都是 LibRec 中的默认配置。
Training | MSE | MPE | RMSE | MAE |
0.8 | 0.8709 | 0.9862 | 0.9332 | 0.7379 |
0.6 | 0.8933 | 0.9881 | 0.9451 | 0.7457 |
0.4 | 0.9086 | 0.9883 | 0.9532 | 0.7521 |
0.2 | 0.9470 | 0.9883 | 0.9731 | 0.7682 |
看了结果之后我放心了,评分预测任务并不符合这个这个事实,在这里,训练集越多,效果确实是越好的。(这些指标都是值越小代表越好的)
但如果我要用这个评分预测算法去做 TopN 推荐的话,和之前的结论一样!训练集比例越大,precision 效果越差。而且把实验结果与上面几个算法,比如Pop、BPR、CADE方法比较的话,也验证了我之前提过的推荐系统常见问题(二):可以使用评分预测方法去做 TopN 推荐吗?是正确的,只是利用评分预测方法去做 TopN 推荐的效果不太好而已!
Training | Precision | Recall | NDCG | AUC | Novelty | AP | RR |
0.8 | 0.0574 | 0.0218 | 0.0475 | 0.6636 | 31.0700 | 0.0180 | 0.0839 |
0.6 | 0.0990 | 0.0205 | 0.0783 | 0.7270 | 29.6538 | 0.0371 | 0.1306 |
0.4 | 0.1517 | 0.0224 | 0.1439 | 0.7841 | 24.6902 | 0.0884 | 0.3107 |
0.2 | 0.2134 | 0.0256 | 0.1931 | 0.8558 | 22.9328 | 0.1339 | 0.3701 |
四、总结
综上,我不再纠结是不是我的代码写错了,是不是我应该换个数据集(这里没有写其他数据集,但是验证效果是一样的),是不是我哪里应该调一调,找原因找到自我怀疑!!!然后接着很崩溃!
就像贴的那篇论文里写的一样,如果这是我做实验发现的事实,那论文里写出来就好了!
以上是一家之言,欢迎道友一起交流~