推荐系统常见问题(三):TopN 推荐是对训练集中的用户进行推荐,还是对测试集中的用户进行推荐?

从我学习推荐系统以来,一直有个疑问深深的困扰着我,那就是到底是对训练集中的用户进行推荐,还是对测试集中的用户进行推荐呢?之所以一直苦思冥想是因为我认为这关系着我做的实验的的评估效果怎么样,比如 Precision 和 Recall。

一、误区产生的原因 ?

以下是我自己的苦思冥想(深深误区)

以TopN推荐为例,对于按照比例对数据集进行划分成训练集和测试集,那势必会有些用户只在训练集中出现而不在测试集中出现,有些用户只在测试集中出现 ,而不在训练集中出现。

  • 按照对训练集中的用户进行推荐的做法,如果我对一个只在训练集中的用户进行推荐,可实际上他在测试集中压根没有出现过,自然也不会有他消费过的物品,那按照 Precision 的计算方法,对于这个用户来说,他的 Precision 妥妥的为0。

    如果这样的用户很多,那我最后的平均 Precision 不是非常的低?并且这样的做法,有很多只在测试集中出现的用户是不会产生推荐列表的。

  • 那为了加大我实验 Precision的数值,那我只对测试集中的用户进行推荐好了,这样测试集中有哪个用户我就对哪个用户去产生推荐结果,这样想来很完美!

    但我又在疑惑,我要做的是推荐系统啊!我是用训练集里的用户数据进行训练的啊,我为什么不是对训练集中的用户进行推荐???(在机器学习里面这种想法应该是很正常的,我训练的是什么,我预测的就该是什么!)

    而且我在很多论文以及项亮的《推荐系统实践》里面看到的说法都是,对训练集中的用户去进行推荐!
    在这里插入图片描述

这样一来,对于到底该怎么做,我产生了深深的疑惑,网上的资料很多,大家的说法、写法也都不一致,我不知道该怎么说服自己,我在这上面纠结了非常久的时间!

一度,我甚至都想干脆直接用留一法(leave one out)划分数据集好了,这样用户会同时存在于训练集以及测试集中,那对训练集中的用户进行推荐,和对测试集中的用户进行推荐,效果是一样的!就不用这么纠结了,但这个方法治标不治本!

二、我现在终于释怀了 !

现在我不纠结了。

我想明白了我的误区1其实存在于到底怎么去评估实验的好坏,比如Precision到底怎么算,而不是到底应该给训练集中的用户还是测试集中的用户去进行推荐。

正解1是按照我们对于测试集的理解,测试集的作用就是为了去验证算法的效果,对于推荐系统中的TopN 推荐来说,我们想验证的就是对于测试集中的用户,给他的推荐排序和实际测试集中该用户的Ground Truth 是否一样,我们给用户的推荐列表中是否有某个物品也存在于该用户的Ground Truth 中,如果是,我们称之为命中!

这样想明白了之后,还有一个误区2我认为我是用训练集里的用户数据进行训练,我为什么不是对训练集中的用户进行推荐?而且推荐系统的本来目的就是给所有人进行推荐。

因为我相信 LibRec 这个开源库代码的正确性以及权威性,所以我一开始就决定详细这里的做法,所以我仔细研究了 LibRec 的代码,我明白了:

  • 推荐,是给所有人进行推荐,甚至在 librec 中保存的推荐结果也是给所有人的推荐结果。
  • 评估,只对测试集中的用户进行评估。

正解2是这两个部分不矛盾!,只是我一直混淆了概念!

以下是 LibRec 开源库中的评估器 Precision 中的部分代码,主要做法是:逐个遍历所有用户,如果该用户出现在测试集中,则拿该用户的推荐结果和测试集中该用户的 Ground Truth 进行对比。
在这里插入图片描述
以及我发现在 LibRec 中保存的推荐结果是对所有用户的推荐结果,而不是只保存测试集中用户的推荐结果,或者是训练集中用户的推荐结果。

三、为什么我不对评分预测任务感到迷糊 ?

说了这么多,推荐系统主要有两个任务,一个是 TopN 推荐,一个是评分预测,为啥我不对评分预测任务感到迷糊?评分预测任务中不是也有测试集和训练集吗?

现在看来,我想的明白评分预测任务的主要原因是评分预测任务中压根不存在给训练集还是测试集中的用户进行推荐,甚至压根不存在推荐一说!,评分预测的主要任务是将 用户-物品-评分矩阵 进行补全!!!

至于要评估算法的好坏,那就直接将测试集中的数据和进行补全之后的 用户-物品-评分矩阵 里的数据进行对比,同时计算 RMSE 或者 MSE,很容易想的明白…,所以我压根就没有对评分预测任务感到迷糊过。

至于,现在很多算法直接将预测的评分进行排排序,然后做TopN推荐,可以吗?是我另一个纠结了好久的问题!这是我对于这个问题的看法

四、我选择 TopN 推荐!

就我看推荐系统论文一年以来的经验来说,学术上大部分人都选择去做评分预测任务,当然,现在开始也有很多工作都在做TopN任务。

但,我真真觉得推荐系统,预测个评分有什么用啊,预测了是高分,用户就会看吗?为什么不直接预测用户会不会看,进而进行推荐?正如项亮的《推荐系统实践》书上所说,TopN 推荐更符合实际的应用需求!!!

  • 17
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值