推荐系统常见问题(七):惊讶!为什么训练集比例越大,效果越差?

一、苦恼的一周

最近做实验,被一个问题苦恼了一周。本来想要验证算法在40%、60%、80%数据集比例情况下的不同实验效果。结果发现,训练集比例越大,效果竟然越差!!!这和我以往的–训练集越多,训练效果越好的认知完全相违背!!!

然后我开始一个个的排除这样情况的原因:

  1. 先看看是不是我训练集和测试集的弄反了,结果没有反;
  2. 再看看我的实验方法是不是哪里有错误,结果找不出错误;
  3. 然后我又在想我划分数据集是按总的评分数据量随机划分的,或者换成按每个用户留一定比例在训练集,一定比例在测试集的方法划分试试,结果还是训练集比例越大,效果越差;
  4. 简直无奈了,我就想是不是数据集的问题,结果换了几个数据集还是同样的问题;
  5. 最后我不用我自己写的算法了,我用 LibRec 中已经实现的方法看看,结果发现那些算法的结果也是这样,我都震惊了!!!到底是哪里出错了???

二、附上证据

下面附上我跑 LibRec 中已经实现算法的实验结果:

1、证据1:MostPopular方法

首先是最基本的 pop 方法,使用的数据集是 movielens/ml-100kTopN=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-100kTopN=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-100kTopN=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也一定程度上验证了我的说法是对的,在0.2以上的训练集划分情况下,训练集越大,Precision效果越差。

推荐系统常见问题(七):惊讶!为什么训练集比例越大,效果越差?
推荐系统常见问题(七):惊讶!为什么训练集比例越大,效果越差?
值得一提的是,在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-100kTopN=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

四、总结

综上,我不再纠结是不是我的代码写错了,是不是我应该换个数据集(这里没有写其他数据集,但是验证效果是一样的),是不是我哪里应该调一调,找原因找到自我怀疑!!!然后接着很崩溃!

就像贴的那篇论文里写的一样,如果这是我做实验发现的事实,那论文里写出来就好了!


以上是一家之言,欢迎道友一起交流~