写点什么

从普通开发进阶为数据科学家,这是一份最好的学习资源清单

  • 2019-06-28
  • 本文字数:5414 字

    阅读完需:约 18 分钟

从普通开发进阶为数据科学家,这是一份最好的学习资源清单

本文《If you’re a developer transitioning into data science, here are your best resources 》最初由 Cecelia Shao 发布于 Kdnuggets 网站,经 Kdnuggets 网站授权由 InfoQ 中文站翻译并分享。


你可能已经从媒体铺天盖地的报道中,了解到数据科学家这个职位有多火。如果你有心的话,就会发现像 Airbnb 和 Uber 这样的科技公司在人才招聘网站上的数据科学家职位一栏下面,统统标着“急聘”字眼。另外,已经有人开始提出这样的疑惑,如果有一天,人人都会写代码了,作为码农,该何去何从?因此很多人萌生了入行或者转行做数据科学家的念头。那么就带来了一个问题,该如何从开发人员成长为数据科学家呢?




如今,似乎每个人都梦想成为数据科学家,从博士生到数据分析师,再到你大学室友,他们都在 LinkedIn 不断地给你发短信,邀请你去“喝杯咖啡”。


也许你已经有了同样的想法,心想:我至少应该去探索一些数据科学的立场,看看数据科学的炒作究竟是关于什么的。也许你看过像 Vicki Boykis 撰写的《Data Science is different now》(《现在数据科学已经不一样了》)这样的文章,文章中说道:


越来越清楚的是,在炒作周期的后期阶段,数据科学正逐渐向工程学靠拢,数据科学家需要的技能越来越不再是可视化和基于统计的,而是更符合传统的计算机科学……。


像单元测试和持续集成这样的概念,很快就成了行话,并成为从事机器学习工程的数据科学家常用的工具集。


或者就像 Tim Hopper 的推文说的那样:



目前尚不清楚的是,如何将软件工程师的经验运用到数据科学的职位上。你可能会遇到的其他一些问题如下:


  • 我应该优先学习什么?

  • 对数据科学家来说,是否存在不同的最佳实践或工具?

  • 我目前掌握的技能是否能够适应数据科学的角色?


本文将提供有关数据科学家角色的背景,并阐述为什么你的背景可能适合数据科学,以及作为开发人员,可以采取哪些切实可行的逐步行动,来提升数据科学的水平。

数据科学家与数据工程师

首先,我们应该区分这两个互补的角色:数据科学家和数据工程师。虽然这两个角色都会处理机器学习模型,但他们与这些模型的交互,以及数据科学家和数据工程师的工作需求和性质,其实都存在很大的差异。


注:专业从事机器学习的数据工程师角色,在职位说明中也可能描述为“软件工程师、机器学习”或“机器学习工程师”。


作为机器学习工作流的一部分,数据科学家将执行所需的统计分析,以确定要使用哪几种机器学习方法,然后开始进行原型设计并构建这些模型。


在建模过程之前与之后,机器学习工程师通常会与数据科学家就以下内容进行合作:


  1. 构建数据管道以将数据馈送给这些模型;

  2. 设计一个工程系统,为这些模型提供服务,以确保模型持续运行的健康状况。


如下图所示,展示了查看这一系列的技能的一种方式:



关于数据科学家和数据工程师之间的区别,在网上有大量的资源,请一定要看看:



(《数据工程师与数据科学家》)


作为免责声明,本文主要讨论数据科学家的角色,并对机器学习方面提出了一些要求(尤其是你正在寻找一家较小公司的职位,你可能需要同时担任这两个职位)。

作为开发人员的优势

对每个人都不利的是,围绕机器学东西的课程,如《Introduction to Data Science in Python》(《Python 数据科学导论》)或 Andrew Ng 的 Coursera 课程这样的机器学习课程,并没有包括软件工程的概念和最佳实践,如单元测试、编写模块化可重用代码、CI/CD 或版本控制。甚至一些最先进的机器学习团队仍然没有将这些实践用于他们的机器学习代码,这就导致了一个令人不安的趋势……


Pete Warden 将这一趋势描述为“机器学习再现性危机”:


当涉及到跟踪变化和从头开始重建模型时,我们仍然处于黑暗时代。这太槽糕了,有时候感觉,时光就像回到了以前,我们在没有源代码控制的情况下进行编码的时候。


虽然你可能没有在数据科学家职位描述中明确这些“软件工程”技能都是哪些,作为你知识背景的一部分,如果掌握好这些技能,当你作为数据科学家进行工作的时候,这些技能将如有神助。此外,如果你在应聘数据科学家的面试中,需要回答这些编程问题时,它们就会派上用场了。


想从另一个角度来了解一些有趣的观点,请阅读 Trey Causey 撰写的文章《Software development skills for data scientists》(《数据科学家必备的软件开发技能》),在这篇文章中,他建议数据科学家应该学会“编写更好的代码,与软件开发人员进行更好的互动,最终为你节省时间,免去麻烦。”

提升数据科学的水平

