热乎的2018百度(深圳)机器学习与数据挖掘工程师的春招实习一面面经

时间:2021-01-14 09:52:19

编号为面试官提问,面试官非常nice,会引导我回答问题,逐渐消除了我的紧张感。

1.简单自我介绍。

项目:推荐系统,健康状态评估,智能可穿戴设备。

竞赛:Kaggle。

科研:论文和专利。(这边问了一下两篇论文是否都是一作)

Note:我说话语速太快,并且有的地方存在抢词,下次一定要等面试官把他的话说完,我再说。

还有我一句话出现了四个“然后”,注意!!!

 

2.那我先从你项目开始问吧。在训练营他们是教你实现推荐系统是吧?

简单地说了一下AI-Lab训练营里做的事情。

 

3.基于协同过滤的推荐算法有两种,有基于用户的,和基于商品的,那你做的时候是基于用户还是基于商品的?

这边我又抢词了!!!

我说我们两个都做了,因为觉得这两个挺相似的。简单介绍了一下两种方法的实现流程。

 

4.那你知道基于用户和基于商品这两种,他们各自的优缺点有哪些吗?

基于用户的复杂度更高,惊喜度高。基于商品的比较固定。(重新整理一下这个问题,这边说的时候要更有逻辑一点)

这边说了一个不好的,我说大型项目可以考虑基于用户的。给自己挖了个坑

 

5.为什么是大型的项目才会考虑基于用户的呢?

因为大型的项目可能有比较多的历史数据,协同过滤需要好而准确的历史数据。(这边回答的不好,要再查查。)

 

6.那商品的数据如果比较准确的话,应该也能推荐地比较准确吧?基于用户的有个特点,是优于基于商品的,你还是没有提到。

我说了基于商品的相似性比较固定,一段时间不会改变,比起基于用户的惊喜度低。

 

7.行,那你刚才说到还实现了基于矩阵分解的推荐算法,具体的模型是非负矩阵分解是吧?

(非负矩阵分解指的就是NMF,我没听清,听成了奇异值分解,以为是SVD……)

介绍了基于矩阵分解的推荐算法的实现流程。说了按照原理实现的时候,发现很慢,所以用了sklearn里面的NMF。

 

8.哦是一开始,你是用的SVD,奇异值分解这个吗?

是的。(这里人家本来想说“然后……”,我又抢词了,然后人家就说你说你说!结果我也说不出来什么……尬)

这边我说了目标函数和更新规则。(对SVD的理解要加上,其实我们用的矩阵分解就是FunkSVD)

 

9.你清楚NMF这个的原理吗?

我看了sklearn里面的介绍,说了一下我做的时候的疑问,NMF对原来为0的数据也进行了处理。这边感觉自己在答非所问。

 

10.那它NMF和SVD的区别在哪里?

又抢话。这边我说NMF处理0值,SVD没有处理0值。

 

11.那你知道NMF为什么得到的是非负值值?输入的是非负值,然后积消减(没听清)了之后也是非负值。

这个我不是特别清楚。

 

12. OK,那讲一下你第二个项目吧,你用了PCA是吧,PCA主要就是把特征降维吗?

对。说了一下这个项目在干什么。从时序数据集里面提取和构造特征。说数据很多,有的是电气数据,有相当于独热编码的东西,

所以使用PCA进行了降维。(这里拜托自己以后说的稍微专业一点,以后可以加一些数字描述,比如样本有多少个,特征有多少维等等)

 

13. 是这样的,那为什么常用PCA来降维呢?PCA降维和SVD降维的区别在哪里?

我听成了LDA……PCA和LDA降维的区别,PCA是无监督降维,LDA是有监督降维。这边我还说了一些为什么我们用了PCA来降维。

 

14. 不对,我问的是PCA和SVD降维的区别,不是LDA降维。

然后我说我不是特别了解SVD……

他说就是奇异值分解。

我说我觉得他们俩感觉挺像的……尴尬的沉默……

(这边我其实应该说一下PCA的原理和流程,SVD的我虽然不了解,但是可以说下原理)

 

15.emmm……行,然后降维之后就用SVM吗?

我说不是,因为数据是无标签的,所以先用聚类打标签。

 

16.是只有三类吗?你聚类之后是聚成了几类呀?

我没听清,然后重新问了一下,然后解释了不是,我们这个是4类,这边其实可以类比人的少年,青年,壮年和老年的变化过程。

 

17.在预测健康状态之后是怎么做呢?就是你聚类之后已经有了标注数据。

我说把数据变成有标签之后,建立了分类模型,然后当新的数据来了之后,就可以知道是处在哪一类了。

 

18.数据的那些特征就是PCA降维之后的吗?训练的时候的数据特征是哪些?

是的。说了一下我们构造特征的过程,然后PCA降维,最后放入模型开始训练。

 

19.降维之后,你们觉得特征是可解释的吗?

这边其实是在挖坑了,但是机智如我,PCA降维之后的特征肯定是解释性差的呀。

 

20.行,那线性回归的里面,你的参数调整用了什么方法?

