是否可以在Google Dataprep中拆分数据集?如果是这样,怎么办?

时间:2018-09-20 22:03:12

标签: machine-learning google-cloud-platform etl data-science google-cloud-dataprep

我一直在研究Google Dataprep作为ETL解决方案,以执行一些基本的数据转换,然后再将其提供给机器学习平台。我想知道是否有可能使用Dataprep / Dataflow工具将数据集拆分为训练集,测试集和验证集。理想情况下,我希望在目标列上进行分层拆分,但是对于初学者来说,我希望按整体百分比(例如50%训练,30%验证,20%测试)进行简单的统一随机拆分。

到目前为止,我还无法找到有关Dataprep是否可能实现的任何信息,所以我想知道是否有人确切地知道这是否可行以及如何实现。

编辑1

感谢@jakub-janoštík让我朝正确的方向前进!我对您的答案做了一些修改,并提出了以下建议(以纠缠形式):

case condition: customConditions cases: [false,0] default: rand() as: 'split_condition'
case condition: customConditions cases: [split_condition < 0.6,'train'],[split_condition >= 0.8,'test'] default: 'validation' as: 'dataset_type'
drop col: split_condition action: Drop

通过在一个单独的步骤中分配随机值,我得到了想要的保证百分比分割。流程最终看起来像这样:

Image: final flow diagram with dataset splitting

编辑2

我也刚刚弄清楚了如何进行分层拆分,因此我认为我会添加它,以防其他人尝试这样做。大致步骤如下:

  1. 根据您要定位的任何子群体(例如target0,target1)拆分数据集
  2. 对于每个子群体,请执行上述统一的随机拆分(例如,现在您有了target0-train,target0-test,target0-validation,target1-train等)
  3. 对于每种设定类型(即训练,测试,验证):
    • 从其中一组创建新食谱
    • 编辑配方,然后使用Union变换将其与相同类型的其他数据集合并(例如,target0-train与target1-train的并集)。联合按钮位于“编辑配方”页面上工具栏的中间。

我希望这对某人有帮助!

1 个答案:

答案 0 :(得分:2)

我正在寻找相同的问题,并且能够使用“自定义条件下的情况”和“随机”功能部分解决此问题。我要做的是创建一个名为target的新列,并应用以下逻辑:

enter image description here

应用此后,您将拥有带有这3个新标签的新列,并且可以通过基于这些值应用行过滤规则来生成3个新数据集。要记住的是,每次运行该作业时,您都会获得不同的验证集。因此,如果要使其固定不变,则需要使用在第一次运行中创建的数据集作为将来运行的输入(并且仅对训练和测试集进行随机化)。

如果您需要进一步控制数据集中标签的分布,可以使用ROWNUMBER窗口功能。但是我还没能使它工作。