我正在试图理解在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
会抛出错误。
干杯!!!
答案 0 :(得分:0)
无论holdout
,holdoutFraction
或retain
选项如何,每个用户都会同时出现在培训和测试集中。
但是,对于每个测试用户(当使用5个分区,20%的用户时),他们的部分评级(测试评级)被保留并放入测试集中。其余评分与其他用户的评分一起放在培训集中。
这模拟了推荐系统的常见情况:您拥有用户,他们的某些历史记录已经为人所知并可用于模型培训,而您正试图推荐或预测他们未来的行为。
holdout
,holdoutFraction
和retain
选项是决定测试集中放置了多少评级的不同方法。如果您说holdout 5
,那么每个测试用户的5个评级将被放入测试集中,其余的用于培训。如果你说holdoutFraction 0.2
,则20%用于测试,80%用于培训。如果您说retain 5
,那么5用于训练,其余用于测试。