如果你有拥有良好的软件工程背景基础,这当然是一件好事。但如果你要成为数据科学家的话,那么下一步应该要做什么呢?Josh Will 在 Twitter 上对数据科学家下了半开玩笑的定义,出人意料的准确。


他的这则推文提示了如果你对数据科学家的角色或职业感兴趣,你应该去了解的主题之一:统计学。


在下一节中,我们将介绍以下资源:


  • 获取机器学习专业知识

  • 获取行业知识

  • 机器学习栈中的工具

  • 技能和资格

获取机器学习专门知识

最有效的方法是围绕概率和统计学,构建基于理论的知识组合,以及掌握在 GPU/ 分布式计算上的数据整理或训练模型等方面的应用技能。


构建你要获取的知识框架的一种方法是参照机器学习工作流。



机器学习工作流的简化视图


请参阅 Skymind AI 的详细工作流


这里我们列出了一些有关机器学习的最佳资源。考虑到篇幅所限及阅读时间,我们不可能罗列出详细的清单,我们也没有提到那些非常受欢迎的资源,如 Andrew Ng 的 Coursera 课程或 Kaggle 等。


课程:



教科书:


我们在网上找到了大部分免费的 PDF 文档。



指南手册:



线下聚会:


这些线下聚会主要在美国纽约市举办。



要获得一个很酷的起点,请阅读 Will Wolf 著的《Open-Source Machine Learning Masters》(《开源机器学习大师》),你可以了解如何通过学习特定主体和项目来安排时间,并开展项目以低成本的方式在偏远地区来展示你的专业知识。

获取行业专业知识

如果你想进入某个特定行业,比如医疗保健、金融服务、消费品、零售业等等,那么了解这个行业与数据和机器学习相关的痛点和发展是非常有价值的。


一个专业建议:你可以去浏览垂直特定的人工智能初创公司的官网,看看他们是如何定位自己的价值主张,以及他们打算将机器学习在哪里发挥作用。这将为你提供研究机器学习特定领域的想法,以及展示你工作的项目主题。


我们可以举一个例子:假设我们对医疗保健的工作感兴趣。


  1. 通过 Google 快速搜索“machine learning healthcare”,我在 Healthcareweekly.com 上找到了《Best Healthcare Startups to Watch for in 2019(《2019 年最值得关注的医疗保健初创公司榜单》)。


你还可以在 CrunchbaseAngelList 以“healthcare”作为关键词进行快速搜索。


  1. 让我们以榜单上的一家公司 BenevolentAI 为例。



  1. BenevolentAI 的网站上写道:


我们是一家人工智能公司,具有从早期药物发现到后期临床开发的端到端能力。BenevolentAI 将计算医学和高级人工智能的力量与开放系统和云计算的原理相结合,改变了药物的设计、开发、测试和上市方式。


我们构建了 BenvolentAI 平台,以便更好地了解疾病,并从大量生物医学信息中设计出新的、改进现有的治疗方法。我们相信,我们的技术能够让科学家更快速、更经济地开发药物。


每 30 秒钟就有一篇新的论文发表,但科学家目前只使用了现有知识的一小部分来了解疾病的原因并提出新的治疗方法。我们的平台摄取、“阅读”并将从书面文档、数据库和实验结果中提取的大量信息进行语境化。它能够在这些完全不同的、复杂的数据源中进行无限多的演绎和推理,识别并创建关系、趋势和模式,这些对人类来说,是不可能单独完成的任务。


  1. 你马上就会发现,BenvolentAI 正在使用自然语言处理(NLP),如果他们正在识别疾病和治疗研究之间的关系,他们可能会使用一些知识图谱。

  2. 如果你浏览 BenvolentAI 的招聘页面的话,你会发现他们正在招聘一名高级机器学习研究员。这是一个高级职位,所以它并不是一个完美的例子,但是,让我们看看他们对这一职位要求具备的技能和资格都有哪些:


  • 自然语言处理、知识图谱推理、主动学习和生化建模

  • 结构化和非结构化数据源

  • 贝叶斯模型方法

  • 熟悉机器学习的现代工具



