如何在 pyspark 上创建分层拆分训练、验证和测试集?

Posted

技术标签:

【中文标题】如何在 pyspark 上创建分层拆分训练、验证和测试集?【英文标题】:How to create stratified split training, validation, and test set on pyspark? 【发布时间】:2019-09-19 15:45:28 【问题描述】:

我有一个小数据集 (140K),我想将其拆分为验证集、使用目标变量的验证集测试集和另一个字段来区分这些拆分。

【问题讨论】:

Stratified sampling with pyspark的可能重复 @pissall 分层样本和分层拆分并不完全相同。但是,这是一个好的开始。谢谢 这是一个如何使用groupby 方法进行比例分配的示例。掌握逻辑并帮助您的用例就是一切。 看看这个***.com/a/61016937/8836068 【参考方案1】:

在 Pyspark 中,您可以使用 randomSplit() 函数将数据集分为训练数据集和测试数据集。它最多可以有两个参数,即权重和种子。我们使用种子是因为我们想要相同的输出。在权重中,您可以指定浮点数。如果总和不为 1,它将对权重进行归一化。它用于指定百分比数据将进入训练、验证和测试部分。

示例代码

data.randomSplit([0.8,0.1,0.1],785)

【讨论】:

感谢您的回复。看起来不错,不幸的是randomSplit 创建了随机训练、验证和测试部分。我希望我可以将样本拆分按特征分层。所以分裂有每个班级的相同百分比。类似于@pissall 提到的 [使用 pyspark 进行分层采样](***.com/questions/47637760/…) 的东西,但用于拆分

以上是关于如何在 pyspark 上创建分层拆分训练、验证和测试集?的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 中的分层训练/验证/测试拆分

没有 scikit-learn 的分层训练/验证/测试拆分

将 pandas 数据帧分层拆分为训练、验证和测试集

基于 python 中的多个特征的训练测试拆分的分层交叉验证或抽样

如何使用 Python 进行随机分层抽样(不是训练/测试拆分)?

如何在 tf 2.1.0 中创建 tf.data.Dataset 的训练、测试和验证拆分