使用"randomSplit"进行机器学习目的,了解在Scala中拆分数据的问题

 手机用户2502912835 发布于 2023-01-01 22:26

嗨,我是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"可以是负数,为什么它会像这样划分?

谢谢!

1 个回答
  • 这与积极和消极的例子无关.那些应该已经存在(两种)数据集中.

    您将随机分割数据以生成两组:一组用于训练ML算法(训练集),另一组用于检查训练是否正常(测试集).这是一个非常好的想法,因为它捕获过度拟合,否则可能会使你看起来像你有一个很好的ML解决方案,它实际上只是记住每个数据点的答案,不能插入或概括.

    事实上,我建议如果你有一个合理数量的数据,你分成三个数据集,你运行ML算法的"训练"; "测试",用于检查培训的进展情况; 和"验证",在你认为整个ML过程得到优化之前,你永远不会使用它.(优化可能需要多次使用测试集,例如检查收敛,这使得它有点适合数据集,因此通常很难确定您是否真的避免过度拟合.将验证集保留到最后是最好的检查方式(或者,如果你可以收集新数据,你可以这样做).)

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

    2023-01-01 22:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有