机器学习算法岗面试与提问总结
一.写在前面
一个完整的机器学习工程师的面试过程主要有以下这些环节:自我介绍、项目介绍、算法推导和解释、数据结构与算法题(写代码)。
关于自我介绍,主要就是简单介绍下自己的教育背景,在校期间的研究方向和所做的项目以及在项目中所充当的角色等等,为之后的面试做个铺垫,让面试官从中捕捉点来问。
项目介绍是最为重要的,这也是体现你综合实力的地方,对项目背景、项目实现的方案,项目所实现的东西都要了如指掌,做机器学习的,必然需要准备一到两个重点的机器学习项目,可以是比赛,也可以是实验室项目,关键是项目中间的技术细节都要了如指掌,比如你用了树模型,就得知道所有树模型相关的推导和原理,决不能含糊,一旦你说不太清楚,面试官就会对项目的真实性存疑。参加比赛应该是没有实验室项目的同学最佳的积累经验的途径,比较好的比赛平台有Kaggle、天池大数据、datacastle等
接下来就是机器学习算法原理和推导,这也是要重点去准备的,在面试前得达到,给你一张白纸,你可以把推导的每一步写的清清楚楚的,推导的话面试常考逻辑回归和SVM的推导,关于原理面试官常会问你几个树模型之间的对比等等等,其他的算法比如LR、SVM、EM、Adaboost、PageRank、 FFM、决策树,随机森林, GBDT , XGBoost 、推荐算法、聚类、CNN、RNN、LSTM、Word2Vec等等,以及他们的适用场景,再如一些机器学习的理论,非平衡问题、过拟合问题,交叉验证问题,模型选择问题,模型融合问题。
最后就是写代码了,很多非计算机出身的大都会栽在这个地方,代码写得少,训练不到位,就会导致当场思路不清晰,不知从哪写起,但目前市面上已经有很多专门为这块总结的一些书籍,推荐使用《剑指offer》、《王道程序员求职宝典》等等,有时间的话再刷一下leetcode。排序算法、查找算法、二叉树遍历这些最基本的一定要很顺溜的写下来,其他的就看自己去拓展了。
二.问题总结
1.SVM
(1)简单介绍SVM(详细原理)
(2)SVM的推导,解释原问题和对偶问题,SVM原问题和对偶问题的关系,KKT限制条件,KKT条件用哪些,完整描述;软间隔问题,解释支持向量、核函数(哪个地方引入、画图解释高维映射,高斯核可以升到多少维,如何选择核函数),引入拉格朗日的优化方法的原因,最大的特点,损失函数解释。
(3)SVM与LR最大区别,LR和SVM对于outlier的敏感程度分析
(4)为什么要把原问题转换为对偶问题?因为原问题是凸二次规划问题,转换为对偶问题更加高效。为什么求解对偶问题更加高效?因为只用求解alpha系数,而alpha系数只有支持向量才非0,其他全部为0
(5)如何解决多分类问题、可以做回归吗,怎么做?
(6)机器学习有很多关于核函数的说法,核函数的定义和作用是什么?核函数和映射没有关系,核函数就是内积。核函数只是用来计算映射到高维空间之后的内积的一种简便方法。核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。
2.树模型
(1)rf , gbdt 的区别; gbdt , xgboost 的区别(烂大街的问题最好从底层原理去分析回答)
(2)介绍决策树
https://blog.csdn.net/zuolixiangfisher/article/details/89357557
(3)决策树算法中缺失值怎么处理?
https://blog.csdn.net/u012328159/article/details/79413610
(4)决策树处理连续值的方法? (二分法切分点)
https://blog.csdn.net/u012328159/article/details/79396893
(5)解释下随机森林和gbdt的区别。gbdt的boosting体现在哪里。解释下随机森林节点的分裂策略,以及它和gbdt做分类有什么区别?哪个效果更好些?为什么?哪个更容易过拟合?为什么? 随机森林的损失函数,和lr的优缺点对比, adaboost和随机森林的比较,为了防止随机森林过拟合可以怎么做
(6)SVM与随机森林比较
(a)不需要调节过多的参数,因为随机森林只需要调节树的数量,而且树的数量一般是越多越好,而其他机器学习算法,比如SVM,有非常多超参数需要调整,如选择最合适的核函数,正则惩罚等。
(b)分类较为简单、直接。随机森林和支持向量机都是非参数模型(复杂度随着训练模型样本的增加而增大)。相较于一般线性模型,就计算消耗来看,训练非参数模型因此更为耗时耗力。分类树越多,需要更耗时来构建随机森林模型。同样,我们训练出来的支持向量机有很多支持向量,最坏情况为,我们训练集有多少实例,就有多少支持向量。虽然,我们可以使用多类支持向量机,但传统多类分类问题的执行一般是one-vs-all(所谓one-vs-all 就是将binary分类的方法应用到多类分类中。比如我想分成K类,那么就将其中一类作为positive),因此我们还是需要为每个类训练一个支持向量机。相反,决策树与随机森林则可以毫无压力解决多类问题。
(c)比较容易入手实践。随机森林在训练模型上要更为简单。你很容易可以得到一个又好且具鲁棒性的模型。随机森林模型的复杂度与训练样本和树成正比。支持向量机则需要我们在调参方面做些工作,除此之外,计算成本会随着类增加呈线性增长。
(d)小数据上,SVM优异,而随机森林对数据需求较大。就经验来说,我更愿意认为支持向量机在存在较少极值的小数据集上具有优势。随机森林则需要更多数据但一般可以得到非常好的且具有鲁棒性的模型。
(7)改变随机森林的训练样本数据量,是否会影响到随机森林学习到的模型的复杂度
默认参数下模型复杂度是:O(MNlog(N)) , 其中 M 是树的数目, N 是样本数。
(8)RF 与 GBDT 区别,原理优缺点适用场景分析,哪个具备交叉验证功能等
3.K-means
(1)k-means 聚类的原理以及缺点及对应的改进
(2)em 与 kmeans 的关系
(3)说说 Kmeans 算法, Kmeans 算法 K 怎么设置、适用什么样数据集、怎么评价 Kmeans 聚类结果
(4)如何优化kmeans算法
4.贝叶斯
(1)朴素贝叶斯分类器原理以及公式,出现估计概率值为 0 怎么处理(拉普拉斯平滑),缺点
(2)贝叶斯分类,这是一类分类方法,主要代表是朴素贝叶斯,朴素贝叶斯的原理,重点在假设各个属性类条件独立。然后能根据贝叶斯公式具体推导。考察给你一个问题,如何利用朴素贝叶斯分类去分类,比如:给你一个人的特征,判断是男是女,比如身高,体重,头发长度等特征的的数据,那么你要能推到这个过程。给出最后的分类器公式。
(3)说说贝叶斯怎么分类啊?比如说看看今天天气怎么样?利用天气的历史数据,可以知道天气类型的先验分布,以及每种类型下特征数据(比如天气数据的特征:温度啊,湿度啊)的条件分布,这样我们根据贝叶斯公式就能求得天气类型的后验分布了。
(4)贝叶斯分类器的优化和特殊情况的处理
5.机器学习理论
(1)机器学习中常用的损失函数有哪些?交叉熵有什么好处?(凸优化问题)
(2)判别模型与生成模型的本质区别是什么
(3)分类模型和回归模型的区别,分类模型可以做回归分析吗?反过来可以吗?
https://blog.csdn.net/laobai1015/article/details/83059178
(4)k折交叉验证 中k取值多少有什么关系 ?(知乎上有个问题讨论了k值大小与bias和variance的关系)
(5)特征选择方法有哪些?
方差选择法、相关系数法、互信息法
(6)线性分类器与非线性分类器的区别及优劣?
如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。SVM两种都有(看线性核还是高斯核)。
线性分类器可解释性好,计算复杂度较低,不足之处是模型的拟合效果相对弱些。常见的线性分类器有:LR,贝叶斯分类,单层感知机、线性回归
非线性分类器效果拟合能力较强,不足之处是数据量不足容易过拟合、计算复杂度高、可解释性不好。常见的非线性分类器:决策树、RF、GBDT、多层感知机
SVM两种都有(看线性核还是高斯核)
(7)特征比数据量还大时,选择什么样的分类器(线性or非线性)?
先思考为啥要用非线性?就是为了将低纬度数据映射到高维空间使其线性可分。现在已经是高纬度了当然选择线性分类器。
(8)如何解决过拟合问题?L1和L2正则的区别,如何选择L1和L2正则?
https://www.cnblogs.com/USTC-ZCC/p/10123610.html
(8)哪些机器学习算法不需要做归一化处理?
答:在实际应用中,通过梯度下降法求解的模型一般都是需要归一化的,比如线性回归、logistic回归、KNN、SVM、神经网络等模型。但树形模型不需要归一化,如决策树、随机森林(Random Forest)。它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。
未完待续!!!