【问题标题】:Cross-validation in LenskitLenskit 中的交叉验证
【发布时间】:2015-11-26 12:36:28
【问题描述】:

我试图了解在 lenskit 中究竟是如何执行交叉验证的。在documentation 中,它表示默认情况下数据由用户分区。这是否意味着,在每一折中,测试集中的用户都没有用于训练?这是通过“坚持”选项实现的吗?如果是这样,此选项是否会破坏基于用户的分区并产生每个用户同时出现在训练和测试集中的折叠?

现在,我的评估代码如下所示:

dataset crossfold("data") {
    source csvfile(sourceFile) {
        delimiter "\t"
        domain {
            minimum 0.0
            maximum 10.0
            precision 0.1
        }
    }
//        order RandomOrder
    holdoutFraction 0.1
}

我注释掉了“订单”选项,因为在使用它时,lenskit eval 会引发错误。

干杯!!!

【问题讨论】:

    标签: cross-validation lenskit


    【解决方案1】:

    无论holdoutholdoutFractionretain 选项如何,每个用户都会出现在训练和测试集中。

    但是,对于每个测试用户(使用 5 个分区时,20% 的用户),他们的部分评分(测试评分)被保留并放置在测试集中。他们的其余评分与其他用户的所有评分一起放入训练集中。

    这模拟了推荐系统的常见情况:您有一些用户,他们的一些历史已知并且可以用于模型训练,而您正试图推荐或预测他们未来的行为。

    holdoutholdoutFractionretain 选项是决定在测试集中放置多少评级的不同方式。如果你说holdout 5,那么每个测试用户的 5 个评分被放入测试集中,其余的用于训练。如果你说holdoutFraction 0.2,那么 20% 用于测试,80% 用于训练。如果你说retain 5,那么5个用于训练,其余用于测试。

    【讨论】:

    • 感谢您的快速回复!!我不太明白“每个用户都出现在训练和测试集中,无论是holdout、holdoutFraction还是retain选项。”只有测试用户在测试集中有评分,对吧?例如,如果有 5 个分区并且通过了holdoutFraction 0.2,则测试集正好由 N*0.2*0.2 个评级组成,其中 N 是用户数,对吗?我认为holdoutholdoutFractionretain 选项之一必须处于活动状态(它提供了特定的PartitionAlgorithm 实现),对吧?
    • @manu 正确。所有用户都在训练中,测试用户在训练和测试中。
    猜你喜欢
    • 2023-03-10
    • 2018-03-09
    • 2018-06-13
    • 2012-01-13
    • 2014-08-19
    • 2015-05-13
    • 2015-05-27
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多