- A+
是什么让数据科学如此喜爱Python?是语言本身,还是生态系统,或是相关的开发过程?
在许多软件开发领域,包括脚本和进程自动化、网站开发以及通用应用程序等,Python越来越受欢迎。而且最近Python成为了机器学习的首选语言。在这篇文章中我们将来看一看Python成为该领域主宰的四大原因。
▌Python让编程更简单
Python成功的首要原因是:这门语言让编程变得很简单,而且使之一直保持简单。
Python刚刚问世的时候,这门语言一个主要的目标就是易读易写。大家读的代码远比写得多,尤其是当代码从一个团队手中递交到另外一个团队的情况下。如果你继承了由其他开发者开发的机器学习的应用程序,尤其是那些结合了许多第三方组件的程序,或是拥有大量定制业务逻辑的程序,那么在理解程序时编程语言造成的障碍越小越好。优秀的Python代码可以做到这一点,甚至远比其他语言出色。
Python的语言设计在机器学习中很有帮助的另外一个关键因素是,它提供了高层的、基于对象的任务抽象。机器学习应用程序呈现复杂、多阶段的工作流程。优秀的语言应该让人们把更多的精力放在需要完成的内容上,而对实现细节的关注越少越好。Python让你与手头的工作保持了一定的距离,所以你不会一眼望过去就被吓到。
▌Python提供了机器学习的代码库
Python成为机器学习的主力的第二个主要原因,是因为Python提供大量机器学习的代码库和框架。以老牌的Scikit-learn为首,每个伟大的机器学习和深度学习的框架,包括TensorFlow、CNTK、Apache Spark MLlib等,它们要么在Python享有一级的待遇,要么含有Python API。例如PyTorch等一些框架,正如名字的字面含义,是专门用Python编写的,而且性能上并没有打折扣。(下面我们会有更多关于性能的讨论。)
Python的代码库生态系统可以让你在工作空间内,简单地的通过一行命令安装很多的这些框架。还有一些最近的新进展,在Python改变了它的代码库打包机制以后,现在可以更加容易地分发那些依赖于特定平台的文件,而这是许多机器学习框架所必须的。
当然,这个代码系统还有一些不足的地方,因此产生了很多变通方案。例如Anaconda等发行版有自己的打包机制,可以很好地处理对不属于Python生态系统的可执行文件的依赖。但是,总的来说,Python打包生态系统为机器学习提供了一定程度的便利性,这与Python一贯坚持的简易性和便利性很相符。
▌Python可以处理内存管理
由Python等高级语言和使用它们的工作提供的抽象扩展到了很多其他领域。在Python中,程序员看不到内存管理的细节,因此他们可以将更多精力放在手边的问题上。
Python的内置结构和数据抽象——列表、集合、字典和元组——所使用的内存都由Python运行时管理。Java的工作方式大致相同,但是一般来说Python比Java更简洁,在用户和结果之间造成的障碍也更少。
与执行实际的计算工作相比,更多时候机器学习的应用使用Python的内存管理结构来组织应用程序的逻辑或数据流。大部分繁重的计算工作都由外部代码库(如NumPy)来处理(更多内容请见下文)。但是,语言和运行时提供的抽象意味着这类的内存管理由底层自动处理,用户操作层根本不会觉察。
尽管如此,Python内部的内存管理方式很值得我们去了解。Python的易用性的代价是效率上的损失,而且这种代价有时并不是很明显。为了获得最佳性能,你最终需要“揭开神秘的面纱”,探索底层的抽象。
有关这方面的一些示例,请参阅Theano机器学习代码库的资料“Python的内存管理”(http://deeplearning.net/software/theano/tutorial/python-memory-management.html),虽然Theano已停止开发,但是许多讨论过的原则可以广泛应用。另一种优化性能的方法是Cython,这个实用的代码库可以将Python代码转换成C。Cython可以一些通过Python不具有的常见方式,直接访问C的内存管理和数据结构。
▌Python的速度不是问题
很多人这样形容Python:“很方便,但是不够快。”这句话的大部分是正确的。在使用Python的时候,一般你不得不为了简易的开发而放弃部分性能。所以有人可能会问,如果Python不是最快的语言,为什么我们用它处理计算密集型的工作,比如机器学习?
简单的答案是:计算密集型的工作并不是由Python完成的。
用Python编写的机器学习应用程序中,绝大多数的实际计算工作都是由别的代码库执行的,这些代码库通常是由C、C++或Java编写的,Python只是打包并与之交互。应用程序中在Python中运行的部分通常都对性能不是很敏感——一般它们负责安装或删除、命令和控制、协调各个组件、记录日志和报告,等等。
但是,如果应用程序花费大量时间在Python和其他快速的代码库之间来来回回,那么在Python中使用外部的代码库仍然会导致性能问题。每次环境上下文切换都会导致性能下降,所以开发人员需要将Python与外部API的交互次数降到最低。尽管如此,但这不是机器学习特有的问题,这是Python与其他语言的常见问题,所以发现这个问题并不难。
根据情况需要,我们还可以通过各种工具加速纯Python代码,比如Cython(将Python转换成C)、Numba(用于JIT加速以数学为中心的代码)、PyPy(用于JIT加速Python代码)等等。
总的来说,让Python在机器学习领域大放异彩的不仅是某个功能,而是Python整个语言包:它是一种易学易用的语言,它的生态系统拥有的第三方代码库可以涵盖广泛的机器学习用例和性能,可以帮助你很好地完成手头的工作。
写在最后
前几天有私信小编要Python的学习资料,小编整理了一些有深度的Python教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Python的同学可以下载学习学习。文件下载方式:点击小编头像,关注后私信回复“资料”即可下载。首先把代码撸起来!首先把代码撸起来!首先把代码撸起来!重要的事说三遍,哈哈。“编程是门手艺活”。什么意思?得练啊。