2016-11-17 54 views
1

我有一个很大的数据集,我想根据一些预定义的概率在开始时将其划分为训练,验证和测试集(例如,有0.8个概率,一个元组用于训练,0.1验证和0.1进行测试。)Postgresql - 添加2个随机列

我虽然在添加2个布尔列,培训和验证。两者都依赖于一个随机数。如果现在这个随机数字低于0.8,则该元组用于训练,如果它大于0.9则用于测试。否则,这两列都是错误的,因此它用于验证。

以下查询存在问题,即所有元组都使用相同的随机ID,这意味着根据train/validate/test,所有元组都具有相同的值。

update data set 
     test = (sub.rand >= 0.9), 
     train = (sub.rand <= 0.8) from (select random() rand) sub; 

我想尽量做到在一个查询,因为数据集可能非常大,我认为,一个查询会分裂它的时候成多个的速度比。 (但是,赞赏这个问题的任何解决方案)。

感谢您的帮助。

回答

1

尽量只

update data set 
    test = random() >= 0.9, 
    train = random() <= 0.8;