【问题标题】:Spark mllib shuffling the dataSpark mllib 洗牌数据
【发布时间】:2016-04-29 09:02:47
【问题描述】:

spark mllib 包是否对数据进行洗牌。我一直在对数据使用 randomSplit,但是,查看拆分看起来它具有相同的顺序。

有没有办法在拆分数据之前对其进行洗牌?

【问题讨论】:

  • mllib package shuffle the data - 正如@eliasah 所说,它没有。它只是通过遍历每个分区来获取随机样本。 有没有办法在拆分数据之前对其进行洗牌? - 这取决于上下文。您始终可以按随机值重新分区或排序,但它 a) 昂贵,b) 如果您希望每次都获得不同的结果,则需要一些努力来避免缓存 c) 如果您需要一个可重现的样本,则更难获得。
  • 在上述两个评论之间,我想我们有一个答案。 @zero323 你有什么建议?
  • @eliasah 如果您想回答,请不要介意我。如果您将其提取到有用的东西中,我将很乐意投票 :)
  • 好的,谢谢好友@zero323!

标签: apache-spark apache-spark-mllib


【解决方案1】:

我认为您在拆分时将实际数据改组与随机种子混淆了。如果您将拆分种子设置为常数,例如每个示例 11L,您将始终得到相同的拆分。

正如@zero323 所说,Mllib 只是通过遍历每个分区来获取随机样本。

有没有办法在拆分数据之前对其进行洗牌?

这取决于上下文。您总是可以按随机值重新分区或排序,但它是

  1. 如果您希望每次都获得不同的结果,则需要努力避免缓存
  2. 如果您需要可重现的样品,则更难获得。

因此,我的方法是迭代并在分裂种子上产生。这是交叉验证的主要原则。这样,您可以根据您正在执行的评估步骤获得最佳种子。而且您有可重复的样本,但这种方法非常昂贵。

我希望这会有所帮助。

【讨论】:

  • 如果我正在处理源数据,则按标签排序,即源数据的所有标签都是 1,后跟所有 0。如果我正确理解 randomSplit 的工作方式,所有 0 都将最终出现在测试集中。此外,训练算法可能主要看到 1 个标签。对吗?
  • 我认为您可能需要以下内容:stackoverflow.com/questions/32238727/…
猜你喜欢
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2013-01-15
  • 2018-11-30
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多