从我学习推荐系统以来,一直有个疑问深深的困扰着我,那就是到底是对训练集中的用户进行推荐,还是对测试集中的用户进行推荐呢?之所以一直苦思冥想是因为我认为这关系着我做的实验的的评估效果怎么样,比如 Precision 和 Recall。
一、误区产生的原因 ?
以下是我自己的苦思冥想(深深误区)
以TopN推荐为例,对于按照比例对数据集进行划分成训练集和测试集,那势必会有些用户只在训练集中出现而不在测试集中出现,有些用户只在测试集中出现 ,而不在训练集中出现。
-
按照对训练集中的用户进行推荐的做法,如果我对一个只在训练集中的用户进行推荐,可实际上他在测试集中压根没有出现过,自然也不会有他消费过的物品,那按照 Precision 的计算方法,对于这个用户来说,他的 Precision 妥妥的为0。
如果这样的用户很多,那我最后的平均 Precision 不是非常的低?并且这样的做法,有很多只在测试集中出现的用户是不会产生推荐列表的。
-
那为了加大我实验 Precision的数值,那我只对测试集中的用户进行推荐好了,这样测试集中有哪个用户我就对哪个用户去产生推荐结果,这样想来很完美!
但我又在疑惑,我要做的是推荐系统啊!我是用训练集里的用户数据进行训练的啊,我为什么不是对训练集中的用户进行推荐???(在机器学习里面这种想法应该是很正常的,我训练的是什么,我预测的就该是什么!)
而且我在很多论文以及项亮的《推荐系统实践》里面看到的说法都是,对训练集中的用户去进行推荐!