破解 40 道机器学习面试问题
机器学习 (ML)代表着我们世界的未来。未来几年,几乎所有产品都将包含 ML 组件。预计 ML 市场规模将从 2020 年的 73 亿美元增长到 2024 年的 306 亿美元。整个行业对 ML 技能的需求普遍存在。
机器学习面试是一个严格的过程,面试官不仅要评估应聘者对基本概念的了解,还要评估他们对机器学习系统、实际应用和特定产品需求的理解。
如果你正在寻找机器学习领域的职业发展机会,那么了解面试要求至关重要。为了帮助你做好准备,我收集了 40 个最常见的机器学习面试问题。我们将从一些基础知识开始,然后再讨论一些高级问题。
今天我们将讨论:
机器学习面试概述
机器学习面试问题是成为数据科学家、机器学习工程师或数据工程师不可或缺的一部分。不同公司对机器学习工程师的职位描述可能有所不同。你可能会看到机器学习工程师、数据科学家、人工智能工程师等等。
招聘机器学习职位的公司会进行面试,以评估个人在各个领域的能力。机器学习面试问题通常分为以下四类。
- 算法和机器学习理论:如何比较算法以及如何准确测量算法
- 编程技能:通常是 Python 或特定领域语言
- 对机器学习的兴趣:行业趋势以及您对未来机器学习组件的愿景
- 行业或产品特定问题:如何将一般的机器学习知识应用到特定产品中
机器学习面试题现在主要侧重于系统设计。在机器学习系统设计面试部分,考生需要回答一些开放式的机器学习问题,并构建一个端到端的机器学习系统。常见的例子包括推荐系统、视觉理解系统和搜索排名系统。
要了解有关如何解决这些问题的更多信息,请参阅我们的文章《机器学习面试问题的剖析》
公司具体流程
在我们讨论机器学习面试的 40 个热门问题之前,让我们先来看看顶级公司在面试重点上有何不同。
Google 机器学习面试
Google ML 面试,通常称为机器学习工程师面试,强调算法、机器学习和 Python 方面的技能。
一些常见问题包括梯度下降、正则化/标准化方法和嵌入。
面试流程比较通用,不会针对某个特定的团队或项目。面试通过后,他们会根据你的技能水平将你分配到合适的团队。
亚马逊机器学习面试
亚马逊 ML 面试,即机器学习工程师面试,主要关注电子商务 ML 工具、云计算和 AI 推荐系统。
Amazon ML 工程师需要构建 ML 系统并使用深度学习模型。数据科学家则负责弥合技术与业务之间数据驱动的鸿沟。研究科学家拥有更高的教育水平,致力于改进 ASR、NLU 和 TTS 功能。
ML 面试的技术部分重点关注 ML 模型、偏差-方差权衡和过度拟合。
Facebook 机器学习面试
Facebook 机器学习面试包含通用算法问题、机器学习设计和系统设计。你需要学习新闻推送排名算法和本地搜索排名。Facebook 寻找的是了解端到端机器学习系统组件(包括部署)的工程师。
你可能会遇到的一些常见面试职位是研究科学家、数据科学面试官或机器学习工程师。与亚马逊一样,这些职位在侧重点和对通才知识的要求上略有不同。
Twitter 机器学习面试
Twitter 的数据科学家角色包括数据科学家和研究科学家角色,每个角色都针对不同的团队量身定制。
面试的技术部分考察你对机器学习理论(包括 SQL 和 Python)的应用和直觉。Twitter 需要你具备统计学、实验模型、产品直觉和系统设计方面的知识。
初学者问题 (10)
现在,让我们深入探讨机器学习面试中最常见的 40 个问题。这些问题分为初级、中级、高级和产品相关的问题。
1. 偏差和方差之间的权衡是什么?
偏差(模型拟合数据的程度)是指由于 ML 算法中的不准确或过于简单的假设而导致的错误,从而导致过度拟合。
方差(模型根据输入的变化量)是指由于 ML 算法的复杂性而产生的错误,它会对训练数据的高水平变化和过度拟合产生敏感性。
换句话说,简单模型稳定(方差低),但偏差较大。复杂模型容易过拟合,但能表达模型的真实性(偏差低)。最佳的误差降低需要在偏差和方差之间进行权衡,以避免高方差和高偏差。
2. 解释监督机器学习和无监督机器学习之间的区别。
监督学习需要训练标记数据。换句话说,监督学习使用基本事实,这意味着我们拥有关于输出和样本的现有知识。其目标是学习一个函数,该函数能够近似地描述输入和输出之间的关系。
另一方面,无监督学习不使用标记输出。其目标是推断数据集中的自然结构。
3.监督学习和非监督学习最常见的算法是什么?
4.解释KNN和k-means聚类之间的区别。
主要区别在于KNN 需要标记点(分类算法,监督学习),而k-means 不需要(聚类算法,无监督学习)。
要使用 K 最近邻,您需要使用已标记的数据,并将其归类为未标记的点。K 均值聚类会采用未标记的点,并学习如何使用点间距离的平均值对其进行分组。
5. 什么是贝叶斯定理?我们为什么要使用它?
贝叶斯定理是指在已知其他概率的情况下,如何求出某个概率。换句话说,它提供的是已知事件的后验概率。该定理是计算条件概率的原理性方法。
在机器学习中,贝叶斯定理用于概率框架中,该框架将模型拟合到训练数据集并用于构建分类预测建模问题(即朴素贝叶斯、贝叶斯最优分类器)。
6.什么是朴素贝叶斯分类器?我们为什么要使用它们?
朴素贝叶斯分类器是一
组分类算法。这些分类器是一类具有共同原则的算法。朴素贝叶斯分类器假设一个特征的出现或缺失不会影响另一个特征的存在或缺失。
换句话说,我们称之为“朴素”,因为它假设所有数据集特征都同等重要且独立。
朴素贝叶斯分类器用于分类。当独立性假设成立时,它们易于实现,并且比其他复杂的预测器产生更好的结果。它们用于垃圾邮件过滤、文本分析和推荐系统。
7. 解释 I 型错误和 II 型错误之间的区别。
I 类错误是假阳性(声称某事并未发生但实际上并未发生),II 类错误是假阴性(声称某事并未发生但实际上已发生)。
8. 判别模型和生成模型有什么区别?
判别模型学习不同类别数据之间的区别。生成模型学习数据的类别。判别模型通常在分类任务上表现更佳。
9. 什么是参数模型?请举例说明。
参数模型的参数数量有限。您只需知道模型的参数即可进行数据预测。常见的例子有:线性支持向量机 (SVM)、线性回归和逻辑回归。
非参数模型具有无限数量的参数,从而提供灵活性。对于数据预测,您需要模型的参数和观测数据的状态。常见示例如下:K 最近邻、决策树和主题模型。
10. 解释数组和链表之间的区别。
数组是对象的有序集合。由于整个数组存储在连续的内存块中,因此假定每个元素的大小相同。数组的大小在声明时指定,之后无法更改。
数组的搜索选项是线性搜索和二进制搜索(如果已排序)。
链表是一系列带有指针的对象。不同的元素存储在不同的内存位置,并且可以根据需要添加或删除数据项。
链表的唯一搜索选项是线性。
其他初学者问题可能包括:
- 模型性能和准确率哪个更重要?为什么?
- F1 分数是多少?如何使用?
- 什么是维度灾难?
- 我们什么时候应该使用分类而不是回归?
- 解释一下深度学习。它与其他技术有何不同?
- 解释可能性和概率之间的区别。
中级问题(15)
这些中级问题采用了上述 ML 的基本理论,并以更严格的方式应用它们。
1. 对于时间序列数据集,您会选择哪种交叉验证技术?
时间序列并非随机分布,而是按时间顺序排列。您可以使用类似前向链接的方法,以便基于过去的数据进行建模,然后再考虑未来的数据。例如:
- 折叠 1:训练 [1],测试 [2]
- 第 2 折叠:训练 [1 2],测试 [3]
- 折叠 3 :训练 [1 2 3],测试 [4]
- 折叠 4:训练 [1 2 3 4],测试 [5]
- 第 5 折叠:训练 [1 2 3 4 5],测试 [6]
2. 如何根据训练集大小选择分类器?
对于较小的训练集,高偏差、低方差的模型效果更佳,因为它不太可能过拟合。例如朴素贝叶斯。
对于大型训练集,低偏差、高方差的模型更佳,因为它能够表达更复杂的关系。例如逻辑回归。
3.解释ROC曲线和AUC。
ROC 曲线是分类模型在所有阈值下性能的图形表示。它有两个阈值:真阳性率和假阳性率。
AUC(ROC 曲线下面积)简单来说就是 ROC 曲线下的面积。AUC 测量 ROC 曲线下方从 (0,0) 到 (1,1) 的二维面积。它用作评估二分类模型的性能指标。
4.解释无监督学习的LDA。
潜在狄利克雷分配(LDA)是一种常用的主题建模方法。它是一种生成模型,将文档表示为主题的组合,每个主题都有自己的概率分布。
LDA 旨在将高维空间的特征投影到低维空间。这有助于避免维数灾难。
5. 如何确保模型不会过度拟合?
我们可以使用三种方法来防止过度拟合:
- 使用交叉验证技术(如 k 折交叉验证)
- 保持模型简单(即采用较少的变量)以减少方差
- 使用正则化技术(如 LASSO)来惩罚可能导致过度拟合的模型参数
6. 在 SQL 中,主键和外键是如何关联的?
SQL 是 ML 中最流行的数据格式之一,因此您需要展示您操作 SQL 数据库的能力。
外键允许您在相应表的主键上匹配和连接表。
如果您遇到这个问题,请回答基本概念,然后解释如何设置 SQL 表并查询它们。
7. 您会使用什么评估方法来衡量 ML 模型的有效性?
首先,你需要将数据集拆分为训练集和测试集。你也可以使用交叉验证技术来分割数据集。然后,你需要选择并实施性能指标。例如,你可以使用混淆矩阵、F1 分数和准确率。
你需要解释如何根据不同的参数测量模型的细微差别。优秀的面试官会更进一步地回答这些问题。
8. 解释如何处理数据集中丢失或损坏的数据。
您需要识别查找的数据并删除行/列,或用其他值替换它们。
Pandas提供了一些实用的方法来实现这一点:isnull()
和dropna()
。这些方法可以识别并删除损坏的数据。 该fillna()
方法可用于用占位符填充无效值。
9. 解释如何开发数据管道。
数据管道使我们能够采用数据科学模型并进行自动化或扩展。常见的数据管道工具是 Apache Airflow,它们通常使用 Google Cloud、Azure 和 AWS 进行托管。
对于这样的问题,您需要解释所需的步骤并讨论构建数据管道的实际经验。
对于 Google Cloud 主机,基本步骤如下:
- 登录 Google 云端平台
- 创建计算实例
- 从 GitHub 拉取教程内容
- 使用 AirFlow 概览管道
- 使用 Docker 设置虚拟主机
- 开发 Docker 容器
- 打开 Airflow UI 并运行 ML 管道
- 运行已部署的 Web 应用
10. 如何解决模型中的高方差?
如果模型方差低、偏差高,我们会使用 bagging 算法,该算法通过随机抽样将数据集划分为子集。我们利用这些样本,通过单一学习算法生成一组模型。
此外,我们可以使用正则化技术,其中较高的模型系数受到惩罚以降低整体复杂性。
11. 什么是超参数?它们与模型参数有何不同?
模型参数是模型内部的变量。参数的值是根据训练数据估计出来的。
超参数是模型外部的变量,其值无法从数据中估计,通常用于估计模型参数。
12.你正在处理一个数据集。你如何选择重要的变量?
- 在选择重要变量之前删除相关变量
- 使用随机森林和绘制变量重要性图表
- 使用套索回归
- 使用线性回归根据 p 值选择变量
- 使用前向选择、逐步选择和后向选择
13. 如何选择用于数据集的算法?
选择机器学习算法取决于所涉及的数据类型。选择算法和构建模型时,业务需求是必需的,因此在回答这个问题时,请解释你需要更多信息。
例如,如果你的数据以线性方式组织,那么线性回归将是一个不错的算法。或者,如果数据由非线性交互组成,那么 bagging 或 boosting 算法是最佳选择。或者,如果你处理的是图像,那么神经网络将是最佳选择。
5 分钟内了解数据科学十大 ML 算法
14.使用神经网络的优点和缺点是什么?
15.决策树中分裂的默认方法是什么?
默认方法是基尼系数,它衡量特定节点的不纯度。本质上,它计算特定特征被错误分类的概率。当元素由单个类链接时,我们称之为“纯”。
您也可以使用随机森林,但最好使用基尼系数,因为它不需要大量计算并且不涉及对数函数。
其他中级问题可能包括:
- 什么是 Box-Cox 变换?
- 供水问题
- 解释决策树的优点和缺点。
- 使用反向传播技术时梯度爆炸问题是什么?
- 什么是混淆矩阵?为什么需要它?
高级问题 (10)
这些高级问题会将你的知识运用到具体的机器学习组件中,并在基础知识的基础上进行扩展,从而思考实际应用。这些技能通常需要编程,而不仅仅是理论。
1. 给定一个数据集,其中缺失值分布在中位数的1个标准差范围内。有多少百分比的数据不受影响?
数据分布在中位数附近,因此我们可以假设我们采用的是正态分布。这意味着大约68%的数据位于平均值的 1 个标准差范围内。因此,大约32%的数据不受影响。
2. 有人告诉你,你的回归模型存在多重共线性。该如何验证这一点并建立一个更好的模型?
你应该创建一个相关矩阵来识别并移除相关性高于 75% 的变量。请记住,我们这里的阈值是主观的。
您还可以计算方差膨胀因子 (VIF)来检查是否存在多重共线性。VIF 值大于或等于 4 表示不存在多重共线性。VIF 值小于或等于 10 则表示存在严重的多重共线性问题。
您不能直接删除变量,因此您应该使用惩罚回归模型或在相关变量中添加随机噪声,但这种方法不太理想。
以高层次的思维在机器学习面试中脱颖而出。
本互动课程将帮助你培养机器学习系统设计技能,并解答大型科技公司面试中常见的一些问题。课程结束后,你将能够在机器学习面试中脱颖而出,并以你对系统的高层次思考能力脱颖而出。
3.为什么XGBoost比SVM表现更好?
XGBoos 是一种使用多棵树的集成方法。这意味着它会随着重复而不断改进。
SVM 是一种线性分离器。因此,如果我们的数据不是线性可分的,SVM 需要一个核函数来将数据调整到可以分离的状态。这会限制我们的性能,因为对于每个给定的数据集,并没有一个完美的核函数。
4. 你构建了一个包含 10,000 棵树的随机森林模型。训练误差为 0.00,但验证误差为 34.23。请解释一下哪里出了问题。
你的模型可能过度拟合了。训练误差为 0.00 表示分类器模仿了训练数据的模式。这意味着这些模式不适用于我们未见过的数据,从而返回更高的误差。
当使用随机森林时,如果我们使用大量的树就会发生这种情况。
5. 解释构建 ML 模型的各个阶段。
这很大程度上取决于你手头的模型,所以你可以提出一些澄清问题。但一般来说,流程如下:
- 了解商业模式和最终目标
- 收集数据
- 进行数据清理
- 基本探索性数据分析
- 使用机器学习算法开发模型
- 使用未知数据集检查准确性
6. 下面的混淆矩阵的召回率、特异度和精确度是多少?
- TP / True Positive:病例为阳性,并且预测为阳性
- TN / 真阴性:病例为阴性,并且预测为阴性
- FN/假阴性:病例为阳性,但预测为阴性
- FP/假阳性:病例为阴性,但预测为阳性
- 召回率 = 20%
- 特异性=30%
- 准确率 = 22%
解释:
召回率 = TP / (TP + FN) = 10/50 = 0.2 = 20%
特异性= TN /(TN + FP)= 15/50 = 0.3 = 30%
精度 = TP/(TP + FP)= 10 / 45 = 0.2 = 22%
7. 对于 NLP,使用编码器-解码器模型的主要目的是什么?
我们使用编码器-解码器模型根据输入序列生成输出序列。
编码器-解码器模型如此强大的原因在于,解码器使用编码器的最终状态作为其初始状态。这使得解码器能够访问编码器从输入序列中提取的信息。
8. 对于使用 TensorFlow 进行深度学习,哪个值需要作为评估的输入EstimatorSpec
?
损失度量是必需的。在使用 TensorFlow 执行模型时,我们使用该EstimatorSpec
对象来组织训练、评估和预测。
该EstimatorSpec
对象使用一个必需参数进行初始化,该参数称为模式 (mode)。模式可以采用以下三个值之一:
tf.estimator.ModeKeys.TRAIN
tf.estimator.ModeKeys.EVAL
tf.estimator.ModeKeys.PREDICT
初始化所需的关键字参数EstimatorSpec
将根据模式而有所不同。
9. 使用 scikit-learn 时,如果特征值差异很大,我们是否需要对其进行缩放?
是的。大多数机器学习算法使用欧氏距离作为度量两个数据点之间距离的指标。如果取值范围相差很大,对不同特征进行相同的改变,得到的结果也会有很大差异。
10. 你的数据集有 50 个变量,但其中 8 个变量的缺失值高于 30%。你该如何解决这个问题?
您可以采取三种常规方法:
- 直接删除它们(不太理想)
- 为缺失值分配一个唯一类别,以查看是否存在产生此问题的趋势
- 检查目标变量的分布。如果发现规律,则保留缺失值,将其分配到新类别,并删除其他值。
其他高级问题可能包括:
- 您必须根据 R²、调整后的 R² 和容差来评估回归模型。您的标准是什么?
- 对于 k-means 或 kNN,为什么我们使用欧几里得距离而不是曼哈顿距离?
- 解释普通软边缘SVM和具有线性核的SVM之间的区别。
产品相关问题 (5)
公司希望看到你能够将机器学习概念应用到他们的实际产品和团队中。你可能会被问到关于公司基于机器学习的产品的问题,甚至会被要求自己设计这些产品。
1. 您将如何为我们的用户实现推荐系统?
许多类似的机器学习面试题都涉及如何将模型应用于组织的具体问题。为了更好地回答这个问题,你需要提前研究一下这家公司。了解一下收入驱动因素和用户群。
重要提示:用这些问题来展示你的系统设计技能!你需要勾勒出一个包含需求、指标、训练数据生成和排名的解决方案。
Grokking the Machine Learning Interview使用 Netflix 的推荐系统详细讨论了这个问题。
建立推荐系统的一般步骤如下:
- 通过提问来设置问题
- 了解规模和延迟要求
- 定义在线和离线测试的指标
- 讨论系统架构(数据如何流动)
- 讨论训练数据生成
- 概述特征工程(涉及哪些参与者)
- 讨论模型训练和算法
- 建议部署后如何扩展和改进(即您可以预测的问题)
2. 您认为我们业务中最有价值的数据是什么?
这会考察你对业务/行业的了解。它还会考察你如何将数据与业务成果关联起来,并将其应用于特定公司的需求。你需要研究一个组织的商业模式。在开始之前,务必提出问题,进一步澄清问题。
一些一般性的答案可能是:
- 机器学习团队理解的高质量数据有助于扩展规模并做出正确的预测
- 告诉我们客户需求的数据对于所有业务决策都至关重要
- 更好的数据管理可以增加他们的年收入
- 对公司最有价值的数据类型是客户数据、IT 数据和内部财务数据
3. 您将如何构建广告预测系统的广告选择流程?
广告选择组件的主要目标是缩小与给定查询相关的广告范围。在基于搜索的系统中,广告选择组件负责根据用户和查询上下文从广告数据库中检索最相关的广告。
在基于 feed 的系统中,广告选择组件将根据用户兴趣而不是搜索词来选择前 k 个相关广告。
以下是这个问题的通用解决方案。假设我们使用基于漏斗的方法进行建模。将广告选择流程构建为以下三个阶段是合理的:
- 第一阶段:根据选择标准,针对给定查询和用户上下文快速选择广告
- 第二阶段:根据简单快速的算法对这些选定的广告进行排名,以修剪广告。
- 阶段 3:将机器学习模型应用于修剪后的广告,以选出最优秀的广告。
4.基于 feed 的系统的架构组件有哪些?
再次强调,这个问题很大程度上取决于具体组织。首先,你需要询问一些关于系统的问题,以确保满足其所有需求。你可以使用假设性的说法,以防万一出现不准确的情况。
我将使用 Twitter 的 feed 系统进行解释,以便您了解如何解决此类问题。内容包括:
- 推文选择:用户的推文池被转发到排名组件
- 训练数据生成:正面和负面的训练示例
- Ranker:用于预测参与概率
5. 你对 GPT-3 有什么看法?你认为我们可以如何使用它?
这个问题衡量你对行业的投入以及你对如何应用新技术的愿景。GPT-3 是一种新的语言生成模型,可以生成类似人类的文本。
关于 GPT-3 的观点有很多,不妨看看它是如何被用于展示下一代批判性思维的。不妨看看OpenAI 列出的 CPT-3 的 20 大用途。
一些一般性的答案可能是:
- 改进聊天机器人和客户服务自动化
- 使用 NLP 改进搜索引擎
- 职业培训和持续学习演示
- 改进 JSX 代码
- 简化 UI/UX 设计
其他问题可能包括:
- 为我们公司设计一个广告预测系统。
- 搜索排名的指标是什么?
- 您如何看待我们当前的数据处理?
- 描述你在机器学习方面的研究经历。
- 用 SQL 编写查询来测量在瞬间与新闻推送中被浏览的广告数量。
- 您认为量子计算将如何影响该组织的机器学习?
- 我们当前的哪些产品可以从 ML 组件中受益?
下一步要学什么
恭喜!你已经了解了机器学习面试中最常见的 40 个问题。为了巩固你的知识,并熟练掌握系统设计、Python 和所有机器学习工具,你还有很多东西需要学习。
请务必查看我在每个部分末尾提供的附加问题。
想要进一步练习,请查看 Educative 的课程《深入机器学习面试》。你将学习如何从零开始设计系统,并培养思考机器学习系统的高水平能力。这是提升你的机器学习技能,并在竞争中脱颖而出的理想平台。
学习愉快!
其他对 ML 工程师有用的教育课程包括: