2016数据挖掘面试总结

2016年数据挖掘面试总结

1、数据倾斜:MapReduce、hive等

 避免数据倾斜

参数调节:

hive.map.aggr=true

Map 端部分聚合,相当于Combiner

hive.groupby.skewindata=true

有数据倾斜的时候进行负载均衡,当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。

SQL语句调节:如何Join:

关于驱动表的选取,选用join key分布最均匀的表作为驱动表

做好列裁剪和filter操作,以达到两表做join的时候,数据量相对变小的效果。

大小表Join:使用map join让小的维度表(1000条以下的记录条数) 先进内存。在map端完成reduce.

大表Join大表:把空值的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,由于null值关联不上,处理后并不影响最终结果。

count distinct大量相同特殊值

countdistinct时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在最后结果中加1。如果还有其他计算,需要进行group by,可以先将值为空的记录单独处理,再和其他计算结果进行union。

group by维度过小:采用sum() group by的方式来替换count(distinct)完成计算。

特殊情况特殊处理:在业务逻辑优化效果的不大情况下,有些时候是可以将倾斜的数据单独拿出来处理。最后union回去。

 

2、用户画像的分层,如何形成良性闭环:

由微观到宏观,逐层分析。首先我们从微观来看,如何给用户的微观画像进行分级呢?如下图所示。

总原则:基于一级分类上述分类逐级进行细分。

• 第一分类:人口属性、资产特征、营销特性、兴趣爱好、购物爱好、需求特征

• 第二分类...

• 第三分类...

• .......

 

3、随机森林算法参数的优化

生成决策树的个数、分裂属性的个数

randomForest包中的randomForest(formula, data,ntree, nPerm, mtry, proximity, importace)函数:随机森林分类与回归。ntree表示生成决策树的数目(不应设置太小,默认为500);nPerm表示计算importance时的重复次数,数量大于1给出了比较稳定的估计,但不是很有效(目前只实现了回归);mtry表示选择的分裂属性的个数;proximity表示是否生成邻近矩阵,为T表示生成邻近矩阵;importance表示输出分裂属性的重要性。

 

4、C4.5信息增益率怎么推理,决策树的参数选择

控制下面几个参数选择最佳的模型

minsplit控制一个节点最小权重和以便进行分割;minbusket设置了一个叶子节点最小权重和;maxsurrogate表示替代分裂点的数量以便用于评估;maxdepth控制决策树的深度。其中,minsplit/minbusket可以设置为训练集的1/100,这些参数的值可以根据商业问题、领域专家的经验、数据、执行算法需要的合理时间以及决策树的期望规模来设置。

 

5、hbase的原理,以及Zookeeper的作用,如何定位一个cell(单元)

6、聚类:

层次距离选择,通过距离矩阵来聚类

 

7、算法的优化过程:

 

8、小游戏

1)10     5      2      1 四人过桥的时间,一次只能过两人,只有一个手电筒,每次过桥需要用到手电筒,最少的过桥时间

2)5 升    3升两个容量大小的杯子,怎么倒出4升水

3)有       有    有    无    无    无,有表示杯子中有水,无表示杯子中无水;只能动一个杯子的情况下,使有水和无水相间隔

4)1到100已经标记并从小到大排好序的小球,两个人按顺序抽取,一次可以抽取1到5个球,如果让你先抽,什么情况下保证你永远都能抽取到第100号球。

5)九宫格

 

9、数据挖掘的系统架构

 

10、sparkR是不是每台机器上都需要安装并加载包;spark的工作流程,RDD的

Spark优化,actor操作与线程的优化

 

11、用户画像的标签系统多久更新一次

 

12、GBM,梯度下降的条件:必须是 凸函数

13、hashmap的原理

14、二分法查找

15、aabbcddfchgh找出只出现一次的字母

16、一段文件分好词后并按次序放入到一个list中,求出I love China的最短距离,不考虑大小写(使用指针)

17、应用算法的具体业务流程

18、贝叶斯公式、贝叶斯文本分类

19、m行n列的日志,统计列数为6的行数

20、欧式距离与余弦距离的区别

21、组合索引的区别:A和B上建立组合索引,查询AB、A和B 哪个最快、哪个最慢   AB>A>B

22、表连接查询,小表在前的原理,map join与其他join的区别

Mapjoin是一种避免避免数据倾斜的手段

允许在map阶段进行join操作,MapJoin把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了reduce运行的效率也会高很多

在《hivejoin遇到问题》有具体操作

在对多个表join连接操作时,将小表放在join的左边,大表放在Jion的右边,

在执行这样的join连接时小表中的数据会被缓存到内存当中,这样可以有效减少发生内存溢出错误的几率


你可能感兴趣的:(数据挖掘)