交叉验证的方法,说了一下线性回归里面要调的参数就是正则化系数和学习率。

用网格搜索,确定了比较好的学习率和正则化项。

这边自己还可以说得更清楚,吴恩达讲过的。

 

21.SVM算法原理你了解吗?你讲一下SVM的算法原理吧

大致都讲出来了,但是讲的有点混乱,以后问题总结的时候,尽量总结成口语化的东西。

 

22.那SVM有什么优缺点?跟决策树啊,逻辑回归啊,哪些方面要好?

这边其实重点是让讲SVM的优点有哪些!!! 我说了SVM复杂度比较低。

然后说没有决策树解释性强。SVM对大规模的训练样本不是很好做。

 

23.对……为什么呢?

SVM是通过二次规划来求支持向量,涉及到矩阵的阶数,存储和计算都会耗费大量内存,运算时间也比较长。

还有就是传统的SVM不能解决多分类问题,通过一对多,一对一的组合模式变成多分类,如果是决策树就可以直接处理多分类。

(这里为什么我要说这些!!!毕竟我们最后用的是SVM啊!!!)

 

24.谈一下你的第三个项目吧,你是用了三种模型,然后把他们融合在一起是吧?你三个模型都讲一下吧!

Bagging的原理和流程。

RF的原理和流程。Bagging的扩展,选特征的时候随机。

ET的原理和流程。RF的扩展。谈了一下和RF的区别。

 

25.那为什么选的这三种模型呢?选择模型的时候是怎么考虑的,还用过其他模型吗?

这边的模型选型确实有问题!我说这是我第一个项目,在模型选型方面就是通过试,然后选择了最优的。

 

26.那如果是你现在考虑的话,你会怎么选择模型呢,怎么调参呢,有没有考虑过这个问题?

然后我从特征构造开始,说了这个项目可以改进的地方。

 

27.神经网络,深度学习有接触吗?

说了这里只看过理论基础,但是没有在实际项目中用过。

 

28.模型融合的时候,你是怎么做的?

stacking和线性加权都试了,最后选择的是投票的方法。

 

29.模型的权重怎么定的呢?

根据模型在验证集上表现的好坏来定的。

 

30.编程语言方面,你用的比较多的就是C语言是吧?

我说是,但是平时做机器学习,用的是Python。

 

31.我问一下你C语言的一些基础问题。static 全局变量和普通的全局变量有什么区别?

static的值不能改变,能共享?普通的全局变量的值可以改变。(忘了……)

 

32. 静态的局部变量和普通的局部变量的区别?

普通的局部变量可以再赋值,静态的不可以。

 

33.静态函数和普通函数有什么区别?

静态函数不能被源文件的其他文件调用,普通是可以的。

 

34.内存中的拷贝?static在内存中是只有一次拷贝还是多次?

我不太清楚,觉得只有一次……

 

35.做一道数据结构题吧,然后把题目的网址发到了我的邮箱里面,然后在那个网址上编程就可以了。

 

数据结构题:

判断链表是否存在环型链表问题

说明:判断一个链表是否存在环,例如下面这个链表就存在环,n1-->n2-->n3-->n4-->n5-->n2,环的开始结点是n5

 

我用Java做的。

刚开始是将节点保存在hash表中,如果检测到节点已经在hash表中,则表示存在环。

 

36.那还有没有其他方法?这种方法浪费了存储空间,比较暴力,想想有没有其他方法?遍历的时候,如果有两个指针的话,能不能解决这个问题。

在他的引导下,答出了快慢指针的算法。

 

37.你如果能来实习的话,你的实习时间是?优先考虑能够尽快过来!

 

38.有啥问题要问我?

对我的评价:总体来看还行。有些模型了解的不够深入,模型选型方面想得比较简单,和其他的模型的区别,了解的还不够

编程方面还需要多做些题目。到时候多找些题目来做一下。二面的话会有电话给你。

 

知识图谱部门的介绍:介绍了他们目前做的项目:

1.文章生成项目。从网上抓取文章数据,根据模板和模型,生成文章,发布在其他地方。

2.事件存储。事件发现,拿到事件,串成脉络,变成列表,到百度搜索上去。

知识图谱中的实体,实体和实体的关系。事件中包含的明星,公司,机构,串到一起。

3.评论抓取,挖掘啊,把公司的评论入库,然后对应到一些应用中去。有个项目是“明星印象”,就是抓取网民对明星的评价。

涉及很多自然语言处理的方面。那就这样吧,后面有消息,会给你打电话。

 

自己还欠缺的地方:

(紧急)简历上的所有项目要重构一遍,把能想到的所有问题,涉及到的所有算法都去理一遍。尤其要想为什么这么做?

(紧急)一旦涉及到算法,就要想这个算法的原理,调参,优缺点,以及和其他算法的对比。

(重要)编程语言和数据结构的基础知识,要多多练习,SQL也要复习,毕竟简历上写了……

(重要)推荐系统了解的东西太基础了,还不够,需要查漏补缺,让自己尽量专业一点。

(比较重要)开始着手深度学习方面的项目,去实现一个算法,了解这方面的内容。