当你在谷歌上搜索“机器学习面试”时,很难找到能让你全面了解机器学习面试中会出现哪些问题的文章。在本文中,我们将为大家全面总结,在面试中会遇到的4 类机器学习问题。除了篱笆教育导师/面试官的经验,我们还访谈了很多数据科学家和机器学习工程师,更全面的获取了相关的信息。
本文中的 4 种机器学习问题几乎涵盖了所有情况,无论你是在小公司或 FAANG面试数据科学家(算法驱动)职位还是机器学习工程师职位,这些问题都会是你面试中最主要的4类问题。另外,为了方便大家更好的理解解题思路,我同时也提供了一些问题示例,希望能够降低大家理解的门槛。以下是 4 种类型的问题:
- 机器学习基础
- 机器学习代码
- 机器学习实际应用
- 基于个人项目的机器学习问题
机器学习基础
无论是phone interview还是onsite interview,都一定会问到一些基础的机器学习知识,来快速评估候选人对这方面知识的掌握。而这些概念性问题可能涵盖开发一个机器学习模型的任何步骤,例如处理数据、选择模型、处理训练模型的细节和结果的评估。
不过,在面试过程中,这些类型的问题通常不会占满整个面试过程,毕竟这些知识只要大家在面试前突击过,其实都能顺利在面试中答出来,面试官也无法通过这些问题区分出最佳的candidate。这些问题可能会在面试开始或结束时与其他类型的机器学习问题一起被问到。
如何回答机器学习基础问题
回答这类问题的关键是要简洁有条理。这是我建议的答案大纲:
- 用 2 到 3 句话给出简明的定义。
- 举一两个例子让面试官相信你既有理论知识又有经验。
- 如有必要,提供一些常见的问题解决方案。
下面是一个面试例子:
面试官:“什么是overfit,你如何处理overfit?”
面试者:(直截了当的定义)“当模型的学习能力太高或数据量太小时,就会发生过度拟合。该模型最终会把数据中的噪声也拟合进来。因此,该模型在未观察到的数据集上表现不佳。”
面试者:(举个例子)“例如,当我们有一个回归模型并且数据点的数量少于特征的数量时,我们会遇到过拟合问题。”
面试者:(解决方案)“有几种方法可以解决过度拟合问题。一种方法是使用regulization来缩小学习到的参数。L2 regulization可以防止参数值过于极端。而 L1 regulization可以帮助去除不重要的特征。另一种方法是使用更简单的模型来拟合数据。此外,我们还可以增加要被训练的数据量。”
如何准备机器学习基础问题
有三个主要步骤:复习基础知识、收集问题和整理这些问题。
复习基础知识
最好的学习方式是上一些视频课程或者看书,但最重要的还是自己思考和总结。我们可以尝试向没有技术背景的朋友解释这些概念,然后就能判断出自己是否真的掌握了这些知识。以下是学习机器学习基础知识的一些资源:
收集问题
除了谷歌搜索“机器学习面试题”之外,还有几个地方可以找到面试问题:
整理问题
拿到问题清单后,下一步就是整理问题。一个MECE的方式是,按照机器学习工作流程组织问题,并且这还能帮助我们在面试过程中串联问题并给出更全面的答案。下面是一些以这种方式组织的最常见的问题。
- 数据处理
- 如何处理异常值?
- 如何处理缺失值?
- 如何处理不平衡的数据集?
- 特征工程
- 模型
- 简单介绍下随机森林、SVM、神经网络。
- 线性回归与树模型的优缺点是什么?
- 线性回归的假设是什么?
- 模型细节
- 什么是过度拟合以及如何处理它?
- 与 L2 正则化相比,什么时候使用 L1 正则化?
- 什么是hyperparameters以及如何调整?”
- 模型评估
- 列出分类和回归的3个评估指标。
- 什么是precision和recall?
- ROC 曲线和precision-recall曲线有什么区别?
机器学习代码
第二类题是机器学习代码题。通常,你需要在面试中使用任何一种你习惯的语言来从0到1撰写机器学习算法,可能是在白板上,也可能是在代码编辑工具上。通过这种方式,不仅能评估出我们对算法的熟悉程度,还能评估出我们是否具备在短时间内编写优质代码的能力。
不过由于面试时间有限,所以通常这类型的题不会考察太过复杂的,一些最常考的机器学习模型可能是:linear regression、logistic regression、K-Nearest Neighbors、Decision Tree、K-means Clustering
如何回答机器学习代码问题
想要条理清晰的回答清楚这类问题,我们建议可以走以下几个步骤:
- 向面试官简要解释该算法的工作原理。
- 在撰写代码时,注意main function和helper function的结合。前者执行主线任务,比如处理数据并返回结果,后者处理一些零碎的任务,比如初始化参数或计算梯度。
- 一步步向面试官解释代码。可以选择在编写代码时解释,也可以在完成大部分编码后进行解释。
- 但最重要的,是保证代码的准确性和可读性。
如何准备机器学习编码问题
虽然代码问题中常考的只有5个模型,但我们不可能针对这5个模型背下来全部的代码,这样准备面试不仅花费大量时间而且效果可能很差。因此,更重要的其实是理解算法的核心逻辑,并配合代码撰写练习,才能让我们在面试中游刃有余。
熟悉算法
在写代码之前,必须清楚地了解算法步骤。这里,再次强推Andrew Ng老师的
机器学习课程来复习算法。
实践
强烈建议大家在
Jupyter notebook上使用Python编写代码。
- 第一次实施时,可以将所有内容都融合成一个函数,这个时候可以先不考虑代码的可读性。
- 尽量在不使用任何packages(例如 NumPy、SciPy 和 scikit-learn)的情况下获得有效的解决方案。
- 根据算法步骤将代码分解为函数。
- 最后很重要的但往往被很多人忽略的是,问问自己是否清楚目前这个代码的空间和时间复杂度。这一点非常重要,因为有关复杂度的问题经常是面试中的follow-up问题。