pyspark - 在 pyspark 中创建训练集和测试集时,如何跨不同组进行分层抽样?
问题描述
我正在寻找一种解决方案,将我的数据拆分为测试集和训练集,但我希望在测试和训练中拥有所有级别的分类变量。我的变量有 200 个级别,数据是 1800 万条记录。我尝试sampleBy
了带有分数(0.8)的函数,并且可以获得训练集,但由于 Spark 中没有索引,即使创建键,使用左连接或减法获取测试集的速度也非常慢!
我想groupBy
根据我的分类变量做一个并随机抽样每个类别,如果该类别只有一个观察值,则将其放入训练集中。
是否有默认函数或库来帮助执行此操作?
解决方案
一个相当难的问题。
我不知道可以帮助您获得此功能的内置功能。使用sampleBy
然后这样的减法减法会起作用,但正如你所说 - 会很慢。
或者,想知道你是否可以试试这个*:
使用窗口函数,添加第 num 行并将所有具有 rownum=1 的内容删除到一个单独的数据框中,您将在最后将其添加到您的训练中。
在剩余的数据上,使用
randomSplit
(一个数据框函数)分为training
和test
将步骤 1 中分离的数据添加到训练中。
这应该工作得更快。
*(我以前没试过!如果你能分享一下最后的效果就太好了!)
推荐阅读
- mysql - 来自 mysql 数据库的数据透视表 MySQL
- javascript - Javascript 使用“多个”属性附加输入
- microsoft-dynamics - Dynamics 365 Online 与本地解决方案导出
- assembly - 二元炸弹实验室第 9 阶段 - 卡住了
- bash - 在 shell 脚本中使用 sed 向文件中添加一行
- sap-cloud-platform - SCP Neo 部署 - java.lang.IllegalStateException: org.apache.catalina.LifecycleException: 无法启动组件
- git - 如何访问并提交到 github 上的远程分支
- vb.net - DataAdapter 不使用填充方法打开连接本身
- ios - AWS Cognito 用户组未显示
- python - 图像 src 没有完全刮掉。(../../../images/stat/popolazione.jpg)