Reddit上最近的一个比较火热的讨论是,在工业界工作的机器学习/数据科学工程师如何打造一份漂亮的工作成果履历(portfolio)?
用户_Julia提问:我是一名数据科学工程师,想专注于这个领域好好发展职业生涯。我做了一些小的分析数据集的开源项目,还发表过一些论文。但我的问题更多是关乎博客、研究论文和开源项目,以及如何在工业界建立Data Science/ML的职业生涯。对此,_Julia介绍了自己的情况,进一步描述了问题:
我打算写博客。虽然我也在FB/Twitter发文表达兴趣和意见,但我想把博客作为展示开源实验的空间。在这种情况下,博客是否跟已有内容重复?(例如,Github上的开源代码,带有Readme文件+关于如何重新构建事物和分享学习经验的博文)。
我在研究中心(R&D)实习过,所以也参与了写作和发表一些论文。作为一名工程师,(应用数据科学)论文对我的职业有帮助吗(论文中不包含新颖的ML思想,而是新颖的ML应用方法)?
如果你是经理、招聘人员或面试官,你想从数据科学工程师的简历中看到什么?根据我的经验,有些人希望看到更深入的数据科学知识,其他人则想知道有关如何处理、查询和分析数据集的技能。
最后,欢迎分享好的数据科学工作履历的示范及链接。
这个问题得到了大量用户的关注和讨论。新智元摘选了其中点赞最高的建议,来自Reddit用户Artgor。
打造一份性感的工作履历:GitHub超过10000颗星的项目
Artgor建议,如果对博客感兴趣,这是一大份数据科学博客列表:https://github.com/rushter/data-science-blogs
至于漂亮的履历,Artgor表示自己见过下面这几种:
- 含有jupyter notebooks(或类似方式)的项目,展示你在各个领域的技能,其中最好的一个Github项目,列出了深度学习(TensorFlow, Theano, Caffe, Keras), scikit-learn, Kaggle, 大数据(Spark, Hadoop MapReduce, HDFS), matplotlib, pandas, NumPy, SciPy, Python, AWS 等
- 含有其他人能够用的package/library;
- 有一些端到端的项目
Artgor说的这个“其中最好的一个”,在GitHub上有超过10000颗星:
这个GitHub项目展示了
- 深度学习
-
- tensorflow
- theano
- keras
- caffe
- scikit-learn
- statistical-inference-scipy
- pandas
- matplotlib
- numpy
- python-data
- kaggle-and-business-analyses
- spark
- mapreduce-python
- amazon web services
- command lines
- misc
- notebook-installation
- credits
- contributing
- contact-info
- license
Artgor提供了自己的履历展示,并表示这在他当年找工作的时候帮了大忙,具体可以看这里:https://erlemar.github.io/
简单看,Artgor的履历表将他所做过的机器学习项目来了个大汇总,分类明晰,介绍也很有条理,我们先大致看一下目录,然后具体看几个细节。
- 单独项目
- 分类问题
Ghouls, Goblins, and Ghosts… Boo!
- Otto Group产品分类挑战赛
银行卡激活
…
- 回归问题
贷款预测
Caterpillar Tube定价
…
- 自然语言处理
Python NLP:探索日本动漫Fate/Zero
- 聚类
- 神经网络
- 数据探索和分析
- 推荐系统
浏览上面的目录就能看出,这个人做了不少数据科学/机器学习相关的项目,而且都跟实际应用相关(这对于在工业界工作十分实际)。不仅如此,Artgor在具体介绍时也能直接给出重点,让招聘者和面试官一眼看清,比如在介绍手写数字识别时是这样写的:
这是我自己使用图像识别方法做的一个项目。这是一个网站(也适用于手机),用户可以写一个数字,然后机器学习模型(FNN和CNN)会尝试识别这个输入。模型之后可以使用这些数字进行训练以提高准确性。即时演示版本在这里(给出链接)。代码可以在这里找到(给出链接)。再比如,介绍分类问题的泰坦尼克号项目时,
给出Github nbviewer,
Titanic: Machine Learning from Disaster是Kaggle的一个知识竞赛。很多人都从这个问题开始实践机器学习,我也一样。这是一个二元分类问题:根据泰坦尼克乘客的信息,预测他们是否存活。一般说明和数据可在Kaggle上找到。泰坦尼克号数据集为特征工程提供了有趣的机会。
介绍Otto Group分类竞赛中的银行卡激活项目时,
给出Github nbviewer
银行致力于提供与客户联系的效率。其中一个领域是为现有客户提供新产品(交叉销售)。一个好的方法是,不去向所有客户提供新产品,而是预测那些可能会积极回应的客户,然后将报价发送给那些响应概率高于某个阈值的人。我尝试解决的就是这个问题(给出链接)。
对于jupyter notebooks,Artgor给出的解释是,它们的主要目的是展示作者的想法以及在每个分析阶段发生的事情。当然,在代码和编程方面有更多经验和技巧的人,可以将目标定为写出production ready代码。
用户pegasos1表示自己是位于招聘方的人。pegasos1认为,不是每个人都需要有明确的机器学习背景(许多先驱也没有,因为领域还相当新)。重要的是数学好,在深层次上理解一些基本的ML技术。阅读论文和书籍很重要,但是他认为只有实现了才能真正算理解一个算法。他的建议是创建Github项目,并且写相应的博客文章介绍,实施算法,争取实现干净可理解的代码,重点是学习和展示领域知识。
参加Kaggle竞赛:什么才是让招聘者真正眼前一亮的重点
此外,可能你已经从上面看出来了,Artgor参加了大量Kaggle竞赛,他本人也表示,尝试Kaggle也是一个好主意。虽然Kaggle竞赛是否能够解决现实生活问题仍然值得商榷,但有些情况下,参加竞赛肯定是有用的。
确实,随着Kaggle归到谷歌旗下,有了更多的资源,上面举办的竞赛也越来越贴近实际,业界对Kaggle竞赛的认可也有一定提高。
但是,仍然有人犀利地指出,Kaggle竞赛无法衡量以下几项能力——用户thatguydr表示,Kaggle竞赛无法证明
- 你进行实验的能力
- 你与他人合作的能力
- 你能够提出用其他的方式改善业务的能力
- 实际部署生产系统的能力
- 维护生产系统的能力
- 在一系列限制(如低内存,CPU,带宽或HD)下工作的能力
- 了解为什么模型的某些方面可以解决某些问题以及如何在必要时修改它们的能力
- 跟上最新研究文献的能力
不过,反过来看,正好能看出工业界看重的就是上面这些因素。因此,在构建履历时,突出以上重点,保准没错。
怎样才能不搞砸机器学习面试(小Tips)
以下是机器学习工程师、教师和企业家Christopher Dossman在Medium上写的机器学习面试指南,有一些有用的小贴士:
拿到一个面试机会通常很容易,但是想不搞砸一般都挺难的。
最近, 我收到了许多关于机器学习面试的问题。长久以来,我一直没法很好地回答这些问题,因为从大学开始,我并没有接受过一场标准的面试。所以,我开始接受一些面试的邀请。在经历了几次面试以后,我已经找到了一些常见的模式,这对于大家可能是有用的。其中一些模式是专门面向技术性的职位面试的。
在这趟“发现”之旅中,我发现机器学习面试和其他许多技术领域一样,可以分成三个主要的部分:事实调查、技术知识、代码测试。
实况调查
事实调查面试通常正如其名字所表示的那样,你会问一些关于公司情况的问题,公司的代表也会问你一些问题。我特别想强调的是,这一部分的面试并不会刷掉人,而是让你了解公司,所以不要想太多。这一部分的面试很容易,诚实地告知他们你想要的和你正在寻找的东西是什么,你会做得很好。
技术知识
技术知识面试是关于特定技术和项目的开放式讨论。最常见的方法似乎是对你之前做过的项目的问答,并对用于解决问题的方法进行了质疑。假设你遵循我的学习机器学习的方法(地址:https://medium.com/ai%C2%B3-theory-practice-business/best-method-to-learn-essential-machine-learning-skills-fast-533e30f3023d),这个面试很容易通过。当你经历了几个从零到一的项目,你就可以获得所有你需要的知识来回答面试官会问到的问题。
作为练习,想一想你已经完成的一个项目,尝试回答以下问题:
- 你为什么要选择这个方法来解决问题?
- 你如何处理丢失的数据?
- 你能不能解释你在项目中遇到的问题,你是如何解决它们的?
- 如果再做一遍,你会尝试不同的方法吗?如果是的,为什么?
如果你能回答这些问题,那么恭喜你通过了这部分面试。
我想强调,重要的不仅仅是要有项目,还应该有多样化的项目。我得到的很多反馈意见是,我所有的项目都在技术上令人印象深刻,专注于深度学习系统,但是我对于更传统的机器学习算法还没有什么经验。
小贴士:不要过度在意这一部分的面试,如果你曾经解决过一些问题,你就能获得需要的所有问题。
代码面试
我在别人的注视下一般都没法做一个出色的编码者。不言而喻,在这部分的面试,我做得很糟糕。老实说,这可能是我生命中最尴尬的时刻之一。即使是一个几乎没有从头至尾做完一个项目的人,也很容易就能轻松解决问题,因此您可以为代码面试所代表的独特情况做好准备。
在常见的面试中,面试官会要求你执行一个简单的任务。你要做的是分解问题并制定一个算法,然后用你想要的编程语言实现该算法。如果你有额外的时间,你可以用不同的方法改善或尝试解决问题。
代码这部分是最重要的,要提前做好准备,否则可能会功亏一篑。
原文发布时间为:2017-11-24
本文作者:费欣欣,胡祥杰
本文来自云栖社区合作伙伴新智元,了解相关信息可以关注“AI_era”微信公众号