这里给你提供一些下一步该怎么做的步骤:


  • 使用结构化数据

  • 使用非结构化数据

  • 在知识图谱中对关系进行分类(请参阅这个很好的资源

  • 学习贝叶斯概率和建模方法

  • 处理自然语言处理项目(即文本数据)


我们并不建议你向通过搜索找到的公司应聘职位,而是查看它们如何描述客户痛点、公司的价值主张,以及他们在职务说明中列出哪些技能来指导你的研究。

机器学习栈的工具

在 BenvolentAI 高级机器学习研究员的职位描述中,他们要求“熟悉机器学习的现代工具,如 TensorFlow、PyTorch 等等。”


学习这些用于机器学习的现代工具似乎让人望而生畏,因为这个领域总是在变化。要将学习过程分解为可管理的部分,请记住从上面提到的机器学习工作流中锚定你的想法:“什么工具可以帮助我处理工作流的这一部分?”



要了解这个机器学习工作流的每个步骤都有哪些工具,请参阅 Roger Huang 撰写的《Introduction to the Machine Learning Stack》(《机器学习栈导论》),这篇文章涵盖了 DockerComet.mldask-ml


从战术上来说,PythonR 是数据科学家使用的最常见的编程语言,你可能会遇到专为数据科学应用而设计的附加软件包,如 NumPySciPy,以及 natplotlib。这些语言是解释运行的,而不是编译运行,如此一来,数据科学家可以自由地专注于问题,而不必被语言的细微差别分心。为了理解数据结构作为类的实现,投入时间学习面向对象程序设计是值得的。


为了赶上像 TensorFlow、Keras 和 PyTorch 这样的机器学习框架,请务必查看它们的文档,并尝试端到端地实现它们的教程。


不管怎么说,你要确保你正在构建的项目展示了这些用于数据收集和整理、机器学习实验管理和建模的现代工具。


为了给你的项目带来一些灵感,请查看 Edouard Harris 的文章《The cold start problem: how to build your machine learning portfolio》(《冷启动问题:如何构建你的机器学习组合》)。

技能和资格

我们将这部分留到文章最后一节,因为这一节汇总了前几节的大部分信息,但特别针对数据科学面试准备进行了阐述。在数据科学家的面试中,有六个主要话题:


  1. 编码

  2. 结果

  3. SQL

  4. A/B 测试

  5. 机器学习

  6. 概率 (请参阅《Probability versus Statistics》(《概率与统计》)。


你会注意到其中一个主题(结果)与其他主题不同。对于数据科学职位来说,关于技术概念和结果的交流,以及业务指标和影响是至关重要的。


以下是数据科学面试问题的一些有用的汇总:



这些公司可能仍在需求层次上向上攀升。



流行的人工智能需求层次。来源:Monica Rogati


对于一些关于数据科学面试的一些期望,我建议你阅读 Tim Hopper 写的文章《Some Reflections on Being Turned Down for a Lot of Data Science Jobs》(《关于大量数据科学工作被拒的几点思考》)。


感谢阅读本文,希望本文能够帮助你了解数据科学是否你应该考虑的职业,以及如何开始这段旅程!




英文原文:


[https://www.kdnuggets.com/2019/06/developer-transitioning-data-science-best-resources.html


2019-06-28 15:085680
用户头像

发布了 371 篇内容, 共 179.1 次阅读, 收获喜欢 943 次。

关注

评论

发布
暂无评论
发现更多内容

京东丨阿里丨携程面试总结,已成功拿到京东offer

Java架构师迁哥

北大学霸!手抄万字Java数组笔记,2小时吃透,你确定不拿走?

牛哄哄的java大师

Java 后端

前端项目配置ts,axios,router,vuex

Vue js ts vuex VueRouter

网络攻防学习笔记 Day6

穿过生命散发芬芳

5月日更 网络攻防

谈谈测试环境管理与实践

大卡尔

测试环境 工程效能

区块链为法院工作插上科技翅膀

CECBC

法院

宝马、沃尔沃、奇瑞纷纷布局,区块链将颠覆汽车行业?

CECBC

Redis - 哈希表

旺仔大菜包

redis

Nginx基础配置-基础模块配置

梁龙先森

nginx 大前端

全球数字货币加快研发

CECBC

Map在Java 8中增加非常实用哪些函数接口?

xcbeyond

Java java8 5月日更 内容合集

编程规范的意义

顿晓

5月日更 编程规范

玩转直播系列之从 0 到 1 构建简单直播系统(1)

vivo互联网技术

消息推送 RTMP 直播推流

一击必杀!内网渗透——对不出网目标的精准打击

Thrash

安全

第八大洲环游记(三):人间胜境新西兰,AI孤岛or方舟?

脑极体

IDEA 这样设置,好看到爆炸!!!

楼下小黑哥

Java 程序员 IDEA 编程开发

immutability模式

wzh

Java 设计模式 并发 线程安全

架构实战营 - 模块 3- 作业

carl

如有神助!阿里P7大牛把Spring Boot讲解得如此透彻,送你上岸

飞飞JAva

2021,国产数据库人的最好时代

BinTools图尔兹

数据安全 数据库管理 国产数据库

Dubbo 服务分组与多版本

青年IT男

硬核资源!清华博士的Spring Boot中AOP与SpEL笔记,码农:膜拜

牛哄哄的java大师

Java

架构实战营 - 模块 3- 作业

请弄脏我的身体

架构实战营

安全团队和云计算团队之间更好协作的6个技巧

浪潮云

云计算

微前端中,为子应用配备开发环境临时导航菜单,提高开发效率

blueju

JavaScript 大前端 React umi

LeetCode题解:150. 逆波兰表达式求值,栈,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Golang中runtime包的基本使用方式

liuzhen007

Go 语言 5月日更

要不要去创业?

石云升

创业 5月日更

吴凡 ベ莫离: 网友都说MyBatis多表查询太难了,小白:就这?我都学会了

牛哄哄的java大师

数据架构:概念与冷热分离

程序员架构进阶

数据架构 架构设计 28天写作 5月日更 冷热分离

区块链为何会上升国家战略技术?

CECBC

区块链

从普通开发进阶为数据科学家,这是一份最好的学习资源清单_大数据_Cecelia Shao_InfoQ精选文章