数据科学和机器学习面试问题
背景
网上冲浪时看到了美国某机器学习研究者写的文章,他在几个月里面试了许多大公司以及创业公司,所以也记录了很多公司问他的面试问题,他做了一个整理和分享,下面我做简单翻译并整理分享,也是自我学习反省。
问题
-
误差与方差之间的权衡是什么?
-
什么是梯度下降?
-
解释过度和不合适以及如何对抗它们?
-
你如何对抗维度灾难?
-
什么是归一化,我们为什么要使用它,并提供一些常用方法的例子?
-
解释主成分分析(PCA)?
-
为什么ReLU在神经网络中比Sigmoid更好,更经常使用?
-
什么是数据归一化以及我们为什么需要它?
数据归一化是非常重要的预处理步骤,用于重新调整值以适应特定范围,以确保在反向传播期间更好的收敛。
通常,它归结为减去每个数据点的平均值并除以其标准偏差。
如果我们不这样做,那么一些特征(那些具有高幅度)将在成本函数中加权更多(如果更高幅度的特征变化1%,那么这种变化相当大,但对于较小的特征,它是非常微不足道的)。
数据归一化使所有特征均等加权。 -
解释降维,在哪些方面使用降维,以及它的好处?
降维是通过获得一组基本上是重要特征的主要变量来减少所考虑的特征变量的数量的过程。
特征的重要性取决于特征变量对数据的信息表示的贡献程度,并取决于你决定使用哪种技术。
决定使用哪种技术归结为反复试验和偏好。
通常从线性技术开始,当结果表明不合适时,转向非线性技术。
降低数据集降维的好处可能是:(1)减少所需的存储空间
(2)加速计算(例如在机器学习算法中),更少的维度意味着更少的计算,更少的维度可以允许使用大量维度不适合的算法
(3)删除多余的函数,例如以平方米和平方英里存储地形大小没有任何意义(可能数据收集存在缺陷)
(4)将数据维度减少到2D或3D可能允许我们绘制并可视化它,可能观察它的模式会给我们新的想法
(5)太多的特征或太复杂的模型可能导致过度拟合。
-
如何处理数据集中丢失或损坏的数据?
您可以在数据集中找到丢失/损坏的数据,并删除这些行或列,或者决定将其替换为其他值。
在Pandas
中,有两个非常有用的方法:isnull()
和dropna()
,它们可以帮助您查找数据丢失或损坏的数据列并删除这些值。
如果要使用占位符值(例如,0)填充无效值,可以使用fillna()
方法。 -
解释聚类算法?
我写了一篇关于《数据科学家需要知道的五种聚类算法》的很受欢迎的文章,其中有一些很好的可视化解释了这些。 -
您将如何进行探索性数据分析(EDA)?
EDA的目标是在应用预测模型之前从数据中收集一些可视化物象,即获得一些信息。
基本上,要以粗略到精细的方式进行EDA。
我们首先获得一些的整体物象。
查看一些不平衡的类型。
查看每个类型的均值和方差。
查看前几行,看看他们是干什么的。
运行pandas df.info()
以查看哪些功能是连续的,分类的,它们的类型(int,float,string)
。
接下来,删除在分析和预测中无用的不必要的列。
这些可能只是看起来毫无用处的列,其中许多行具有相同的值(即它没有给我们提供太多信息),或者它缺少很多值。
我们还可以使用该列中最常见的值或中位数来填充缺失值。
现在我们可以开始制作一些基本的可视化。
从高级别的东西开始。
对于具有分类且具有少量组的特征,画一些条形图。
最终类别的条形图。
看看最“一般的功能”。
创建一些关于这些单独特征的可视化,以尝试获得一些基本见地。
现在我们可以开始更具体了。
在特征之间创建可视化,一次两个或三个。
幻术如何相互关联?
您还可以执行PCA以查看哪些特征包含最多信息。
将一些特征组合在一起以查看它们之间的关系。
例如,当A = 0
且B = 0
时,类会发生什么?
A = 1
和B = 0
怎么样?
比较不同的特征。
例如,如果特征A可以是“女性”或“男性”,那么我们可以绘制特征A来看他们留在哪个cabin,看看男性和女性是否留在不同的cabin中。
除了条形图,散点图和其他基本图之外,我们还可以进行PDF / CDF
,叠加图等。查看一些统计信息,如分布,p值等。最后是构建ML模型的时候了。
从Naive Bayes
和Linear Regression
等简单的东西开始。
如果您看到那些数据是高度非线性的,请使用多项式回归,决策树或SVM。
可以根据EDA
的重要性选择功能。
如果您有大量数据,则可以使用神经网络。
检查ROC
曲线。精确度,回溯。 -
您如何知道应该使用哪种机器学习模型?
虽然人们应该始终牢记“无免费午餐定理”,但仍有一些一般性的指导方针。
我在这里写了一篇关于如何选择合适的回归模型的文章。
这张备忘单也太棒了! -
为什么我们对图像使用卷积而不仅仅是FC图层?
这个非常有趣,因为这不是公司通常会问的问题。
正如您所料,我从一家专注于计算机视觉的公司那里得到了这个问题。
这个答案有2个部分。
首先,卷积保留,编码并实际使用来自图像的空间信息。
如果我们只使用FC层,我们就没有相对的空间信息。
其次,卷积神经网络(CNN)具有部分内置的平移方差,因为每个卷积核都充当它自己的滤波器/特征检测器。 -
是什么让CNNs翻译不变?
如上所述,每个卷积核都充当它自己的滤波器/特征检测器。
因此,假设您正在进行对象检测,对象在图像中的位置无关紧要,因为无论如何我们将以滑动窗口的方式应用卷积。 -
为什么我们在分类CNN中有最大池?
再次如您所料,这是计算机视觉中的一个角色。
CNN中的最大池化允许您减少计算,因为在池之后您的要素图较小。
由于您正在进行最大程度的激活,因此不会丢失过多的语义信息。
还有一种理论认为,最大池化有助于为CNN提供更多的方差转换。
看看这个来自Andrew Ng的精彩视频,了解max-pooling的好处。 -
为什么分段CNN通常具有编码器 - 解码器样式/结构?
编码器CNN基本上可以被认为是特征提取网络,而解码器使用该信息通过“解码”特征并且放大到原始图像大小来预测图像片段。 -
残留网络有什么意义?
剩余连接所做的主要事情是允许从先前层直接访问特征。
这使得整个网络中的信息传播变得更加容易。
关于此的一篇非常有趣的论文显示了如何使用本地跳过连接为网络提供一种整体多路径结构,为多个路径提供在整个网络中传播的特征。 -
什么是批量标准化以及它为什么有效?
训练深度神经网络很复杂,因为在训练期间因为前一层的参数发生了变化,每层输入的分布也会发生变化。
然后,我们的想法是将每层的输入标准化,使得它们的平均输出激活为零,标准偏差为1。
这是针对每层的每个小批量完成的,即仅计算该小批量的均值和方差,然后进行标准化。
这类似于网络输入的标准化方式。
这有什么用?
我们知道将网络输入规范化有助于它学习。
但网络只是一系列层,其中一层的输出成为下一层的输入。
这意味着我们可以将神经网络中的任何层视为较小的后续网络的第一层。
考虑到作为一系列相互馈送的神经网络,我们在应用激活函数之前规范化一层的输出,然后将其馈送到下一层(子网络)。 -
你会如何处理不平衡的数据集?
我有一篇关于此的文章! -
为什么你会使用许多小卷积内核,比如3x3而不是几个大内核?
这在VGGNet论文中得到了很好的解释。
有两个原因:-
首先,您可以使用几个较小的内核而不是几个较大的内核来获取相同的感知字段并捕获更多的空间上下文,但是使用较小的内核可以使用较少的参数和计算。
-
其次,因为对于较小的内核,您将使用更多的过滤器,您将能够使用更多的激活函数,从而具有更有辨别力的映射功能,由您的CNN学习。
-
你有其他与此相关的项目吗?
-
-
在这里,您将真正了解您的研究与业务之间的联系。
-
您是否有任何您所学到的技能或可能与您的业务或您申请的职位有关的技能?
它不必是100%精确,只是以某种方式相关,这样你就可以证明你可以直接增加很多价值 -
解释你目前的硕士研究?
什么有用?
什么没有?
-
未来发展方向?和上一个问题一样!