嗨,我是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过程得到优化之前,你永远不会使用它.(优化可能需要多次使用测试集,例如检查收敛,这使得它有点适合数据集,因此通常很难确定您是否真的避免过度拟合.将验证集保留到最后是最好的检查方式(或者,如果你可以收集新数据,你可以这样做).)
请注意,拆分是随机的,以避免不同数据集包含统计上不同的数据的问题; 例如,早期数据可能与后期数据不同,因此采用数据集的前半部分和后半部分可能会导致问题.