目前机器学习可以说是百花齐放的阶段,但是如果你想学习或者研究机器学习,然后在生产环境中使用,选择平台、开发语言和机器学习库会花很多时间。集思广益。这里根据自己的机器学习经验提出一个建议,仅供参考。首先,平台选择的第一个问题是你是想在生产环境中使用,也就是特定的产品,还是仅仅用于研究和学习?如果用在生产环境中,那么就有一个问题,就是预估产品需要分析的数据量。如果数据量很大,那么就需要选择大数据平台。否则,您只需要一个独立版本的平台。1.1生产环境机器学习大数据平台建设生产环境大数据平台最主流的是Spark平台,加上辅助的分布式数据处理容器,比如YARN,或者Mesos。如果需要实时采集线上数据,那就加Kafka。简而言之,一个通用的大数据处理平台就是集成了Spark+YARN(Mesos)+Kafka。我做的产品项目都是基于Spark+YARN+Kafka。目前选择这个平台基本上是主流方向。当然有人会说,这么多开源软件集成在一起很麻烦,肯定有很多大坑。有没有类似Spark+YARN+Kafka的通用平台可以包含大数据平台功能?据我所知,更好的是CDAP(http://cdap.io)。它集成了Spark、YARN、Kafka和一些主流的开源数据处理软件。开发者只需要在其上封装的API层进行二次开发即可。这应该是个好主意,但是我们还没有看到任何成功的商业案例,所以我们在选择架构的时候没有考虑CDAP。所以围绕Spark+YARN+Kafka的大数据平台还是最好的。由于SparkMLlib的机器学习算法并不丰富且易用,如果你的产品中需要一些MLlib中没有的算法,你需要自己寻找开源实现。1.2在生产环境搭建机器学习单机数据平台如果生产环境的数据量不大,大数据平台会显得有点过度设计,这时候我们的选择就更多了。***,还是Spark平台,但是我们不需要分布式容器YARN和分布式数据分发路由Kafka。为什么Spark仍然是最好的?因为我们要考虑扩张。现在数据量不大,但不代表以后数据量不会很大。这也是我参与的一些小型数据分析项目也选择Spark的原因。当然,我认为Spark同时支持Python、Java、Scala和R是有一些原因的。这降低了许多程序员的入门门槛。在我参与的Spark项目中,开发语言主要是Java和Scala。由于某些速度原因未选择Python,系统的其余部分是用Java编写的。第二个选择是基于scikit-learn的一系列python工具,包括numpy、scipy、pandas、MatplotLib等,特点是类库丰富,尤其是scikit-learn的机器学习库,可以说要18种武器,应有尽有。另外,由于程序可以交互编写,便于快速原型开发。我参与的两个项目都在可行性分析阶段,都是使用scikit-learn做原型,给客户做demo。因此,对于生产环境的机器学习单机数据平台,Spark是产品龙头,而scikit-learn家族适合快速原型开发和验证。2.如果在研究环境下构建机器学习平台只是为了研究,那么选择很多,主流的有3个。首先是基于SparkMLlib来学习。优点是所学可以无缝切换到生产环境,缺点也很明显。Spark东西比较多,在自己的单机上跑很耗内存,比较慢。而且MLlib的类库并不丰富,很多算法需要自己去寻找类库。根据身边同事的反馈,比较难,所以个人认为基于SparkMLlib学习机器学习并不是一个好的选择。二是基于scikit-learn的一系列python工具来学习,包括上面提到的numpy、scipy、pandas、MatplotLib等。优点是类库多,API强大,可以专注于数据分析,例子也多,学起来不难。当然,也有缺点,就是熟练使用这么大量的python库需要一段时间。我个人推荐这种方法。对于身边的同事来说,使用scikit-learn来学习交流也是主流。三是基于R的机器学习平台(不包括SparkR),主要平台是Rstudio。由于R是一门古老的语言,它的数据处理和机器学习API比较丰富,尤其是对于曾经做过数据分析师的人来说。但R是一门相对封闭的语言,社区远不如Python活跃,而且对于程序员来说,R的语法让人不舒服。几年前,人们普遍认为R的机器学习比Python好,但现在Python已经把R远远甩在后面了。因此,除非你之前已经熟悉R语言,否则不建议使用R来研究机器学习。顺便说一句,这里没有对R的歧视。总之,如果你想研究机器学习并且没有特殊的R背景,scikit-learn是你最好的选择。当然有人会说,我喜欢自己一点点实现机器学习算法,不喜欢直接调用类库。只是比较需要时间。如果你和我一样时间不多,直接调用API研究数据会更直接。
