如何解决如果数据框列反转,则随机拆分会产生不同的拆分
我一直在玩Databrick笔记本,但遇到了一个奇怪的问题。逻辑是我从文件中读取parsed_points_df
,对其进行缓存,然后从中创建数据框。但是,根据列顺序,MLlib的randomSplit()会生成不同的数据集,因此标签列的平均值也会有所不同。现在,由于平均值是可交换且可关联的,结果不应该相同吗?
我不确定是什么问题。我看过不同的博客,并尝试了不同的技术,例如缓存,重新分区,但似乎没有任何效果。
下面的代码段1和2:
代码段1
parsed_data_df = parsed_points_df.select( parsed_points_df['labels'] - min_year,'features').withColumnRenamed('(labels - 1922.0)','label') //COLUMN ORDER 1
weights = [.8,.1,.1]
seed = 42
parsed_train_data_df,parsed_val_data_df,parsed_test_data_df =
parsed_data_df.randomSplit(weights,seed=seed)
average_train_year = (parsed_train_data_df.selectExpr('avg(label) as avg')).first()
代码段2
parsed_data_df = parsed_points_df.select('features',parsed_points_df['labels'] -
min_year,).withColumnRenamed('(labels - 1922.0)','label'). // COLUMN ORDER 2
weights = [.8,seed=seed)
average_train_year = (parsed_train_data_df.selectExpr('avg(label) as avg')).first()
解决方法
即使您指定了seed
,由于df.sample
的实现方式,拆分仍然可能会有所不同。您可以阅读以下blog post,深入了解其发生原因。
通常的建议是读取源数据,执行拆分,将每个数据框存储为单独的文件,然后在所有实验中始终使用这些保存的数据框。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。