薪酬那么高的机器学习岗位,到底是怎么面试人的?

首先这个问题问的很广。作机器学习方向不少,有些公司更偏重于数据挖掘,而有些更倾向于深度学习。同理,相对应的岗位有些偏重理论也有些偏重实践。这些因素叠加形成了机器学习相关的岗位分布广,如数据分析师,算法工程师,机器学习科学家等,很难一律而论。面试

大概从实习生的时候就开始跟着老板招聘面试机器学习方向的候选人,到如今前先后后大概也参与了 20 个左右机器学习求职者的技术面试。其中有在读的研究生(实习生岗位),也有已经工做了多年或者学术背景深厚的名校博士(相对高级的“科学家”岗位)。算法

不谈具体岗位的前提下,我想回答如下几个问题: 1.为何要避免学科性的偏见 2. 如何测试面试者的知识广度 3. 怎样测试面试者的知识深度 4. 为什么须要确认基本的编程和数据分析能力 5. 怎么提升机器学习面试成功率编程

1. 避免学科间的偏见与歧视小程序

机器学习做为一个交叉广度大,各学科融合深的学科,各类背景的面试者都有。我建议必定不要预设立场,不管是数学、统计、物理、计算机,或是其余学科的面试者都有独特的知识储备。好比机器学习其实和统计学习有很大部分是重叠的,甚至和优化(如运筹学)、数学(线代等)也有不少相关的地方。而不一样领域的人对于同一件事情的描述多是类似但不相同的,甚至连叫法都不一样。举个简单的例子,统计学将变量叫作 predictors 而机器学习倾向于将其叫作 feature(特征)。我据说过不少面试官就由于对方不能彻底的使用他能听懂的术语就拒掉了候选人,我以为这个是愚蠢的。机器学习

以咱们团队为例,个人老板是统计学博士和教授(偏计量),而我是纯粹的计算机科学出身。他喜欢用 R 来建模而我只擅长 Python 和 C++。但正是这种差别性让咱们能够更好的合做,他在无监督学习中很喜欢用各类密度分析(density estimation)或者对分布直接进行拟合,而我能够给他介绍不少机器学习方向比较流行的算法,好比 Isolation Forests。同理,Python 和 R 都有各自擅长的领域,好比 Python 作时序分析的难度就远远大于 R,由于 R 有很是成熟的 package。编程语言

所以,咱们不要由于领域不一样,叫法不一样,编程语言不一样,或者模型的解释思路不一样就轻易的否认一个面试者。久而久之,咱们的思路会愈来愈窄,而必定程度的包容能拓展思路。函数

2. 经过广度测试划定面试者的知识面学习

机器学习的项目通常都牵扯数据处理,建模,评估,可视化,和部署上线等一系列流程,咱们但愿面试者对于每一个步骤都有最基本的了解。由于其范围很广,咱们但愿首先在短期内了解一个面试者的知识范围。有不少基本但经典的问题能够用于了解面试者的素质,给出一些例子:测试

  • 数据处理:如何处理缺失数据(missing value)? 各类处理方法有什么利弊?
  • 数据处理:如何将描述变量(categorical variables)转为连续变量(continuous variables)?
    • 如何处理有序变量?
    • 如何处理无序变量?
  • 数据处理:如何进行选择特征选择?如何进行数据压缩?
    • 特征选择:包裹式,过滤式,嵌入式
    • 数据压缩:主成分分析,自编码等
  • 模型解释: 试解释什么是欠拟合与过拟合?如何应对这两种状况?
  • 模型解释: 什么是误差与方差分解(Bias Variance Decomposition)?与欠拟合和过拟合有什么联系?
  • 评估模型通常有什么手段?
    • 分类模型评估方法?
    • 回归问题评估方法?
    • 数据不均衡的评估方法?
  • 深度学习是否比其余学习模型都好?为何?

以如何处理缺失数据为例,可能的回答有:1. 分析缺失比例决定是否移除 2. 用均值,众数,回归代替 3. 用 0 代替等。好比深度学习是否比别的模型好,咱们就期待面试者能说“分状况讨论”,如果能提到“没有免费的午饭定理”更是加分。在这个阶段,咱们不会深刻追问,仅想对面试人的知识范围有一个了解。优化

这类问题的共性就是不管你是在校学生仍是资深科学家都应该有一个基本的水准在,不过没有必要百分之百的回答正确,由于自己不少答案都没有标准答案。大部分时候,这个环节咱们对因而否录用这我的就已经有了答案。若是面试者答错或者不知道其中百分之八十的概念,录取的几率就很低了。

3. 根据岗位和求职者背景进行深刻挖掘

在通过上一阶段之后,咱们已经对求职者的素养有了大概的判断,下一步就须要进行深刻了解,通常根据两点进行追问:

  • 面试者的背景: 若是有与岗位特别相关的工做经历,会深刻询问。若是有高引用了的文章,也会让他讲一下他的研究。
  • 所面试的岗位: 若是没有与岗位特别相关的经历,会根据岗位需求进行询问。

进入这个环节其实就已经没有模板了。假设咱们如今要为保险公司招聘一个机器学习工程师来自动化”骗保检测”,咱们的求职者是一位计算机系刚毕业的硕士生。那咱们可能深刻询问的话题包括:

  • 在只有少许的有标签数据的状况下,如何构建一个反保险欺诈系统?
  • 若是面试者回答先用监督学习来作,那么咱们可能问:
    • 这种状况下数据是不均衡的,你是采用过采样仍是欠采样?如何调整代价函数和阈值?
    • 有些人可能会提到使用 One-class SVM?那么咱们可能会追问一下 SVM 相关的问题,好比什么是最大间隔分类器啊什么是 Kernel,如何选择 Kernel 等。
  • 若是面试者回答用无监督学习,那咱们可能会问:
    • 为何 K-Means 不适合异常值检测?K-Means 和 GMM 是什么关系?是否能够用 FMM 来直接拟合异常值。
    • 如何能够获得无监督学习中的分类规则?

