数据挖掘面试题和职位技能需求

一、面试基础题

1、PCA为什么要中心化

因为要算协方差。

单纯的线性变换只是产生了倍数缩放,无法消除量纲对协方差的影响,而协方差是为了让投影后方差最大。

2、PCA的主成分是什么

在统计学中,主成分分析(PCA)是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。

主成分分析的原理是设法将原来变量重新组合成一组新的相互无关的几个综合变量,同时根据实际需要从中可以取出几个较少的综合变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上处理降维的一种方法。主成分分析是设法将原来众多具有一定相关性(比如P个指标),重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即Va(rF1)越大,表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。如果第一主成分不足以代表原来P个指标的信息,再考虑选取F2即选第二个线性组合,为了有效地反映原来信息,F1已有的信息就不需要再出现再F2中,用数学语言表达就是要求Cov(F1,F2)=0,则称F2为第二主成分,依此类推可以构造出第三、第四,……,第P个主成分。

3、为什么KNN可以避免样本不平衡

KNN只是取了最近的几个样本点做平均而已,离预测数据较远的训练数据对预测结果不会造成影响,但是svm、Bayes和NN每一个训练样本果都会对预测结果产生影响,于是如果样本不平衡的话KNN的效果最好,举个极端一点例子:答案只有A与B,但是训练样本中A的个数占99%,而B只有1%,svm、Bayes和NN训练出来的结果,恐怕预测任何数据给出的答案都是A,但是KNN不会。

4、kmeans初始点的选择

  1. 选择批次距离尽可能远的K个点

首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。

  1. 选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为KMeans算法初始类簇中心点。
    、kmeans++

k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。 1. 从输入的数据点集合中随机选择一个点作为第一个聚类中心 2. 对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x) 3. 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大 4. 重复2和3直到k个聚类中心被选出来 5. 利用这k个初始的聚类中心来运行标准的k-means算法

5、xgboost怎么处理缺失值

xgboost处理缺失值的方法和其他树模型不同,xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。

6、rf与gbdt之间的区别

1)相同点:都是由多棵树组成,最终的结果都是由多棵树一起决定。 2)不同点: a 组成随机森林的树可以分类树也可以是回归树,而GBDT只由回归树组成 b 组成随机森林的树可以并行生成,而GBDT是串行生成 c 随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和 d 随机森林对异常值不敏感,而GBDT对异常值比较敏感 e 随机森林是减少模型的方差,而GBDT是减少模型的偏差 f 随机森林不需要进行特征归一化。而GBDT则需要进行特征归一化

7、lr和svm的区别

  1. svm只由支持向量绝对划分平面,lr是所有样本都参与决策面的更新

  2. svm对异常值不敏感,更稳健

8、为什么gbdt需要归一化

  1. 自身是梯度的过程,归一化加快收敛

  2. 避免给样本加权的时候过度偏向一些范围大的特征的样本

9、gbdt和xgb的差异

1.损失函数是用泰勒展式二项逼近,而不是像gbdt里的就是一阶导数 2.对树的结构进行了正则化约束,防止模型过度复杂,降低了过拟合的可能性 3.节点分裂的方式不同,gbdt是用的gini系数,xgboost是经过优化推导后的gain 引用自:@Xijun LI

10、正负样本失衡问题

  1. 上下采样方法,会影响样本的分布。上采样可以用SMOTE。

  2. 正样本比较少,可以把负样本分成多个,每个和正样本训练一个模型,然后把多个模型ensemble

  3. 公交卡发现小偷的案例(https://blog.csdn.net/u013382288/article/details/79301372),正负样本严重不平衡,那么先聚类,把正常的类拿掉,用剩下可能异常的样本训练模型

11、优化kmeans计算速度

使用kd树或者ball tree 将所有的观测实例构建成一颗kd树,之前每个聚类中心都是需要和每个观测点做依次距离计算,现在这些聚类中心根据kd树只需要计算附近的一个局部区域即可

12、为什么ReLu要好过于tanh和sigmoid function

第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。

第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,参见@Haofeng Li 答案的第三点),从而无法完成深层网络的训练。

第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生

13、梯度提升方法Gradient Boosting

梯度提升算法初看起来不是很好理解,但我们和线性回归加以类比就容易了。回忆一下线性回归是希望找到一组参数使得残差最小化。如果只用一次项来解释二次曲线一定会有大量残差留下来,此时就可以用二次项来继续解释残差,所以可在模型中加入这个二次项。

同样的,梯度提升是先根据初始模型计算伪残差,之后建立一个基学习器来解释伪残差,该基学习器是在梯度方向上减少残差。再将基学习器乘上权重系数(学习速率)和原来的模型进行线性组合形成新的模型。这样反复迭代就可以找到一个使损失函数的期望达到最小的模型。在训练基学习器时可以使用再抽样方法,此时就称之为随机梯度提升算法stochastic gradient boosting。

14、随机梯度下降

  1. target function一般是用估计出的模型计算所有训练数据估计label和真实label的差距之和,随机梯度就是随机取样一些训练数据,替代整个训练集,在其上作target function的梯度下降。

  2. 因为只用少量样本,所以每一次比较快

  3. 比梯度下降更能应付鞍点问题

15、随机森林如何评估特征重要性

衡量变量重要性的方法有两种,Decrease GINI 和 Decrease Accuracy: 1) Decrease GINI: 对于回归问题,直接使用argmax(VarVarLeftVarRight)作为评判标准,即当前节点训练集的方差Var减去左节点的方差VarLeft和右节点的方差VarRight。 2) Decrease Accuracy:对于一棵树Tb(x),我们用OOB样本可以得到测试误差1;然后随机改变OOB样本的第j列:保持其他列不变,对第j列进行随机的上下置换,得到误差2。至此,我们可以用误差1-误差2来刻画变量j的重要性。基本思想就是,如果一个变量j足够重要,那么改变它会极大的增加测试误差;反之,如果改变它测试误差没有增大,则说明该变量不是那么的重要

二、面试基本需求

1、会使用SSIS、KETTLE、Informatica,Tableau等ETL工具一种或者多种;
2、有文本挖掘、爬虫等相关经验,熟练掌握python/PHP等语言,有linux环境开发经验:
3、熟悉常见的机器学习、自然语言处理相关领域的知识:包括句法/语法分析、关键词抽取、情感分析、文本分类聚类、检索、相似度算法等;
4、熟悉Hadoop,Spark,Tensorflow等,能从业务场景中精确识别问题模式并应用相应的模型和算法来解决问题,并有能力建立合理的评价指标;
5、对常见的数据库Mysq1OracleSQLServer0racle等有较深的理解,能熟练操作:
6、热爱技术,喜欢钻研,善于沟通,有团队合作精神。

常见面试题链接
https://cloud.tencent.com/developer/article/1059241

你可能感兴趣的:(数据挖掘面试题和职位技能需求)