欢迎各位阅读本篇,本篇文章讲述了机器学习&开发平台之间的抉择,编程学习网教育平台提醒各位:本篇文章纯干货~因此大家一定要认真阅读本篇文章哦!
目前机器学习可以说是百花齐放阶段,不过如果要学习或者研究机器学习,进而用到生产环境,对平台,开发语言,机器学习库的选择就要费一番脑筋了。这里就我自己的机器学习经验做一个建议,仅供参考。
首先,对于平台选择的第一个问题是,你是要用于生产环境,也就是具体的产品中,还是仅仅是做研究学习用?
1. 生产环境中机器学习平台的搭建
如果平台是要用于生产环境的话,接着有一个问题,就是对产品需要分析的数据量的估计,如果数据量很大,那么需要选择一个大数据平台。否则的话只需要一个单机版的平台就可以了。
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的大数据平台还是首选。由于Spark MLlib的机器学习算法并不丰富好用,因此如果你的产品中需要一些MLlib中没有的算法,就需要自己去找开源实现了。
1.2 生产环境中机器学习单机数据平台的搭建
生产环境里面如果数据里不大,大数据平台就显得有点over design了,此时我们有更多的选择。首选,仍然是Spark平台,不过我们不需要分布式的容器YARN和分布式数据分发的路由Kafka了。为什么首选还是Spark呢?因为我们要考虑扩展,现在数据量不大,不代表以后数据量不大。这也是我参与的一些小型数据分析项目也是选择Spark的原因。当然我觉得还有一些原因是Spark同时支持了Python, java, Scala和R。这降低了很多程序员的参与门槛。我参与的Spark项目中,开发语言主要是Java和Scala。Python没有选择是因为一些速度的原因和系统其它部分都是用Java写的。
第二个选择是以scikit-learn为主的一系列python工具,包括 numpy, scipy, pandas, MatplotLib等等。特点是类库丰富,尤其是scikit-learn的机器学习库,可以说是十八般武器,样样都有。另外就是由于可以交互式的编写程序,方便快速开发原型。我参与的有两个项目在可行性分析阶段,都是用scikit-learn来做原型和给客户做demo。
因此,生产环境中机器学习单机数据平台,Spark是做产品首选,而scikit-learn家族适合做快速的原型开发验证。
2. 研究环境中机器学习平台的搭建
如果只是做研究,那么选择就很多了,主流的有三种。
第一种是基于Spark MLlib来学习。好处是学到的东西用到生产环境可以无缝切换,但是坏处也很明显,Spark东西很多,在自己的单机上跑很吃内存,比较慢,而且MLlib的类库并不丰富,很多算法需要自己再去找类库。根据周围同事的反馈,比较吃力,因此基于Spark MLlib来学习机器学习,我个人觉得不是一个好的选择。
第二种是基于scikit-learn为主的一系列python工具来学习,包括上面提到的numpy, scipy, pandas, MatplotLib等等。好处是类库多,API强大,可以让你专注于数据的分析,例子也多,学习起来不难。当然也有缺点,就是这一大堆的python库,要熟练的用起来需要一段时间。 个人比较推荐这种方法,周围同事来说,用scikit-learn学习交流也是主流。
第三种是基于R的平台来做机器学习(不包括Spark R),主要平台是R studio。由于R是一门比较老的语言,因此他的数据处理和机器学习的API比较丰富,尤其是对于之前做数据分析师的人来说更是熟悉不过。但是R是一门相对封闭的语言,社区远远没有Python的活跃,而且对于程序员来说, R的那种语法让人难受。几年前,一般会认为R的机器学习比Python的好,但是现在Python已经将R远远甩在了后面。因此,除非你之前已经很熟悉R语言,否则完全不推荐用R来研究机器学习,BTW,这里没有歧视R的意思。
总之,如果你想研究学习机器学习,并且没有特殊的R背景,scikit-learn是你的首选。当然,有人会说,我喜欢自己去一点点的实现机器学习的算法,不喜欢直接调用类库,这样不行吗? 当然,这样肯定是非常不错的,并且对加深各个算法理解很有好处。只是这样比较的花时间,如果你和我一样时间不太多的话,还是直接调用API来研究数据比较直接。
快速开发平台的两种模式
从国内代表性的软件开发平台中,我们可以看出这一类产品的大致脉络,亚思捷的TNT平台:TNT平台的核心优势在于低成本的个性化,他可以同时向客户提供T——业务系统模板,即OA、CRM、文档管理、信息门户、在线考试等标准化的应用系统;N——开源组件包,即上述应用系统的源代码;T——开发工具,即基于微软Jupiter平台的快速开发工具,开发者可以通过界面属性设定的方法来完成对业务系统的快速开发,自动化生成C#和JAVA的二种语言的系统。显然,TNT中的两个“T”是业务的重点,而杀手锏则是低价。
其他厂家的软件开发平台与上述三种均大同小异,都是提供“标准化+行业化+个性化”的应用模式。
从中我们看出,这些软件开发平台确实都非常具有我们在上文中提到的技术共性,另外我们还都具有一个共同点,那就是他们既提供软件开发平台,又提供基于该平台生成的各种应用系统,两种产品相辅相成。这种模式也是软件开发平台销售的主流模式。
市面上的快速开发平台主要分为两种模式。
一种是引擎模式,一种是生成源代码模式。拿报表来举例,所谓引擎模式是指通过报表设计器设计出报表模板,发布到报表引擎中,在运行时,你只需要向报表引擎里传递相关的参数,如报表条件,报表引擎负责查询数据库,加工数据,然后以各种方式展现出来,在这个过程中是不需要开发人员编写代码的,也不产生源代码的。
即使是在开发过程中也是如此,利用开发平台开发业务系统时,开发者不需要编码,只需通过WEB页面进行参数定制即可,这些参数存放在系统数据库或XML文件中。系统运行时,引擎会调用这些参数进行页面展现及业务处理。
这种模式的快速开发平台的主要成功代表是广州天翎myApps柔性软件平台、万立软件制作大师他们的产品完全采用引擎模式,完全不需要懂技术,不需要写代码,就可快速制作ERP、OA、CRM、HRM、EAM、BI、PMS等软件,节省95%成本和时间。
另一种便是生成源代码的,这种方式主要通过一个桌面式设计器来定义业务模块,辅助生成源代码框架,然后用户可以在生成的源代码的基础上编写、修改自己的源代码,实现业务逻辑,包括生成、修改JSP页面。
所以生成源代码模式也可认为是一种代码生成器。这种模式的主要代表是普元平台,另外有宏天软件的EST-BPM,这种模式的产品对开发者的要求比较高,但由于面向的对象基本都是软件开发商或者有研发实力的企事业单位,深受政府单位和大中型企业的欢迎。
小结:您可以不采纳我的答案,但请您一定要考虑下我的建议哦! 文章中不足及错误之处在所难免,敬请专家和读者给予批评指正。当然如果大家还想了解更多方面的详细内容的话呢,不妨关注编程学习网教育平台,在这个学习知识的天堂中,您肯定会有意想不到的收获的!