机器学习面试题集锦

机器学习面试题集锦

为下一阶段实习工作做准备:

  • 你应当对logistic、SVM、决策树、KNN及各种聚类方法有深刻的理解。能够随手写出这些算法的核心递归步的伪代码以及他们优化的函数表达式和对偶问题形式。
  • 一般来说要么你会写C,而且会用MPI,要么你懂Hadoop,工程上基本都是在这两个平台实现。实在不济你也学个python吧。
  • 机器学习大多数场景是搜索、广告、垃圾过滤、安全、推荐系统等等。对业务有深刻的理解对你做出来的系统的结果影响超过70%。
  • LaTex数学公式
  • UML序列图和流程图
  • 离线写博客
  • 导入导出Markdown文件
  • 丰富的快捷键

比较杂的真实问题

  • c++虚函数概念,底层实现。new和malloc的区别。
  • 特征组合有LDA,PCA方法,如果想自己做线性组合可以怎么做呢?
  • hadoop的全局排序
  • topK的求解
  • c++里边的引用与指针区别,堆区,栈区,静态变量区的相关知识,操作系统则问了我进程同步与通信,最后又来了道动态规划题最长回文子串。
  • 优化算法了解多少(批梯度下降、随机梯度下降、mini-batch梯度下降的差异)
  • 问了RF、GBDT、xgBoost之间的区别
  • 对hash表的理解,有哪些解决冲突的方法
  • hash表在内存中是怎么查找的
  • 2个等长的有序数组,得到中位数;2个链表判断是否有公共节点(链表带环时的处理)
  • 2道编程:给定2个字符串,找到最长的公共子串(写完动态规划问能否改进);二路归并排序。
  • LSTM与GRU的区别
  • K-means,如何用hadoop实现k-means
  • naive bayes和logistic regression的区别
  • LDA的原理和推导
  • 推荐系统的算法中最近邻和矩阵分解各自适用场景

杂乱的大公司面试

百度面试一面

1.字符串移位,给出字符串abc##dfg##gh,实现将所有#移至字符串串头。输出####abcdfggh(个人认为可以用后向移位,减少移位次数)

2.给出一个二维矩阵,从(0,0)出发走到右下角,只能向右或向下走,找到一条路径,是这条路径上的总和最大。(个人认为使用动态规划或深度遍历)

3.给出一颗二叉树,两个叶节点,找到这两个叶节点互连通的一条最短路径。(个人认为主要是找两个叶节点的最近公共祖先)

京东云面试

1.逻辑回归的目标函数和优化方法
答:不多说,目标函数是服从二项分布的似然函数,优化常用的是梯度下降法

2.讲下拟牛顿法
答:对比了下梯度下降法只是泰勒的一阶展开式,而牛顿法是泰勒的二阶展开式,牛顿法主要问题在于海森矩阵求逆是一个很复杂的过程,所有才会有拟牛顿法以及相应的改进算法。

3.讲下随机森林或者GDBT
答:随机森林采用的是bagging的思想,bagging又称为bootstrap aggreagation,通过在训练样本集中进行有放回的采样得到多个采样集,基于每个采样集训练出一个基学习器,再将基学习器结合。随机森林在对决策树进行bagging的基础上,在决策树的训练过程中引入了随机属性选择。传统决策树在选择划分属性的时候是在当前节点属性集合中选择最优属性,而随机森林则是对结点先随机选择包含k个属性的子集,再选择最优属性,k作为一个参数控制了随机性的引入程度。

4.GBDT和随机森林的相同点:
1、都是由多棵树组成
2、最终的结果都是由多棵树一起决定
GBDT和随机森林的不同点:
1、组成随机森林的树可以是分类树,也可以是回归树;而GBDT只由回归树组成
2、组成随机森林的树可以并行生成;而GBDT只能是串行生成
3、对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来
4、随机森林对异常值不敏感,GBDT对异常值非常敏感
5、随机森林对训练集一视同仁,GBDT是基于权值的弱分类器的集成
6、随机森林是通过减少模型方差提高性能,GBDT是通过减少模型偏差提高性能

5.随机森林怎么取最后的结果?
答:对于分类任务,随机森林是多数表决;
对于回归任务,随机森林是简单平均

6.随机森林是怎样避免ID3算法信息增益的缺点的?
答:首先说下信息增益的过程,决策树算法本质上就是要找出每一列的最佳划分以及不同列划分的先后顺序及排布。信息增益的缺点是比较偏向选择取值多的属性。而gini系数每次都是二分,所以跟属性多少没有关系。

