数据科学家:那些年,我都学过哪些编程语言…
前言
我们对事物的看法各不相同,有时他人特别喜欢的语言可能会成为另一个人的的噩梦。而我个人的噩梦是用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语言库对机器学习技术进行广泛的研究。
当时我想要构建完整的框架,并且在毕业设计中利用面向对象编程,因此必须解决的第一个问题是: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就是无敌的。程序员不应该局限于某种语言,而是应该不断地尝试。因此,下次当你遇到新数据集时,不要害怕尝试新的软件。就算失败了,你也会从中有所收获。
原文链接:
https://medium.freecodecamp.org/a-personal-journey-through-the-languages-of-data-science-48f516cbb81c
相关文章:

short_open_tag 必须打开
在使用phpcms本地安装的过程中,到运行环境检测这一步,发现:short_open_tag 必须打开。 从网上搜索相关资料时,发现,将php.ini文件中的short_open_tag off 项,设置成on,重启服务器即可。 shor…

10.15 iptables filter表案例
2019独角兽企业重金招聘Python工程师标准>>> iptables常用知识回顾点 iptables -I/-A/-D 后紧跟 链 ,可以是INPUT,OUTPUT,FORWARDiptables -P 用来指定 链的默认策略 ——>最好不要直接操作,否则会造成远程的终端断…

高并发大型网站架构设计
一个大型的网站网站应该由如下6个子系统组成 负载均衡系统 反向代理系统 Web服务器系统 分布式存储系统 底层服务系统 数据库集群系统 为什么要做高并发系统设计? 事实上,针对于任何单一的网络服务器程序,其可承受的同时连接数目是有理…

Tidio AI 趋势报告:约42%受访者能够接受机器人伴侣
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 文章内图源:Tidio 近日,波士顿动力发布了一段机器人跳舞的视频,有些人不敢相信他们所看到的,它看起来更像是皮克斯动画而不是真实的镜头。 有人说&#x…

微信公众平台对所有公众号开放自定义菜单
据统计,微信公众号已达1000多万了,但大多数没有微信认证,且没有开发能力,为此微信公众平台开放了自定义菜单功能给所有公众号,这是微信团队年前给广大自媒体送的大礼,期待微信越来越开放 公众帐号运营者点击…

SignalR网页实时推送
1.新建项目,选择mvc4 Wed应用程序,选择Internet,视图引擎:Razor 2.在控制器中添加 并添加上视图 3.引用(install-package Microsoft.AspNet.SignalR) 4.添加Startup 项目名 5.新建Hubs文件夹,添…

Hyper-V虚拟化测试05防火墙及证书配置
3.防火墙和证书3.1、防火墙配置打开Windows防火墙,并进入到高级配置入站规则,启用“Hyper-V副本HTTP侦听器(TCP入站)”和“Hyper-V副本HTTPS侦听器(TCP入站)”可以看到已经启用了如上两条规则允许入站流量3…

httpwatch的timechart 解析
从timeChart,我们可以一目了然的看到那些请求花费的时间较长,一般柱状的长短表示从请求到接受共花费的时间,我们重点需要优化那些柱状较长的部分,当然我们也可以点击time列,按请求时间排到序,直接找出请求时…

英特尔北京2022年冬奥会体验中心落成
2020年东京奥运会已圆满落幕,全社会进入到为北京2022年冬奥会紧锣密鼓筹备的倒计时模式。近日,“英特尔北京2022年冬奥会体验中心”在北京石景山区首钢园落成,并举办了媒体开放日活动。以体验中心为窗口,英特尔在近千平米的展厅中…

机器学习 LR getA()
机器学习 LR getA() 前面的几位回答都没有解决getA()是什么的问题,碰到同样的问题,解释如下:matrix.getA()Return self as an ndarray object.Equivalent to np.asarray(self).Parameters: None Returns: ret : ndarrayself as an ndarray 也…

memcache安装
转载自 http://zhaochen.blog.51cto.com/2029597/390037 一,memcache简单介绍: memcached是高性能的分布式内存缓存服务器,为了提高性能,memcached中的数据都保存在内存中,重启memcached及重启操作系统都会导致缓存中的…

算法小论——第三章 又把新桃换旧符
2019独角兽企业重金招聘Python工程师标准>>> 笔记 这一章主要是渐进记号和高中数学的回忆。 几个标记: Θ -- 上界和下界,绑定值,相当于f(n) ∈ [c1 * g(n), c2 * g(n)]Ω -- 闭区间下界,最好运行时间,相当…