这一类问题的特色是随机应变,通常都是在一个方向上深刻。好比其余答案提到的 L1 和 L2 正则化,咱们可能但愿面试者在白板上画图介绍为何 L1 能够获得稀疏解,以及和嵌入式特征选择有什么联系。这一类问题咱们不期待求职者彻底答对或者讲得清楚无误,咱们同时也想观察其在压力和追问下的心理素质。由于整个过程当中确定会有一些知识盲点,咱们会尽可能避免尴尬的气氛,因此做为求职者没必要过度紧张。同时,经过和面试者一块儿了解他 / 她曾作过的项目,能够看出其对于这个专业的兴趣 — 兴趣是很难演出来的。

在这个环节,若是一个面试者能够有能力进入深刻交谈,甚至提到一些咱们历来没想过的思路,都是加分的表现。

4. 基本的编程能力和数据挖掘能力

机器学习岗位,无论你是统计出身仍是计算机出身,都避不开建模的过程,所以基本的编程能力是必须的。通常对于数学或者统计学出身的面试者,咱们会额外给出一个简单的小程序测试。这种小程序可能简单如将读取数据后并保存为矩阵。这倒不是由于咱们喜欢没事找事,而是由于机器学习太容易成为纸上谈兵,而从业者缺少最基本的编程能力。

类似的,咱们也但愿面试者谈谈从模型中能够获得什么结论。咱们曾把 Kaggle 上泰坦尼克的那个数据集处理过之后,让面试者谈谈幸存率到底和什么有关,如何分析。一样的,咱们不追求完美答案,只是但愿看到求职者能够解释一些简单的模型结果,从中攫取商业价值。

5. 让面试者有所收获 & 如何准备机器学习面试

面试不应是一场单纯的考试,在参加面试的过程当中,也是一个学习过程。抛砖引玉,对于机器学习的岗位面试我有几点小建议:

5.1. 根据岗位,准备一份项目策划书。

这个乍听下来有点虚,但我曾无数次使用这个小技巧获得良好的面试反馈和机会。假设你今天面试的岗位是我提到的保险公司的反诈骗组,那么若是你能够写一个如何使用机器学习进行反诈骗的项目策划书。这个过程对于面试者也是一个练习: a. 阅读论文和新闻收集材料的能力 b. 总结分析的能力 c. 总结的能力。

在策划书中,你能够分析项目需求,提出相关解法,并建议后续计划和列出相关文献。这样的行为不只可让雇主看到你的诚意,并看到你的的领域知识和独立分析问题能力。

在适当的时机(好比开始面试的时候或者谈到岗位职责的时候),你拿出准备好的策划书,开始谈你的思路。这种作法我曾作过几回,效果都很惊艳,由于反被动为主动,从被考察变成了讲解你所了解的知识。做为一个面试官,若是被面试者能作到这个程度,我会在心里对录取他比较有信心。

5.2. 真诚而且实事求是

你们都是理工科出身,行家一出手便知有没有。在这种技术性比较强的学科,彻底没有必要伪装本身了解一个知识点。同理心告诉咱们,大部分人都有知识盲区,咱们不期待完美的回答。当你真的不知道一个问题的答案时候,真诚的但愿对方能讲得更明白或者认可本身不太了解。

若是你伪装本身很了解一个不明白的领域,咱们通常会问的更深刻。你成功的引发了个人注意,那个时候就真的收不了场了。类似的,简历上请真的不要夸大其词的描述本身的经历。我见过不少人只用过 Naive Bayes 就在简历上号称本身是机器学习专家,我如今还记得他们被面试到面红耳赤的样子。在这个浮躁的年代,对于高薪的机器学习岗位,但愿你们都能守住最起码的诚信底线。

5.3. 确保本身对基本的概念有所了解

再一次,保证对基本知识的了解(有基本的广度)是对面试者本身和面试官的尊重。什么程度就算基本了解呢?个人感觉是:

  • 对基本的数据处理方法有所了解
  • 对基本的分类器模型有所了解并有所使用(调包),大概知道什么状况使用什么算法较好
  • 对基本的评估方法有所掌握,知道常见评估方法的优劣势
  • 有基本的编程能力,可以独立的完成简单的数据分析项目
  • 有基本的数据挖掘能力,能够对模型进行调参并概括发现

其中每一条都说来简单,但都是血与泪的过程,请勿操之过急。如何就能保证本身有了足够的基础知识呢?我以为能基本看懂周志华老师《机器学习》的前十章,并相对熟练的使用 Sklearn 中基础的 API 进行建模就能够了。也请勿矫枉过正,若是你面试的岗位不是理论性科学家岗位,不要和数学推导死磕。这也是为何我说写一个项目策划书颇有帮助,在查阅文献和总结的过程当中,你对想要面试的领域有了更加深入的了解,有助于提升信心和知识。

5.4. 享受面试

请不要把技术面试当作一场噩梦,或是一个难关。做为一个冉冉升起的新领域,咱们你们都是这么一路摸爬滚打过来的,至少我本身是很理解这一路的不容易。

由于机器学习领域的人才稀缺,通常而言你的面试官的时间都是很宝贵的,即便你最终没有经过面试,请抓住机会从他们身上有所学习的机会。从个人角度来看,你不只能够借此发现本身知识点上的缺失,也能够听到在特定领域的流行的算法和模型,这些都是从书上很难学到的。若是你为了准备面试还阅读了相关领域的论文和总结,那我想来面试这件事已经远远超过了你是否被录取的意义。

相关文章
相关标签/搜索