7.为什么deep learning 能抑制梯度消失或者爆炸的问题?
答:几个方面:一是激活函数不光是只用sigmoid函数,还有 ReLU函数 二是在参数并不是初始化的时候并不是随机选择的,而是在前面有自编码器做了特征特征器,这样避免了梯度下降法求解陷入局部最优解;三,深度学习一些手段,权值共享,卷积核,pooling等都能抑制梯度消失问题;四,二次代价函数换成交叉熵损失函数或者选用softmax+对数似然代价函数的组合。

拼多多+猫眼+京东云+猎豹移动机器学习面试

拼多多一二面:

  • 基础算法: 给定一棵多叉树,每个节点有一个编号,现在要对节点排序,要求对于每个节点,它的父节点排在它后面,如果一棵树有N个节点,那么肯定有N-1条边。输入的数据形式为:
Map.Entry<int, int> 
//key: 父节点编号,
//value: 子节点编号(也就是边的集合)

猫眼二面:

  • 算法题:数组找前K大的元素,在线写有点紧张,就直接写了快排。应该用快排的思想但不实际排序

京东云二面:

  • 1.讲了下stacking模型以及做模型融合的一些工作
    2.序列模式挖掘抛出两个问题:1.在分布式情况下,如果我想尽可能多的挖掘出多的频繁序列,怎么办?2.在分布式情况下,如果我要求尽可能准确的挖掘序列模式,怎么做?
    答:没在分布式环境中做过,举例子如果FPTree 算法可以并行的建树,如果挖掘更多的话,我们可以随着频繁序列的增长而降低阈值,面试官基本认可,说有一个对应公式,方向应该没问题。
    第二问当时答的不好,面试官说的意思是对各个机器上计算出来的频繁序列零容忍,即只要出现一个项集不是频繁的,则其他机器包含他的序列模式都应该抛弃。
    3.怎样去优化SVM算法模型的?
    答:没弄懂面试官的意思,把SVM讲了一遍。
    其实应该答SMO算法的,SMO算法是支持向量机的快速算法,不断的将原二次规划问题分解为只有两个变量的二次规划子问题求解,直到所有变量满足KTT条件,这样通过启发式的方法得到原二次规划问题的最优解。(欢迎大佬补充KKT条件和凸二次规划的理论知识)

猎豹移动一面:

  • 1.讲下LSTM算法模型
    2.讲下CNN算法模型
    3.现有底层是tensorflow的keras框架,如果现在有一个tensorflow训练好的模型,keras怎么读取
华为优招面试机器学习面经
  • 1.介绍几个简单的机器学习模型(主要思想),贝叶斯,SVM
    2.决策树和adaboost 的区别
    3.介绍你的项目(CNN)?各层次的作用:网络结构?
阿里巴巴
  • 如何想让变量a=100的时候中断,如何写gdb代码
  • map的内部实现原理,为什么选择红黑树,红黑树的由来,与平衡二叉树的区别
  • 拷贝构造函数和重载=符分别在什么情况下被调用,实现有什么区别
  • 虚函数的目的,虚函数和模板类的区别,如何找到虚函数
  • 说一下TreeMap的实现原理?红黑树的性质?红黑树遍历方式有哪些?如果key冲突如何解决?
  • 100亿数字,怎么统计前100大的?
  • 1KW句子算相似度(还是那套分块+hash/建索引)
  • 给定一个1T的单词文件,文件中每一行为一个单词,单词无序且有重复,当前有5台计算机。请问如何统计词频?
  • 每台计算机需要计算200G左右的文件,内存无法存放200G内容,那么如何统计这些文件的词频?
  • 一个大文件A和一个小文件B,里面存的是单词,要求出在文件B中但不在文件A中的单词。然后大文件A是无法直接存到内存中的。
  • 有100W个集合,每个集合中的word是同义词,同义词具有传递性, 比如集合1中有word a, 集合2中也有word a, 则集合1,2中所有词都是同义词,对这100W个集合进行归并,同义词都在一个集合当中。
  • 有几个 G 的文本,每行记录了访问 ip 的 log ,如何快速统计 ip 出现次数最高的 10 个 ip,如果只用 linux 指令又该怎么解决;
  • Linux下的一些指令,$$(进程id),$?(上一条命令退出时状态),怎么查看进程,按照内存大小,CPU占用排序等等。
  • Linux的命令:pwd、ln、which
  • Linux线程通信
  • hash表是怎么实现的?有冲突的时候怎么处理?
  • linux 文件词频统计
  • 介绍一下hash,怎么解决冲突。
  • 你说一下hashmap的原理
  • 内存泄露出现原因。
  • 悲观锁乐观锁
  • 把两个表按id合并怎么搞?
  • 数据库transaction
  • 浅拷贝深拷贝
  • 第二题是两题 sql ,涉及 join,group by,max,min,sum,count 等操作的结合,以及同个题目多种写法。
  • 线程安全是什么意思?新线程什么情况下会影响原有线程?
  • 网络基础TCP三次握手
  • 计算机网络:描述他发一句hello world到我这边显示,中间经历了哪些过程,我从应用层开始一层层往下分析答的,主要说http和tcp,网络层和链路层有些忘,但主要的几个协议和子网划分什么的也答了,面试官比较满意
  • 词向量的推导,混合高斯,linux硬链接,三次握手,linux inode
  • 进程线程的区别