来体验一把职场人的真实训练,检验你的工程化交付能力!
长沙软件人才实训基地是由政府引导,长沙软件园(大型国企)、万兴科技(A股上市公司)和CSDN(中国开发者社区)三方参与,强强联手,倾力打造的人才培育平台,旨在通过…

从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验。本篇主要开始介绍基于XCode进行IOS程序的开发,介绍使用FMDB…

nginx做方向代理不显示图片的问题
在nginx的配置文件中加上 location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$ { access_log off; expires 30d; root /www/htdocs/market; break; }

Linux系统挂载ntfs分区
Linux系统挂载ntfs分区 http://www.2cto.com/os/201404/297079.htmlposted on 2015-02-21 22:20 雪山看雪 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/zker/p/4297223.html

谷歌新深度学习系统可以促进放射科医生的发展
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 谷歌人工智能研究人员团队在《自然》上发表了一篇新论文,深度学习可以检测出异常胸部 X 光片,其准确度可与专业放射科医生相媲美。 深度学习系统可以帮助放射科医师优先考虑胸部…

【AngularJS】—— 12 独立作用域
独立作用域的作用 为了便于理解,先看一下下面这个例子: <!doctype html> <html ng-app"myApp"><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><script src"…

nginx虚拟目录设置 alias 和 root
nginx貌似没有虚拟目录的说法,因为它本来就是完完全全根据目录来设计并工作的。 如果非要给nginx安上一个虚拟目录的说法,那就只有alias标签比较“像”,干脆来说说alias标签和root标签的区别吧。 最基本的区别:alias指定的目录是…

避免死锁的一些注意事项
1. 避免嵌套锁, 如果每个线程都只占有一个锁, 则可以很大程度上避免死锁。其死锁的情况是, 线程 1 依次获得 A 对象和 B 对象的锁, 然后决定等另一个线程的信号再继续, 从而先释放了 B 对象的的锁。可是线程 2 需要同时…

这是一个好问题:既然机器可以学习,它们能忘掉吗?
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 很多公司都使用机器学习来分析人们的欲望、厌恶或面孔。研究人员提出了一个不同的问题:我们如何让机器忘记学习? 机器学习正在寻找如何在人工智能软件中诱发选择性失忆的方法。目…

python tar.gz格式压缩、解压
压缩 代码 import tarfile import os def tar(fname):t tarfile.open(fname ".tar.gz", "w:gz")for root, dir, files in os.walk(fname):print root, dir, filesfor file in files:fullpath os.path.join(root, file)t.add(fullpath)t.close()if __nam…

bzoj1251: 序列终结者 (splay)
splay可以用于维护序列,比如noi的维修序列,比如这道 发现当时splay没写总结,也没题解 然后重新写splay竟然耗了一个晚上 结果是因为max【0】没有附最小值!!血一样的教训 最后祭出inline大法才过,我的splay真…

模型神器组合,yyds!
作者 | 东哥起飞来源 | Python数据科学最近在kaggle上有一个调参神器非常热门,在top方案中频频出现,它就是OPTUNA。知道很多小伙伴苦恼于漫长的调参时间里,这次结合一些自己的经验,给大家带来一个LGBM模型OPTUNA调参的使用教程&am…

理解http响应头中的Date和Age
Date:Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date: Mon, 04 Jul 2011 05:53:36 GMT。 Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。 比如访…

linux 保留内核中sas驱动的加载导致crash问题
[rootlocalhost ~]# uname -a Linux localhost.localdomain 3.10.0-693.5.2.el7.x86_64 问题描述,在crash的时候,小内核因为分配中断号失败而触发panic,打印如下:(备注:本文大内核就是指正常运行的内核&am…

四层和七层负载均衡的区别
负载均衡设备也常被称为"四到七层交换机",那补充:所谓四层就是基于IP端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。换句换说&…

关于数据库,你可能最想知道的几件事
【CSDN 编者按】随着技术不断更新,数据库的发展可谓全面开花,也吸引了越来越多人的关注,但大家真的都足够了解数据库吗?作者 | 易璜珵 责编 | 侯淼淼出品 | 《新程序员》互联网飞速发展的时代里,数据库、中间件和…

Visual C++ 2012/2013的内存溢出检測工具
在过去,每次编写C/C程序的时候,VLD差点儿是我的标配。有了它,就能够放心地敲代码,随时发现内存溢出。 VLD最高可支持到Visual Studio 2012。不知道以后会不会支持Visual Studio 2013,但反正眼下是不支持的。 相关的讨论…

.NetCore Docker
转载于:https://blog.51cto.com/linhongquan/2047736