如何准备机器学习工程师的面试 ?

本题已加入知乎圆桌 »「机器学习 · 学以致用」,更多「机器学习」相关话题讨论欢迎关注。我之前面试一些公司的机器学习或者数据挖掘工程师的职位。感觉自己准备的不够充分。想了解下一般会问哪些问题,考察哪些方面的东西。 相关问题:如果你是面试官,你怎么去判断一个面试者的深度学习水平? - 知乎
关注者
9,641
被浏览
559,439

46 个回答

收录于编辑推荐 ·
机器学习方面的面试主要分成三个部分: 1. 算法和理论基础 2. 工程实现能力与编码水平 3. 业务理解和思考深度

1. 理论方面,我推荐最经典的一本书《统计学习方法》,这书可能不是最全的,但是讲得最精髓,薄薄一本,适合面试前突击准备。 我认为一些要点是: 统计学习的核心步骤:模型、策略、算法,你应当对logistic、SVM、决策树、KNN及各种聚类方法有深刻的理解。能够随手写出这些算法的核心递归步的伪代码以及他们优化的函数表达式和对偶问题形式。 非统计学习我不太懂,做过复杂网络,但是这个比较深,面试可能很难考到。 数学知识方面,你应当深刻理解矩阵的各种变换,尤其是特征值相关的知识。 算法方面:你应当深刻理解常用的优化方法:梯度下降、牛顿法、各种随机搜索算法(基因、蚁群等等),深刻理解的意思是你要知道梯度下降是用平面来逼近局部,牛顿法是用曲面逼近局部等等。

2. 工程实现能力与编码水平 机器学习从工程实现一般来讲都是某种数据结构上的搜索问题。 你应当深刻理解在1中列出的各种算法对应应该采用的数据结构和对应的搜索方法。比如KNN对应的KD树、如何给图结构设计数据结构?如何将算法map-red化等等。 一般来说要么你会写C,而且会用MPI,要么你懂Hadoop,工程上基本都是在这两个平台实现。实在不济你也学个python吧。

3. 非常令人失望地告诉你尽管机器学习主要会考察1和2 但是实际工作中,算法的先进性对真正业务结果的影响,大概不到30%。当然算法必须要足够快,离线算法最好能在4小时内完成,实时算法我没搞过,要求大概更高。 机器学习大多数场景是搜索、广告、垃圾过滤、安全、推荐系统等等。对业务有深刻的理解对你做出来的系统的结果影响超过70%。这里你没做过实际的项目,是完全不可能有任何体会的,我做过一个推荐系统,没有什么算法上的高大上的改进,主要是业务逻辑的创新,直接就提高了很明显的一个CTR(具体数目不太方便透露,总之很明显就是了)。如果你做过实际的项目,一定要主动说出来,主动让面试官知道,这才是最大最大的加分项目。 最后举个例子,阿里内部机器学习挑战赛,无数碾压答主10000倍的大神参赛。最后冠军没有用任何高大上的算法而是基于对数据和业务的深刻理解和极其细致的特征调优利用非常基本的一个算法夺冠。所以啥都不如真正的实操撸几个生产项目啊。
我面试过5-6家互联网公司的数据挖掘和分析、机器学习相关职位的工程师。被问到下面一些问题。

SVM的原理,SVM里面的核
K-means,如何用hadoop实现k-means
naive bayes和logistic regression的区别
LDA的原理和推导
做广告点击率预测,用哪些数据什么算法
推荐系统的算法中最近邻和矩阵分解各自适用场景
用户流失率预测怎么做(游戏公司的数据挖掘都喜欢问这个)
一个游戏的设计过程中该收集什么数据
如何从登陆日志中挖掘尽可能多的信息

这些问题我回答的情况,分几种。一种是在面试官的提示下,算是勉强完成了答案。一种是在面试官的提示下,答了一点但是答得不够好。一种是面试官不提示也没有反馈,我回答了但是我不知道回答得怎样。

我非常后悔的一点是我现在才想起来总结。有一个题是游戏玩家流失率预测,我被问过两次。但是每次我都说是个分类问题。最近我突然想起来去网上查了下,有两个点,数据不平衡问题和时间序列分析。我网上查到是一个大学教授和人人游戏合作的课题。我然后查了下这个老师的publication。没发现相关的论文。可能公司不让发表吧。

这些问题的特点是很基础很简单,因为实际中很少用复杂的算法,复杂的算法不好控制,而且理论要求高。另一个特点是注重考查实际工程能力,我经常被问到自己实现了哪些算法。还有的问题很契合实际。

我觉得如果现在再给我准备的机会。我会准备下面几点。
首先是计算机基础知识和算法,这些都是会正常考察的。有些公司考的少,有些公司正常考察。
针对机器学习这部分,需要理论扎实,还需要自己动手实现代码。另外hadoop,mpi,最近比较火的spark,应该都是加分项。另一个是接触下实际的数据分析系统。我在学校里面看的论文,都是讲算法的多,讲应用系统的少。这个可以靠之前的实习,也可以看些比较实用的论文。


PS 我是题主,自问自答下。
PS2 我面试的都是国内互联网公司和游戏公司。