0

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

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

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会引发错误。

干杯!!!

4

1 回答 1

0

无论使用 、 或 选项,每个用户都会出现在训练集和holdout测试holdoutFraction集中retain

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

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

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

于 2015-11-26T17:22:52.983 回答