gpt4 book ai didi

scala - 出于机器学习目的,使用 "randomSplit"理解在 Scala 中拆分数据的问题

转载 作者:行者123 更新时间:2023-12-04 18:06:52 32 4
gpt4 key购买 nike

嗨,我是 MLlib 的新手,我正在阅读 Spark 网站上有关它的文档。我很难理解为什么在下面的代码中我们需要缓存“0”用于训练和“1”用于测试:

  val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)
val training = splits(0).cache()
val test = splits(1)

任何人都可以帮助我理解原因吗?据我所知,我们需要正负样本,所以“1”可以为正,“0”可以为负,为什么要这样划分?

谢谢!

最佳答案

这与正例和反例无关。这些应该已经存在于数据集中(两种类型)。

您将数据随机拆分以生成两组:一组在 ML 算法训练期间使用(训练集),第二组用于检查训练是否有效(测试集)。这被广泛使用并且是一个非常好的主意,因为它捕获了过度拟合,否则会使您看起来像拥有一个很棒的 ML 解决方案,而实际上它实际上只是有效地记住了每个数据点的答案并且无法进行插值或概括。

事实上,我会建议,如果您将合理数量的数据拆分为三个数据集,那么您可以在其上运行 ML 算法的“训练”; “测试”,您可以用它来检查您的训练进行得如何;和“验证”,直到您认为您的整个 ML 过程已优化,您才可以使用。 (优化可能需要多次使用测试集,例如检查收敛性,这使其在某种程度上适合数据集,因此通常很难确定您是否真的避免了过度拟合。将验证集保留到最后是最好的检查方法(或者,如果您可以收集新数据,则可以改为这样做)。

请注意,拆分是随机的,以避免不同数据集包含统计上不同的数据的问题;例如早期数据可能与晚期数据不同,因此取数据集的前半部分和后半部分可能会导致问题。

关于scala - 出于机器学习目的,使用 "randomSplit"理解在 Scala 中拆分数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24857650/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com