前言

在文章《机器学习从业者如何兼顾理论与工程》中,小夕对编程语言的选择进行了小小建议。鉴于有些同学对小夕建议的“主python,辅C++,备用matlab和java”疑问较大,小夕在此详细解释一下,也欢迎大家补充新观点哦。

为什么不是matlab?

有同学问小夕,为什么将matlab作为备用语言而不是主力语言呢?matlab也很好用啊~

其实这句话是没错的。小夕觉得,暂且不论matlab超容易学的傻瓜式语法,如果论快速实现一个机器学习的新算法的话,“matlab+库”应该比“python+库”更加方便,实现效率更高。

而且更加重要的是,以小夕感性的实践,matlab对内存的管理真的是非常非常棒,不愧是基于C实现的,这一点的优势是python和java很难比拟的。因此,在个人的电脑上训练一个深度学习model的话,可能python会由于内存不够而无法继续,而matlab完全可能胜任(以后小夕有时间给大家做个正式的对比实验)。

这也是为什么,学术界的大牛们,还有实验室的老师们,甚至Andrew Ng说的硅谷的程序员们在验证新算法时,似乎都是用matlab。

但是,注意,从头到尾,小夕一直在夸matlab实现新算法时怎么怎么样。但是相信大部分人学习机器学习还是要走向工业界的,哪怕是在学术界,一般也不会是做纯理论的,哪怕是做纯理论的,一般也不会完全不接触dirty的原始数据,或者完整工程,或者别人用其他语言实现的源码。因此,这就是说,如果要用一门语言实现一个完整的工程,那这门语言的工具库必须形成一个完整的开发链。比如原始数据是在互联网上需要自己搜集,那么这门语言:

1、最好有简单易用的爬虫库

2、要有简单易用的dirty数据预处理的库

3、要有高效率的科学计算库

4、如果数据量很大,而数据或模型并行性良好,因此要有简单易用的gpu计算支持

5、做完之后要有简单易用的可视化库

然而,matlab非常擅长第3步,第5步也不错,第4好像也还可以(虽然小夕没用matlab并行计算过),第2有点不方便但是也还可以,但是第1就有点非主流了。应该“得益于”matlab是商业软件,而非开源吧。

如果换成python呢?

第1就不用说了,scrapy应该没有人不知道吧。。。给满分是没有多少疑问的。第2步也不用说了,pandas等库也是耳熟能详的名字。第3步,numpy、scipy、tensorflow(咦?有人以为tensorflow是专门做深度学习的?)等,虽然内存管理、易用程度上会比matlab逊色一些,但是做科学计算的话最少也是第二名吧。第4步,cuda(配合深度学习框架)、openCL的支持不必说了。第5步,与matlab孰优孰劣不多说,有matplotlib等库的支持,就算比matlab差,也不会差很多。

这样的对比应该比较明显啦,可以将matlab看作一个专才,将python看作一个优秀的通才。因此在特定问题上,matlab可能会甩python及其库一截,但是比拼一个完整的工程的话,用matlab的综合代价可能会高很多了。

因此,小夕说,matlab当然要掌握啦,但是只是作为一个备选语言。在你复现一篇很新的论文的时候,恰好这个论文中的算法又难以使用当前已有的框架实现的时候,就是matlab大显身手的时候。

或者你们实验室的服务器突然挂掉了,而你要急着训练一个很吃内存的model,那么丢给matlab,在你的小本本上慢慢跑(其实跑的真的很快)也是可以的啦。

因此python,就是小夕推荐的主力语言,正是因为小夕发现python似乎在机器学习及其周边需求上,几乎总是有非常棒而毋庸置疑的库存在,而且语法本身又没有C/C++/Java的限制多,因此用来实现一个以科学计算(比如机器学习)为核心的完整工程是十分完美的。

为什么要C++?

那么小夕为什么要辅助C++呢?python不是已经那么棒了吗?为什么是C++而不是Java呢?

除了众所周知的”速度“原因之外,小夕觉得还有一个相当重要的原因就是“内存管理”。

python毕竟是一个脚本语言,虽然易用,开发效率高,然而正所谓“越高级的语言越慢、越消耗资源”,虽然python在科学计算上优化很足,这方面速度很快了,但是由于太过智能的语法和自动内存管理而导致内存消耗会比手动管理内存时多很多,这对于工业界产品而言是噩梦般的存在。因此,如果将来并不是奔着“此生只做绝对理论研究”的目标,那么C++就是继python之后第二需要掌握的语言。因此,在这方面,Java的重要度就比C++差一些了。

当然啦,为什么是C++而不是C,相信大家都清楚啦。工业界不仅需要速度与资源,还需要”面向对象“!我们做的是软件!高效的上层软件!