猫眼电影一面

1.基础算法题
有序的数组,其中一个数出现一次,其中的数出现两次,找到这个出现一次的数?
答:很自然想到hashmap或者异或的做法,时间复杂度O(N)。回答的时候觉得有坑,因为有序的条件没用,心想肯定跟二分有关系,果然面试官要求降低复杂度。没思考出来二分的策略,后来在面试官的提醒下明白了,二分的时候跟数组的位置联系起来,既数组肯定是基数个,二分的时候如果mid不成立的话,要找的值一定落在跟左右两边相等元素的那一侧,时间复杂度O(logN)

2.介绍下自己做的项目
之前做过聊天式文本挖掘,主要介绍了针对短文本的特征所做的特征工程
针对项目提问:

2.1.讲下LR模型
答:在线性回归的基础上加了sigmoid函数,所有变成了分类模型,输出可以表示概率。采用似然估计构造目标函数,目标是优化最大似然估计,公式 H ( x ) = ( y l o g f ( x ) + ( 1 y ) l o g ( 1 f ( x ) ) ,一般优化方法采用的是梯度下降法。回答完毕。

2.2.LR模型为什么采用似然估计损失函数
答:因为最小二乘法是假设残差服从正太分布的,而LR在sigmoid 作用后就不会服从正态分布了,所以采用的是最大似然估计。
面试后思考:1.最小二乘法反映的是线性空间上的线性投影的最短距离,在非线性空间上表现不如MLE。(MLE可以看作一种特殊情况下的Bayesian 估计,具体来说,就是在prior 是 diffuse (无知的)情况下,让posterior 分布取得极大值的系数值)

2.如果采用均方差最损失函数的时候,梯度下降求偏导时会有一项导数项,这样会导致梯度在一定阶段会收敛的特别慢,而对数损失函数log正好能和sigmoid的exp抵消掉,会加快收敛速度。

2.3.说下基本主题的LDA模型
答:判别式模型,思想:文档一定概率上从属于某些个主题,主题一定概率上会选中某些相关的词,这样就构造了文档到主题到词的联系,同时可以解决同义词问题,因为同义词可能属于不同主题。算法流程回答的模糊,感觉面试官不太满意。

2.4.说下项目用到的doc2vec怎么产生的?
答:介绍了下word2vec的思想,然后讲传统上通常词向量简单的加权求和来表征一篇文档,而doc2vec训练方式是在word2vec的基础上,加入了段落ID,进行了一层训练,这样好处是保留了词的上下文信息。(ps:解释的不清楚,自己不太满意)

2.5.说下论文中频繁序列挖掘prefixspan 算法?
答:(ps:因为这个算法不做序列挖掘基本不知道,可能只了解apriori算法)对比apriori算法的过程和缺点,讲解该算法的优势,只需要扫描一次序列数据集,目标是挖掘出满足最小支持度的频繁序列,长度为1的前缀开始挖掘序列模式,搜索对应的投影数据库的频繁序列,然后递归的挖掘长度为2的前缀所对应的频繁序列。以此类推,一直递归到对应的投影数据库为空或者对应投影数据库中各项的支持度计数小于阈值为止。整个过程就是前缀不断的增长,产生1,2…N 频繁序列,对应的投影数据库不断缩小直至为空。
优点:PrefixSpan算法由于不用产生候选序列,且投影数据库缩小的很快,内存消耗比较稳定,作频繁序列模式挖掘的时候效果很高。

3.了解深度学习吗?能否讲下CNN的特点?
答:(ps:内心是拒绝的,不怎么了解啊)神经网络模型前向传递,反向调节的特点(BP网络),隐含层我觉得是一个特征做变换的过程,整个过程给人的感觉就是向前是特征拓展阶段,向后是参数调优阶段。回到CNN,特点是局部感受和权值共享,通过卷积核扫描原始数据能够学习到不同的局部的特征,接着通过池化进一步提取特征,这些做的能够让参数数目有量级的减少,同时权值共享是同一层隐含层共享权值,这样也是减少了隐含层的参数,很多卷积核学习的到特征最后传递到下一层网络,到最后一层采用分类器分类(扯不下去了,开始瞎扯)。深度学习解决了以往神经网络深度网络很多问题,梯度消失爆炸问题,几个方面:一是激活函数不光是只用sigmoid函数,还有 ReLU函数 二是在参数并不是初始化的时候并不是随机选择的,而是在前面有自编码器做了特征特征器,这样避免了梯度下降法求解陷入局部最优解;三,深度学习一些手段,权值共享,卷积核,pooling等都能抑制梯度消失问题;四,二次代价函数换成交叉熵损失函数或者选用softmax+对数似然代价函数的组合。

4.说说RBM编码器
答:(额,自己给自己挖坑了,看过早忘了)一种特征探测器,每一层学习的特征向上传递,然后反过来微调。好吧,只能回答这么多了。
面试后补充:RBM包括隐层,可见层和偏置层。可见层和隐含层可以双向传播。标准的RBM,隐含层和可见层都是二进制表示,既激活函数的激活值服从二项分布。每一层的节点没有链接,如果假设所有的节点都只能取0或者1,同时全概率分布p(v,h)满足伯努利分布。几个参数:1.可视层和隐含层的权重矩阵,二是可是节点的偏移量,三是隐层的偏移量。这几个参数决定将N维的样本编码M维的样本。

用途:
1.降维,类似稀疏自动编码器
2.用RBM训练得到的权重举证和偏移量作为BP神经网路的初始值,避免陷入局部极小值
3.可以估计联合分布P(v,h),进而求出p(h|v)。生成式模型
4.直接计算p(h|v)进行分类。判别式模型
一个小时8分钟,面试结束。

唯品会电面–算法工程师
  • 机器学习里面的聚类和分类模型有哪些
  • kmeans的分类过程,用kmeans的数据有什么样的分布,los函数是啥
  • 介绍word2vec模型
  • 感觉我代码能力不强,问了个python 定义class的时候私有变量如何定义,
今日头条大数据一面
  • 自我介绍 项目介绍 kmeans聚类数据量小的时候会出现什么问题
  • 项目用到了spark的哪些组件
  • 是否熟悉Linux
  • list下都有哪些类 arrayList和LinkedList的区别
  • HashMap是怎样散列的,怎么解决冲突
  • http协议 客户端是怎样与服务器建立连接的 响应码
  • 编程题判断括号是否匹配,如”{]}”
