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

Is it possible to split a dataset in Google Dataprep? If so, how?

我一直在研究 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. 对于每个集合类型(即训练、测试、验证):
    • 从其中一组中创建一个新配方
    • 编辑配方,并使用并集转换将其与其他相同类型的数据集合并(例如,target0-train 与 target1-train 并集)。联合按钮位于“编辑配方”页面工具栏的中间。

希望对大家有所帮助!

我正在寻找同样的问题,我能够使用 "case on custom condition" 和 "Random" 函数部分解决这个问题。我所做的是创建名为 target 的新列并应用以下逻辑:

应用此选项后,您将拥有包含这 3 个新标签的新列,您可以根据这些值应用行过滤规则来生成 3 个新数据集。需要记住的是,每次 运行 作业都会得到不同的验证集。因此,如果你想保持它的固定,你需要使用在第一个 运行 中创建的数据集作为未来 运行 的输入(并且只随机化训练和测试集)。

如果您需要更多地控制数据集中标签的分布,可以使用 ROWNUMBER window 函数。但我还没能让它发挥作用。