Lenskit中的交叉验证

时间:2015-11-26 12:36:29

标签: cross-validation lenskit

我正在试图理解在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
}

我注释掉了“order”选项,因为在使用它时,lenskit eval会抛出错误。

干杯!!!

1 个答案:

答案 0 :(得分:0)

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

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

这模拟了推荐系统的常见情况:您拥有用户,他们的某些历史记录已经为人所知并可用于模型培训,而您正试图推荐或预测他们未来的行为。

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