登录
首页精彩阅读数据科学家:那些年,我都学过哪些编程语言......
数据科学家:那些年,我都学过哪些编程语言......
2018-10-25
收藏


作者: Elena Nisioti
编译: Mika
本文为 CDA 数据分析师原创作品,转载需授权
 
我们对事物的看法各不相同,有时他人特别喜欢的语言可能会成为另一个人的的噩梦。而我个人的噩梦是用C语言进行日常的编程工作。
本文就介绍了作为数据科学家,我在职业生涯中所学过的语言,其中包括MATLAB、Weka、R、C ++以及Python。
数据科学是一个广泛的领域,从业者来自各种专业背景,如经济学,生物学和语言学等等。尽管数据科学最初源于统计领域,但它很快覆盖了计算机科学领域,如今数据科学已成为了必不可少的工具。
因此,用于数据科学的编程语言的发展就像宇宙一样:可能穷其一生都难以完全探索,并且还在不断扩展。
众所周知,语言的通用性、用途和复杂性需要权衡利弊。因此,一门语言的流行程度仅应作为当前趋势的一个指标,而不是决定你选择的因素。归根结底,这是涉及到应用、经验和个人偏好的问题。
 
MATLAB
通过吴恩达的机器学习课程,我开始接触机器学习领域。如果你也想学习机器学习,这是一个很不错的选择。
虽然当时Python和R语言更受欢迎,但吴恩达在课程中选择了MATLAB。当时我并没有觉得有什么困扰,但如今看来有些奇怪。数据科学课程的侧重点应该在于如何进行数据分析,而不是使用某种语言进行分析。
吴恩达在这门课程中选择了比较通用的MATLAB语言,原因之一在于该课程的受众主要是计算机专业的科学家和工程师,他们已经很熟悉MATLAB了。而且该课程的重点是,在不使用库的情况下实现学习算法,因此MATLAB与任何专业语言一样出色。
虽然我很推崇自动化工具和便捷型库,但在开始进入数据科学领域时,自己动手这一点也是十分重要的。
MATLAB不缺少执行各种数据分析和机器学习任务的库。对于信号处理和控制工程师等人来说,它是首选框架。
但不难理解为什么MATLAB征服数据分析领域,毕竟它不开源,且非常昂贵的工具。至于Octave,虽然开源且能兼容MATLAB代码,但性能却远远不及MATLAB。
 
 
WEKA
我学习Weka的经历是短暂的。在大学时期,Weka作为我完成模式识别课程作业一种工具。
通过这个课程,我得到最有价值的教训是:GUI对数据科学家的影响是深远的。Weka以其易用性和可理解性引以为豪,并声称只需加载数据集并按下按钮就可以轻松训练机器学习模型。这当中的益处也是显而易见的,毕竟当时市场对预测模型的需求很大,而且能够满足这种需求的人才并不多。
寻找自动化工具并使用得出解决方案是当前的研究领域,即AutoML,但我们花了几年时间,并经历过大量失败才意识到,这一过程离不开人类的参与。
在上世纪90年代末,那种认为没有充分理解数据就能构建模型的幻想破灭了。自动化工具能够简化我们的工作,发现算法的良好参数化、实用的预处理步骤以及高效的测试管道。但它们不能替代人类专家,至少以我们目前的专业水平。
总而言之,你应该对你创建的模型负责。
 
在我的毕业论文中,我深入研究并探索了R语言的特性和奥妙。你可能听说过,R语言是数据分析语言家族中的一个特殊的语言。R语言学习起来并不容易,这需要一个学习过程,在刚开始学习时我常常会感到自我怀疑和迷失方向的感觉。
我们的目标是创建能够自动执行机器学习实验的软件工具。R更像是一种目的,而不是一种手段,因为我们希望通过使用丰富的R语言库对机器学习技术进行广泛的研究。
当时我想要构建完整的框架,并且在毕业设计中利用面向对象编程,因此必须解决的第一个问题是:R语言是否支持面向对象?答案是肯定的。实际上,它有四种不同的方式。这些都与我在C ++,Java或Python中遇到的面向对象编程并不相同。
R语言还提供了许多方便的工具,例如data.frames,它能够轻松捕获数据集的特征和需求。但是,R语言中也有一些的技术性问题让我感到头疼。RStudio是R的免费UI,当绘图不适合其平面时,就会引发运行时错误等等。
虽然我再也不会尝试用R语言中从头开始构建框架,但R语言提供的大量软件包可以助你进行可视化和预处理,这些都是很不错的优势。
 
 
C++
现在你肯定会问,为什么要用C ++进行数据分析?为什么有人这样做?
暑期我曾在一家公司实习,该公司用的就是C ++,我猜测公司也许是考虑到传统和商业的结合,因此选择了能够高效执行的代码。
尽管如此,我仍决定使用R语言。在实习结束时,我再将模型和函数转移到C ++。由于有各种图表和出众的预处理技术,R语言也引起了公司里用C ++做数据分析的人的注意,一些同事甚至对R感兴趣并开始尝试它。
在获得满意的结果后,通过使用简单的R包用于PCA支持向量机,我尝试将模型合并到庞大的C ++框架中。libsvm 软件包很适合这种情况,并能提供与支持向量机相关的操作。
如今,当你想要跨语言转移机器学习模型时,存在很多选择。比如你可以转移数学模型,即算法的参数化,然后通过跨库转换模型文件,或使用包跨语言进行交互。
我发现,简单地使用相同的参数化是不够的。虽然算法保持不变,比如具有高斯核的SVM, 不同的实现可能采用不同的数学模型,因此需要不同的参数集。即使模型保持不变,特定的实现因素也会严重影响模型的性能,因此需要不同的参数化。
最合适的方式是使用rcpp,一个能连接C ++框架和R脚本的包。一些软件包也支持两种不同语的库之间的兼容性,但很少用于这种情况。
 
Python
我和现任主管之间曾有过这样的对话:
—— 在未来的工作中你打算使用哪种语言?
——我想我会用Python。
——你曾用过Python吗?
——不,我用过很多语言,我对Python有不错的预感。
很高兴我说服了他,如今我使用Python进行数据分析十分舒心。易于设置实验,附加功能以及丰富的库带来的便利性让我的工作非常顺利。虽然我主要自己编写代码,但到目前为止,我常常通过OpenAI Gym 来定义强化学习实验环境。同时还有TensorForce,这是一个扩展TensorFlow的库,能提供了大量的强化学习算法。
不过,我的意思并不是指Python就是无敌的。程序员不应该局限于某种语言,而是应该不断地尝试。因此,下次当你遇到新数据集时,不要害怕尝试新的软件。就算失败了,你也会从中有所收获。

数据分析咨询请扫描二维码

客服在线
立即咨询