滴滴打车

先自我介绍,然后说我问个算法吧,给你1000个数,怎样随机抽取10个数,再问个算法吧,海量数据问题,给定10亿个数,统计出现次数最多的100个数,如果把数换成字符串呢,貌似是这样问的,记不清了,还有给定5个跑道,25匹马,不能计时,确定跑的最快的一匹马,跑的最快的五匹马呢,还有一个问题,具体记不清了,面试官很有耐心,会一步一步加以引导,后来才知道这个面试官是个如假包换的学长,面试完之后还问内推学长这是哪个实验室的学妹,然后后一周HR打电话约31号上海现场面试,现场一轮技术面,一轮总监面,一轮HR面,技术面面试官很年轻,一看就知道是个年轻的技术大牛,自我介绍,介绍项目,手写个算法,剑指offer原题,顺时针打印矩阵,手写比较慢,面试官带了笔记本做自己工作,敲代码呼呼的,感觉都带风,然后问了高并发问题,讲讲CurrentHashMap原理,可是我并不了解,就大概说了下自己想法,然后问我有什么问的,然后等了会HR就来了,刚坐下上海部门总监过来说他等会赶飞机,他先和我简单聊聊,自我介绍,介绍项目,出个场景题,类似大众点评的网站有正常用户访问流量,也有同类竞争商家的spider,怎样区分spider和正常访问,我想了下,他说简单说说就行,我就从两者的访问特点分析了一下,对于这个二分类问题选用哪些特征,然后他希望再从http的角度分析一下,然而并不懂,然后照例问有什么问题,然后详细介绍了一下上海这边主要负责滴滴租车业务,业务框架,说的很仔细,赶飞机的状况下还说了这么多我还以为有戏呢,然后HR小姐姐过来了,自我介绍,自己优缺点,职业规划,曾经遇到的最烦恼的事,最后怎么解决的,然后就一直给我介绍上海滴滴租车业务,数据平台业务,

美团

美团重基础,和搜狗两个风格。不过项目归根到底还是基础,只是搜狗更注重问题的解决方案。任何岗位都要手写一两个代码,不过都不难,一面字符串转浮点数。二面排序二叉树建树,如果是后台开发,手写2+个代码。讲一点项目,开始问基础,一面差点手推SVM,后来讲基本原理,延伸。二面问LR为何是sigmod,理论推导出sigmod,弱分类器组合成强分类器的理论证明,

猜你喜欢

转载自blog.csdn.net/hanss2/article/details/79989295