数据挖掘和机器学习20个面试问题

1.什么是数据标准化,为什么要进行数据标准化?

1.1定义

1.2为什么要做数据归一化?

  • 数据归一化后,损失函数变量前面的系数差距已不大,图像的等高面近似圆形,在梯度下降进行求解时能较快的收敛。
  • 一些机器学习算法需要计算样本之间的距离(如欧氏距离),例如 KNN、K-means 等。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征

1.3为什么要进行数据标准化?

  • 数据标准化是预处理步骤,将数据标准化到一个特定的范围能够在反向传播中保证更好的收敛。一般来说,是将该值将去平均值后再除以标准差。如果不进行数据标准化,有些特征(值很大)将会对损失函数影响更大(就算这个特别大的特征只是改变了1%,但是他对损失函数的影响还是很大,并会使得其他值比较小的特征变得不重要了)。因此数据标准化可以使得每个特征的重要性更加均衡。

1.4区别与联系

相同点:

  • 归一化和标准化本质上都是一种线性变换

区别:

  • 归一化:缩放仅仅跟最大、最小值的差别有关。
  • 标准化:缩放和每个点都有关系,通过方差(variance)体现出来。与归_化对比,标;隹化中所
  • 归一化:输出范围在0-1之间
  • 标准化:输出范围是负无穷到正无穷

1.5什么时候用归一化?什么时候用标准化?

  • 如果对输出结果范围有要求,用归一化
  • 如吴数据较为稳走,不存在扱端的最大最小值,用归一化
  • 如果数据存在异常值和较多矂音,用标准化,可以间接通过中心化避免貝常值和极端值的影响

2.解释什么是降维,在哪里会用到降维,它的好处是什么?

降维是指通过保留一些比较重要的特征,去除一些冗余的特征,减少数据特征的维度。而特征的重要性取决于该特征能够表达多少数据集的信息,也取决于使用什么方法进行降维。而使用哪种降维方法则是通过反复的试验和每种方法在该数据集上的效果。一般情况会先使用线性的降维方法再使用非线性的降维方法,通过结果去判断哪种方法比较合适。而降维的好处是:

(1)节省存储空间;

(2)加速计算速度(比如在机器学习算法中),维度越少,计算量越少,并且能够使用那些不适合于高维度的算法;

(3)去除一些冗余的特征,比如降维后使得数据不会既保存平方米和平方英里的表示地形大小的特征;

(4)将数据维度降到2维或者3维使之能可视化,便于观察和挖掘信息。

(5)特征太多或者太复杂会使得模型过拟合。

3.如何处理缺失值数据?

1.删除含有缺失值的个案 

整例删除(casewise deletion)是剔除含有缺失值的样本。由于很多问卷都可能存在缺失值,这种做法的结果可能导致有效样本量大大减少,无法充分利用已经收集到的数据。因此,只适合关键变量缺失,或者含有无效值或缺失值的样本比重很小的情况。

变量删除(variable deletion)。如果某一变量的无效值和缺失值很多,而且该变量对于所研究的问题不是特别重要,则可以考虑将该变量删除。这种做法减少了供分析用的变量数目,但没有改变样本量。

2.可能值插补缺失值 

(1)估算(estimation)。最简单的办法就是用某个变量的样本均值、中位数或众数代替无效值和缺失值。这种办法简单,但没有充分考虑数据中已有的信息,误差可能较大。另一种办法就是根据调查对象对其他问题的答案,通过变量之间的相关分析或逻辑推论进行估计。例如,某一产品的拥有情况可能与家庭收入有关,可以根据调查对象的家庭收入推算拥有这一产品的可能性。

(2)利用同类均值插补。同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。假设X=(X1,X2…Xp)为信息完全的变量,Y为存在缺失值的变量,那么首先对X或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。如果在以后统计分析中还需以引入的解释变量和Y做分析,那么这种插补方法将在模型中引入自相关,给分析造成障碍。 

(3)极大似然估计(Max Likelihood ,ML)。在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。 

(4)多重插补(Multiple Imputation,MI)。多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。

4.你会如何进行探索性数据分析(EDA)?

EDA的目的是去挖掘数据的一些重要信息。一般情况下会从粗到细的方式进行EDA探索。一开始我们可以去探索一些全局性的信息。观察一些不平衡的数据,计算一下各个类的方差和均值。看一下前几行数据的信息,包含什么特征等信息。使用Pandas中的http://df.info()去了解哪些特征是连续的,离散的,它们的类型(int、float、string)。接下来,删除一些不需要的列,这些列就是那些在分析和预测的过程中没有什么用的。

比如:某些列的值很多都是相同的,或者这些列有很多缺失值。当然你也可以去用一些中位数等去填充这些缺失值。然后我们可以去做一些可视化。对于一些类别特征或者值比较少的可以使用条形图。类标和样本数的条形图。找到一些最一般的特征。对一些特征和类别的关系进行可视化去获得一些基本的信息。然后还可以可视化两个特征或三个特征之间的关系,探索特征之间的联系。

你也可以使用PCA去了解哪些特征更加重要。组合特征去探索他们的关系,比如当A=0,B=0的类别是什么,A=1,B=0呢?比较特征的不同值,比如性别特征有男女两个取值,我们可以看下男和女两种取值的样本类标会不会不一样。

另外,除了条形图、散点图等基本的画图方式外,也可以使用PDF\CDF或者覆盖图等。观察一些统计数据比如数据分布、p值等。这些分析后,最后就可以开始建模了。

