首页 文章

机器学习和大数据

提问于
浏览
31

首先,我想描述一下我目前的立场和想要实现的目标 .

我是一名处理机器学习的研究员 . 到目前为止,已经完成了几个涵盖机器学习算法和社交网络分析的理论课程,因此获得了一些理论概念,可用于实现机器学习算法并提供真实数据 .

在简单的例子中,算法运行良好,运行时间可以接受,而大数据表示如果尝试在我的PC上运行算法则会出现问题 . 关于软件我有足够的经验来实现文章中的任何算法或使用任何语言或IDE设计我自己(迄今为止使用过Matlab,Java与Eclipse,.NET ......)但到目前为止还没有太多的设置经验 - 基础设施 . 我已经开始学习Hadoop,NoSQL数据库等,但不确定哪种策略最好考虑学习时间限制 .

The final goal is to be able to set-up a working platform for analyzing big data with focusing on implementing my own machine learning algorithms and put all together into production, ready for solving useful question by processing big data.

由于主要关注的是实现机器学习算法,我想问一下是否有任何现有的运行平台,提供足够的CPU资源来提供大量数据,上传自己的算法并简单地处理数据而不考虑分布式处理 .

然而,这样的平台是否存在,我想获得足够大的图片,以便能够在一个团队中工作,该团队可以根据特定的客户需求量身定制整个系统 . 例如,零售商希望分析每日购买,因此所有日常记录必须上传到某些基础设施,足以通过使用自定义机器学习算法处理数据 .

将上述所有问题都归结为简单的问题: How to design a custom data mining solution for real life problems with main focus on machine learning algorithms and put it into production, if possible, by using the existing infrastructure and if not, design distributed system (by using Hadoop or whatever framework).

我非常感谢有关书籍或其他有用资源的任何建议或建议 .

4 回答

  • 1

    首先,您的问题需要更清楚地定义大数据的意图 .

    实际上,大数据是一个流行语,可能涉及各种规模的问题 . 我倾向于将大数据定义为问题的类别,其中数据大小或计算时间足够大,以使“硬件抽象变得破碎”,这意味着单个商品机器无法在没有重复计算和内存的情况下执行计算 .

    因此,数据成为大数据的规模阈值不明确,并且对您的实施很敏感 . 您的算法是否受硬盘带宽限制?是否需要记忆?您是否尝试避免不必要的二次成本?您是否已做出任何努力来提高缓存效率等 .

    从运行中等大规模机器学习挑战(多达250台商用机器)的几年经验来看,我坚信,如果出现问题,许多似乎需要分布式基础设施的问题实际上可以在单个商品机器上运行正确 . 例如,您提到零售商的大规模数据 . 几年来,我一直在研究这个确切的主题,我经常设法让所有计算在一台机器上运行,提供一些优化 . 我的公司一直在研究简单的自定义数据格式,它允许一个非常大的零售商的所有数据存储在50GB内,这意味着单个商品硬盘可以保存20年的历史 . 您可以查看以下示例:https://github.com/Lokad/lokad-receiptstream

    根据我的经验,值得花时间尝试优化算法和内存,以便您可以避免使用分布式架构 . 实际上,分布式架构需要三倍的成本 . 首先,强大的知识要求 . 其次,它在代码中带来了大量的复杂性开销 . 最后,分布式体系结构具有显着的延迟开销(本地多线程分发除外) .

    从实践者的角度来看,能够在30秒内执行给定的数据挖掘或机器学习算法是提高效率的关键因素之一 . 我注意到,当某些计算(无论是顺序计算还是分布式计算)花费10分钟时,我的注意力和效率往往会迅速下降,因为快速迭代并快速测试新想法变得更加复杂 . 许多分布式框架引入的延迟开销使您不可避免地处于这种低效率的情况中 .

    如果问题的规模是这样的,即使你付出了很大的努力就无法在一台机器上执行它,那么我强烈建议使用现成的分布式框架而不是构建自己的框架 . 最着名的框架之一是MapReduce抽象,可通过Apache Hadoop获得 . Hadoop可以在10千个节点集群上运行,可能比您需要的多得多 . 如果您不拥有硬件,则可以“租用”Hadoop集群的使用,例如通过AmazonMapReduce的 .

    不幸的是,MapReduce抽象并不适合所有机器学习计算 . 就机器学习而言,MapReduce是一个严格的框架,许多案例已经证明难以适应这个框架:

    • MapReduce框架本身与函数式编程有关 . Map过程独立地应用于每个数据块 . 因此,MapReduce框架不适用于将Map过程应用于某些数据块需要与其他数据块相同的过程结果作为先决条件的算法 . 换句话说,当不同数据片段之间的计算不是独立的并且强加特定的时间顺序时,MapReduce框架是不适合的 .

    • MapReduce旨在提供 Map 和reduce步骤的单次执行,而不是直接提供迭代调用 . 因此,它不直接适用于暗示迭代处理(期望最大化(EM),信念传播等)的众多机器学习问题 . 在MapReduce框架中实现这些算法意味着用户必须设计一个解决方案来组织结果检索和多次迭代的调度,以便在前一次迭代的缩减阶段完成后启动每个 Map 迭代,因此每次迭代都是由前一次迭代的reduce阶段提供的结果提供 .

    • 大多数MapReduce实现旨在满足 生产环境 需求和稳健性 . 因此,该框架的主要关注点是处理硬件故障并保证计算结果 . 因此,这些可靠性约束部分地降低了MapReduce效率 . 例如,在某些情况下,计算结果的硬盘上的序列化变得相当昂贵 .

    • MapReduce不适合异步算法 .

    对MapReduce框架的质疑导致了更丰富的分布式框架,其中更多的控制和自由留给了框架用户,代价是该用户更加复杂 . 在这些框架中,GraphLab和Dryad(均基于计算的直接非循环图)是众所周知的 .

    因此,没有“一刀切”的框架,例如没有“一刀切”的数据存储解决方案 .

    从Hadoop开始,你可以看看这本书Hadoop: The Definitive Guide by Tom White

    如果您对大规模框架如何适应机器学习要求感兴趣,您可能会对我博士的第二章(英文)感兴趣,可在此处获取:http://tel.archives-ouvertes.fr/docs/00/74/47/68/ANNEX/texfiles/PhD%20Main/PhD.pdf

    如果您提供有关要处理的特定挑战的更多信息(算法类型,数据大小,时间和金钱限制等),我们可能会为您提供更具体的答案 .

    编辑:另一个可能被证明有用的参考:Scaling-up Machine Learning

  • 4

    我不得不实现一些数据挖掘算法来处理BigData,最后我使用了Hadoop . 我不知道你是否熟悉Mahout(http://mahout.apache.org/),它已经有几种算法可以用于Hadoop .

    然而,如果你想实现自己的算法,你仍然可以使它适应Hadoop的MapReduce范例并获得良好的结果 . 这是一本关于如何将人工智能算法应用于MapReduce的优秀书籍:

    大规模数据集的挖掘 - http://infolab.stanford.edu/~ullman/mmds.html

  • 25

    这似乎是一个老问题 . 然而,考虑到您的用例,专注于大数据域中的机器学习的主要框架是Mahout,Spark(MLlib),H2O等 . 但是要在大数据上运行机器学习算法,您必须将它们转换为基于Map Reduce范例的并行程序 . 这是一篇很好的文章,简要介绍了主要(并非所有)大数据框架:

    http://www.codophile.com/big-data-frameworks-every-programmer-should-know/

    我希望这将有所帮助 .

  • -1

    Renata:您提供了“挖掘海量数据集”URL的新URL .

    http://www.mmds.org/index2.html

相关问题