1.4 机器学习和大数据
机器学习可以应用的另一个领域是大数据。Apache Hadoop首次发布就实现了一种高效的MapReduce算法,应对需要管理的不同业务环境中呈指数增长的信息量。将Apache hadoop用于机器学习,使得协同过滤等应用成为现实。
试想当网上商店拥有一百万用户和一千种商品时,可以使用矩阵将每个用户通过隐式方法或排名与每个商品相关联。那么,该矩阵将包含1000000×1000个元素。即使商品数量非常有限,对该矩阵执行的任何运算也都很缓慢而且耗费大量内存。相反,使用聚类以及并行算法,可以在很短的时间内执行高维矩阵的运算。
考虑训练一个具有一百万个样本的图像分类器。单个实例需要迭代多次以处理小批量的图片。即使该问题可以使用流方法(有限的内存)来执行,在模型具有良好的性能之前仍需要等待几天的时间。采用大数据方式,可以异步训练几个本地模型,定期共享更新,并使用主模型重新同步它们,从而快速得到图像分类器。大数据技术还可以用来解决强化学习问题,其中许多智能体(通常由不同的线程管理)玩同一个游戏,为全局智能提供它们各自的贡献。
当然,不是每个机器学习问题都适合采用大数据技术,也不是所有的大数据集在训练模型时都是有效的。在特定情况下,机器学习和大数据的结合可以消除影响较小的样本的限制,从而得到特别的结果。遗憾的是,机器学习和大数据都是持续研究的主题,因此工程师或者科学家必须完成的任务之一就是了解何时特定技术真正有用,何时其负担可能比实际效益更重。现代计算机通常拥有足够的资源来处理几年前被视为大数据的数据集。因此,希望读者仔细分析每种情况,并从商业角度思考问题。Spark聚类的成本有时很不合理。我看到在两台中型机器的聚类上运行的任务使用笔记本电脑可以更快地执行。因此,始终对问题和数据进行描述性/预测性分析,尝试关注以下内容:
当前的状态
目标(需要实现什么?)
数据和维度(使用批量数据吗?是否有传入流?)
可接受的延迟(是否需要实时处理?是否可以每天/每周处理一次?)
大数据的解决方案被证明是有效的,例如以下情况:
数据集无法匹配高端机器的内存
传入的数据流量巨大、连续、需要及时计算(例如点击流、网络分析、消息调度等)
将数据拆分成小块是不可能的,因为可接受的延迟是最小的(信息必须量化)
可以有效地并行化操作(虽然现在许多重要的算法已经在分布式框架中实现,但仍然存在无法使用并行体系结构处理的任务)
在专门讨论推荐系统的第12章中,将给出如何使用Apache Spark实现协同过滤,并采用与朴素贝叶斯分类相同的学习框架。
如果想了解更多有关Hadoop系统的信息,请访问http://hadoop.apache.org。Apache Mahout(http://mahout.apache.org)是一个专用的机器学习框架,而Spark(http://spark.apache.org)是最快的计算引擎之一,它具有一个称为MLlib的模块,实现了许多受益于并行处理的常用算法。