一开始可以使用一些比较简单的模型比如贝叶斯模型和逻辑斯谛回归模型。如果你发现你的数据是高度非线性的,你可以使用多项式回归、决策树或者SVM等。特征选择则可以基于这些特征在EDA过程中分析的重要性。如果你的数据量很大的话也可以使用神经网络。然后观察ROC曲线、查全率和查准率。

5.如何选用模型?

https://towardsdatascience.com/selecting-the-best-machine-learning-algorithm-for-your-regression-problem-20c330bad4ef

5.1逻辑回归LR

选择:

快速建模,并且当要建模的关系不是很复杂,并且没有很多数据时,特别有用。

线性回归很容易理解,这对于商业决策非常有价值。

不选择:

对于非线性数据,多项式回归对于设计是非常具有挑战性的,因为必须有一些关于数据结构和特征变量之间的关系的信息。

因此,当涉及到高度复杂的数据时,这些模型不如其他模型好。

5.2神经网络NN

选择:

由于神经网络可以具有许多具有非线性的层(以及参数),因此它们在建模高度复杂的非线性关系方面非常有效。

我们通常不必担心神经网络的数据结构,在学习几乎任何类型的特征变量关系时都是非常灵活的。

研究一直表明,简单地给网络提供更多的训练数据,无论是全新的还是扩充原始数据集,都有利于网络性能。

不选择:

由于这些模型的复杂性,它们不容易解释和理解。

它们可能非常具有挑战性和计算密集的培训,需要仔细的超参数调整和设置学习速率调度。

它们需要大量的数据来实现高性能,并且在“小数据”的情况下通常优于其他ML算法。

5.3随机森林RF

选择:

善于学习复杂、高度非线性的关系。它们通常可以达到很高的性能,优于多项式回归,并且通常与神经网络相媲美。

很容易理解和理解。尽管最终的培训模型可以学习复杂的关系,但是在培训期间构建的决策边界很容易理解,也很实用。

不选择:

由于训练决策树的性质,它们可能容易出现较大的过度拟合。一个完整的决策树模型可能过于复杂,包含不必要的结构。虽然有时可以使用适当的树木修剪和更大的随机森林合奏缓解。

使用较大的随机森林集合来实现更高的性能具有速度较慢和需要更多内存的缺点。

6.解决维度灾难问题:

主成分分析法PCA,线性判别法LDA

奇异值分解简化数据、拉普拉斯特征映射

Lassio缩减系数法(L1)、小波分析法

7. 在图像处理中为什么要使用卷积神经网络而不是全连接网络?

首先,卷积过程是考虑到图像的局部特征,能够更加准确的抽取空间特征。如果使用全连接的话,我们可能会考虑到很多不相关的信息。

其次,CNN有平移不变性,因为权值共享,图像平移了,卷积核还是可以识别出来,但是全连接则做不到。

8. 是什么使得CNN具有平移不变性?

正如上面解释,每个卷积核都是一个特征探测器。所以就像我们在侦查一样东西的时候,不管物体在图像的哪个位置都能识别该物体。因为在卷积过程,我们使用卷积核在整张图片上进行滑动卷积,所以CNN具有平移不变性。

9. 为什么实现分类的CNN中需要进行Max-pooling?

Max-pooling可以将特征维度变小,使得减小计算时间,同时,不会损失太多重要的信息,因为我们是保存最大值,这个最大值可以理解为该窗口下的最重要信息。同时,Max-pooling也对CNN具有平移不变性提供了很多理论支撑,详细可以看吴恩达的benefits of MaxPooling(https://www.coursera.org/learn/convolutional-neural-networks/lecture/hELHk/pooling-layers)。

10. 什么是batch normalization,原理是什么?

Batch Normalization就是在训练过程,每一层输入加一个标准化处理。全连接层之后,激活层之前。

深度神经网络之所以复杂有一个原因就是由于在训练的过程中上一层参数的更新使得每一层的输入一直在改变。所以有个办法就是去标准化每一层的输入。具体归一化的方式如下图,如果只将归一化的结果进行下一层的输入,这样可能会影响到本层学习的特征,因为可能该层学习到的特征分布可能并不是正态分布的,这样强制变成正态分布会有一定影响,所以还需要乘上γ和β,这两个参数是在训练过程学习的,这样可以保留学习到的特征。

神经网络其实就是一系列层组合成的,并且上一层的输出作为下层的输入,这意味着我们可以将神经网络的每一层都看成是以该层作为第一层的小型序列网络。这样我们在使用激活函数之前归一化该层的输出,然后将其作为下一层的输入,这样就可以解决输入一直改变的问题。

11. 为什么卷积核一般都是3*3而不是更大?

第一,相对于用较大的卷积核,使用多个较小的卷积核可以获得相同的感受野和能获得更多的特征信息,同时使用小的卷积核参数更少,计算量更小。

第二:你可以使用更多的激活函数,有更多的非线性,使得在你的CNN模型中的判决函数有更有判决性。

20. 神经网络为什么要用sigmoid函数?为什么要映射到0-1之间?

(1)对于深度神经网络,中间的隐层的输出必须有一个激活函数。否则多个隐层的作用和没有隐层相同。这个激活函数不一定是sigmoid,常见的有sigmoid、tanh、relu等。

(2)对于二分类问题,输出层是sigmoid函数。这是因为sigmoid函数可以把实数域光滑的映射到[0,1]空间。函数值恰好可以解释为属于正类的概率(概率的取值范围是0~1)。另外,sigmoid函数单调递增,连续可导,导数形式非常简单,是一个比较合适的函数

(3)对于多分类问题,输出层就必须是softmax函数了。softmax函数是sigmoid函数的推广

猜你喜欢

转载自blog.csdn.net/qq_19446965/article/details/82085640