我已经阅读了一些关于推荐系统(RS)评估的论文和其他材料。他们中的大多数讨论了 RS 的各种属性(例如准确性、多样性等),以及不同任务的指标(例如 RMSE、精度、召回率等),以及一些协议。但是我对数据分区和详细的验证过程仍然不是很清楚。[Shani、Guy 和 Asela Gunawardana。“评估推荐系统。” 推荐系统手册。施普林格美国,2011. 257-297.]
例如,我想用评分反馈评估一个基本的基于用户的 CF 算法。数据格式是用户项目评级。数据集中有 100 个用户。现在我想使用 5 折交叉验证方法。这是我的方式:
- 根据用户的说法,我将原始数据集随机分成 5 折。每个折叠包含 20 个用户。
- 对于所有用户,我设置了一个相同的时间瞬间,因此在此时间瞬间之前和之后,每个用户都包含许多评级。时刻之前的任何用户 x 的数据用于创建用户配置文件,时刻之后的数据用于验证评分预测(用户 x 作为被预测的用户)或只是被隐藏(用户 x 在邻域选择中)。
- 对于所有 5 折中的每个用户 i,我为用户 i 创建一个由评级向量{} 表示的用户配置文件。
- 对于 fold-1,对于 fold-1 中的每个用户 i,我计算用户 i 与 fold-2 ~ fold-5 中的用户之间的用户相似度,并设置适当的 k-NN 值以获得每个用户的邻域。
- 对于 fold-1 中的每个用户 i,我通过适当的评分平均方程从他的邻域用户(测试用户未使用的项目)获得预测评分。
- 计算用户 i 的预测误差。
- 对每一折重复步骤 2~6(全部 5 次),得到平均预测误差。这是一轮。
- 使用不同的参数组合(如k-NN邻域大小),多次重复步骤2~7,以获得最低的预测误差(即最佳参数组合)。
- 最好的参数组合,我得到的预测误差最小,这就是最终的评估结果。
我有两个问题:
- 此过程对于评估基于用户的 CF 算法是否正确?
- 如果是,那么这个过程中的具体数据是什么,对应于Statistics中的“训练集”、“测试集”和“验证集”的概念?