另一个机器学习中使用的、已经成熟的并行任务是距离计算(distance calculation)。欧几里得距离是在大量算法上反复计算所需的一个非常常见的度量,包括 k-值簇。因为逐个迭代的单独距离计算不依赖于同一迭代的其他计算,这些计算可并行进行(如果我们不将内存管理的花费作为统筹的瓶颈。)
图 5:k-fold 交叉验证 虽然上面提到的这些统计任务可能从执行效率上得到好处,还有机器学习数据流的其他方面可能产生更大的收益。机器学习模型验证中使用的一个常见的评估手段是 k-fold 交叉验证,涉及到密度,不需要数据集分割的连续处理。k-fold 交叉验证(k-fold cross-validation)是模型建立的确定性方法(deterministic method),通过省去数据集的一个 k 分割片段进行验证,或者说是 fold。在所有的 k-1 分割上训练,并使用剩下的第 k 个分割片段测试。然后重复这一过程 k 次,结合所有的预测误差结果并在一个混合模型中进行平均。这种方法提供了可变性,可以尽可能的产生最准确的预测模型。 在顺序进行这一模型验证时,相对来说有些耗时间,特别是在每个 fold 都配对一个计算成本昂贵的算法任务时,比如线性回归矩阵相乘。k-fold 交叉验证是预测给定机器学习算法误差率的标准方法,试图来增加验证的速度。 对 Python 使用的考虑超出了算法设计的范围,涉及到优化本地代码和相比于并行实现的运行时间,这超出了本文的讨论范围。 在任何情景下都能利用无限的计算资源需要算法上的思考,这与机器学习没什么不同。有了明智的思考,深入了解自己想做什么,再加上工具集和文档,你想象不到自己能做到哪一步。并行计算、GPU 和传统机器学习会成为你的好朋友。 ©本文为机器之心编译文章,转载请联系本公众号获得授权。 ?------------------------------------------------ 加入机器之心(全职记者/实习生):[email protected] 投稿或寻求报道:[email protected] 广告&商务合作:[email protected] ,atv (责任编辑:本港台直播) |