小夕今天特意的搜了一下百度的人工智能相关岗位(机器学习、深度学习、模式识别、自然语言处理等)(虽然百度的道德底线有问题,但是在人工智能技术上,还是不否认其成绩的),发现了相当多的python+C++组合,小夕真想说,【此处已打码】\(//∇//)\~

当然啦,C++也是Google开发人工智能产品的主力语言(道听途说),虽然貌似Google在大力推广Go语言?

哪里有Java了?

当然,也不是所有公司都是python+C++的,比如twitter就是python+java开发产品的,很多中小企业也是python+java的组合(毕竟C++相对来说难学)。

所以不要再纠结太多编程语言的事情啦,反正主python,辅C++,备用matlab和java的建议可以结合自己的情况来~在人工智能行业,编程语言真是最不重要的东西啦~没人会在你的C++代码中纠结“你在传地址时用的是指针(*)还是引用(&)”,但是会纠结“你的这个神经网络为什么要这样初始化呢?”

机器学习从理论到工程的第一步-编程语言篇相关推荐

  1. 机器学习从理论到工程的第二步-开发环境与工具篇

    在<第一步-编程语言篇>中,小夕为大家较为详细的介绍了做机器学习(及其相关应用方向)的编程语言的选择问题,这一篇便是小夕为大家推荐的各个编程语言的开发环境/工具. 习惯性扫盲开篇.鉴于可能 ...

  2. 机器学习从理论到工程的第二步-开发环境与工具篇(下)

    好啦~继续昨天的<第二步--开发环境与工具篇(上)>~ 其实有点尴尬啦,本来想一篇讲完的,结果小夕太啰嗦了,还没有开始讲正文,就写了快2000字了...所以说,这一篇是上一篇的正文... ...

  3. 机器学习实战第一步:特征选择与特征工程「附代码」

    https://www.toutiao.com/a6641904652575048206/ 2019-01-02 22:41:05 特征工程是机器学习的第一步,涉及清理现有数据集.提高信噪比和降低维数 ...

  4. 机器学习相关从业者如何兼顾理论与工程能力

    理论与工程 首先,小夕说一下自己目前对理论与工程的理解吧,这也是小夕当前研究理论和熟练工程时主要的出发点.(仅为个人思考,请勿当成真理 理论注重的是学科中各个知识点的大一统,将各种散乱的算法.现象.技 ...

  5. 机器学习系列-强填EM算法在理论与工程之间的鸿沟(下)

    前言 在上一篇文章<机器学习系列-强填EM算法在理论与工程之间的鸿沟(上)>中,小夕用优(恐)雅(怖)的数学理论来向读者解释了EM算法的工作原理.那么从工程角度出发的EM算法又是怎样的呢? ...

  6. 《机器学习系列-强填EM算法在理论与工程之间的鸿沟(上)》

    小夕曾经问一位做机器学习理论的学姐:"学姐学姐,EM算法是什么呢?" 学姐回答:"EM算法啊,就是解决包含隐变量的参数估计问题." 小夕: 然后小夕去问一位做工 ...

  7. 深度学习“三部曲”重磅资源、python、DL理论、工程实战全覆盖(附免费下载)...

    点击上方"视学算法",星标公众号 重磅干货,第一时间送达 ☞机器学习.深度学习.python全栈开发干货 作者:草yang年华 来源:进击的coder 前言 给大家分享一波pyth ...

  8. 【深度学习】449页pdf,FaceBook称其迈出“重塑AI科学的第一步”

    原文:Advancing AI theory with a first-principles understanding of deep neural networks 作者:FaceBook AI ...

  9. 白话机器学习算法理论+实战之PCA降维

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,比如我之前写过的一篇十大机器学习算法的小总结,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑 ...

最新文章

  1. 错误: (串列)对象不能强制改变成'double'解决办法
  2. sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID...
  3. lucene python_Python下的Lucene,PyLucene
  4. linux 怎么设置静态ip,如何在Linux中设置静态IP地址和配置网络
  5. Python base64编码解码
  6. 985程序员因迟到工资被扣,一怒之下破解钉钉打卡,要不你也试试?
  7. ASP.NET服务器控件刷新后仍旧保持滚动位置
  8. 区块链如何赋能车联网-Higgs Chain
  9. Python Excel到JSON的转换
  10. 验证DG最大性能模式下使用ARCH/LGWR及STANDBY LOG的不同情况
  11. idea翻译成中文_IDEA使用有道翻译插件
  12. 四旋翼无人机原理以及组装过程
  13. 在职攻读教育硕士专业学位有计算机专业吗,在职攻读教育硕士专业怎样?
  14. 五一南京-无丝竹无案牍
  15. Log4j2日志记录框架的使用教程与简单实例
  16. 战地1 - 概念艺术
  17. Android常用控件有哪些?如何使用?
  18. elasticsearch两个启动报错的解决
  19. solaris系统查看文件节点数命令
  20. 中国医学史(二--医药的起源)

热门文章

  1. hihocoder1089 Floyd算法
  2. 转 OFBIZ webservice简介
  3. redis RDB持久化中save和bgsave区别
  4. vector深拷贝与浅拷贝使用总结
  5. 我是如何使用wireshark软件的
  6. 1024对话内核大神谢宝友
  7. rocketmq存储结构_RocketMQ消息存储
  8. SKLEARN模型选择
  9. 图像分类_03分类器及损失:线性分类+ SVM损失+Softmax 分类+交叉熵损失
  10. java内联_JAVA中的内联函数