我一直在研究 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
通过在单独的步骤中分配随机值,我得到了我正在寻找的保证百分比分割。流程最终看起来像这样:
编辑 2
我刚刚也想出了如何进行分层拆分,所以我想我会添加它以防其他人尝试这样做。这是粗略的步骤:
- 根据您所针对的任何子群体(例如 target0、target1)拆分您的数据集
- 对于每个子群体,进行上述的统一随机分割(例如,现在你有 target0-train、target0-test、target0-validation、target1-train 等)
- 对于每个集合类型(即训练、测试、验证):
- 从其中一组创建新配方
- 编辑配方,并使用联合变换将其与相同类型的其他数据集合并(例如 target0-train 与 target1-train 的联合)。联合按钮位于编辑配方页面工具栏的中间。
我希望这对某人有帮助!