【问题标题】:Splitting data set into training and testing sets on recommender systems在推荐系统上将数据集拆分为训练集和测试集
【发布时间】:2017-03-30 23:03:42
【问题描述】:

我已经实现了一个基于矩阵分解技术的推荐系统。我想评价一下。

我想使用 10-fold-cross 验证与 All-but-one 协议 (https://ai2-s2-pdfs.s3.amazonaws.com/0fcc/45600283abca12ea2f422e3fb2575f4c7fc0.pdf)。

我的数据集结构如下:

user_id,item_id,rating
1,1,2
1,2,5
1,3,0
2,1,5
...

如何拆分数据让我感到困惑,因为我无法在测试集中放置一些三元组(用户、项目、评级)。例如,如果我在测试集中选择三元组 (2,1,5),并且这是用户 2 所做的唯一评分,则不会有关于此用户的任何其他信息,并且经过训练的模型也不会预测任何他的价值观。

考虑到这种情况,我应该如何进行拆分?

【问题讨论】:

    标签: machine-learning recommendation-engine cross-validation


    【解决方案1】:

    您没有指定语言或工具集,所以我不能给您一个 100% 适用于您的简明答案,但这是我为解决同样的问题而采取的方法。

    我正在开发一个使用 Treasure Data(即 Presto)和隐式观察的推荐系统,但在我的矩阵中遇到了一些用户和项目不存在的问题。我必须重新编写算法,将观察结果拆分为训练和测试,以便每个用户和每个项目都可以在训练数据中表示。对于我的算法的描述,我假设用户多于项目。如果这对您来说不正确,那么只需交换两者即可。这是我的算法。

    1. 为每个用户选择一个观察结果
    2. 对于只有一个观察值且尚未从上一步中选择的每个项目,选择一个观察值
    3. 将前两个步骤的结果合并在一起。 这应该会产生一组涵盖所有用户和所有项目的观察结果。
    4. 计算您需要多少个观测值来填充您的训练集(通常是观测值总数的 80%)
    5. 从步骤 3 计算合并集中有多少观测值。 第 4 步和第 5 步之间的区别在于填充训练集所需的剩余观察次数。
    6. 随机选择足够的剩余观测值来填充训练集。
    7. 合并第 3 步和第 6 步中的集:这是您的训练集。
    8. 剩余的观察结果是您的测试集。

    正如我所提到的,我使用的是 Treasure Data 和 Presto,所以我可以使用的唯一工具是 SQL、公用表表达式、临时表和 Treasure Data 工作流。

    【讨论】:

    • 但是,你有什么参考可以证明你的观点吗?我很乐意阅读有关它的论文或文章!谢谢
    • 让我看看我能想出什么。您的训练集需要包含足够的观察结果,矩阵分解训练可以做它应该做的事情:辨别每个用户和项目的潜在因素。如果没有对用户或项目进行一次观察,则训练毫无用处,通常即使只有一次观察也是不够的。从那以后,我重新设计了逻辑,只考虑那些至少有 10 次观察的用户和项目。
    【解决方案2】:

    您的基本逻辑非常正确:如果您在一个类中只有一个观察值,您必须将其包含在训练集中,以便模型在该类中具有任何有效性。

    但是,将输入划分为这些类别取决于各种观察之间的相互作用。您能否识别数据类别,例如您提到的“唯一评级”问题?当您发现其他小班时,您还需要确保您的训练数据中有足够的这些观察结果。

    不幸的是,这是一个难以自动化的过程。大多数一次性应用程序只需从数据中手动挑选这些观察结果,然后按照正常划分分配其他观察结果。这确实存在特殊情况在训练集中过度表示的问题,这可能会在训练模型时在一定程度上偏离正常情况。

    您是否有能力在遇到以后的数据时调整模型?这通常是处理稀疏类输入的最佳方式。

    【讨论】:

      【解决方案3】:

      协同过滤(矩阵分解)无法为没有反馈的看不见的用户提供好的推荐。然而,评估应该考虑这种情况并考虑到它。

      您可以做的一件事是报告所有测试用户的性能,只测试有一些反馈的用户,只测试没有反馈的看不见的用户。

      所以我会说保持测试,随机训练拆分,但单独评估看不见的用户。

      更多信息here

      【讨论】:

        猜你喜欢
        • 2015-02-18
        • 1970-01-01
        • 2017-11-01
        • 2019-05-01
        • 2017-06-11
        • 2018-10-13
        • 2019-12-15
        • 2018-07-21
        • 1970-01-01
        相关资源
        最近更新 更多