盛夏已至,又到了各种内推和招聘贴满天飞的季节,拖延了好久,终于抽出时间分享面经。
本篇分享机器学习相关的面试经验,我在秋招中投递的大多数是推荐算法岗,真正机器学习岗的面试其实并不多,但准备过程也花了很多时间复习这方面,所以本篇内容的分享主要是准备过程的建议以及在面试中遇到的相关问题。
目录
面试考察点
推荐资料
面试建议
真题分享
往期内容:
面试考察点
面试中主要考察以下几个方面:
基础模型知识
对于校招而言,这部分内容占比较高,通常从基础的模型开始,先考察模型的思想、数学推导、变种,进而再引申到模型的优缺点或者不同模型的纵向比较,比如LR模型与SVM的异同点、优缺点等,只要复习充分,不会有问题。思考深度
当大家都把基础知识复习到位的时候,就要开始卷对模型的深入理解了,通常面试官会提出一些需要深入理解才能回答的问题,比如:
Xgboost是否能并行计算,提升效率?
k-means算法是否一定会收敛,是否一定会收敛到最优解?为什么二分类问题不用MSE损失函数?
数据降维时会丢失哪些信息?
为了应对这些问题,我们在复习的时候要多思考,多提问。当然,个人的思考终究是很有限的,所以要多看面经,重点关注这类问题,广泛搜集资料,在理解的基础上形成自己的分析思路,面试的时候遇到就可以从容应答。
应用能力
当大家都刷了很多面经的时候,就要开始卷业务能力了,很多面试者会抱怨自己没有什么相关的项目,或是苦恼没有机会参与,其实重要的并非项目的数量,而是项目中体现的对业务的理解和对知识的应用能力。这方面的考察通常是针对项目的介绍展开,比如:
为什么会选用这个模型,有没有和其他的比较?
最终取得了哪些收益?自己有什么收获?
采用哪些措施提升效果?比如对模型、数据、训练方式、集成方式进行优化等。
面试中还会遇到一些非常具体的业务问题,考察解决问题的能力, 除了模型方面还有很多其他通用的能力同样是面试官关注的,包括但不限于数据预处理、大数据框架、模型评价等,要准备的东西太多了orz。
推荐资料
书籍推荐:
《机器学习》(周志华) :这本书应该是很多人(也包括我)的入门书,书里的内容非常全面,也正是因为过于全面,所以看的时候不要试图记住每一个细节,尤其是初学的时候,像LR、SVM、聚类等基础的模型务必把原理和公式推导完整地走几遍,而对于细分方向的内容,比如PCA的各个变种,只需要有个印象,需要的时候当做工具书自查即可。
《统计学习方法》(李航)
《美团机器学习实践》:这本书有很多对真实业务场景的介绍,如果项目经历不是很多可以用来开阔视野。
网课推荐:
【机器学习】【白板推导系列】
吴恩达机器学习系列课程
面试建议
不要给自己挖坑,通常面试官会先要求介绍项目经历,或者问有哪些熟悉的模型,然后再根据简历或者你的回答继续深挖模型的细节,所以千万不要说不熟悉的内容,简历上写的每个字都要非常扎实。
对简历中的项目一定要多次复盘,否则一旦出现问题会让面试官质疑项目的参与程度。
听到问题后可以略作思考,罗列要点,然后分点作答,展现自己的逻辑性。
回答的时候避免"背书",复习时也要多思考,要对模型有自己的理解,对于每一条优缺点都要想一想为什么。
当面试官提到一些真实的业务场景要积极互动,表现出自己对项目的兴趣,因为面试官大概率是未来的同事,提问环节也可以继续问团队与相关业务,方便准备下一轮面试。
真题分享
以下是我整理的面试中遇到的机器学习方面的问题,只有一部分给出了回答,大家可以对照自查,其他内容可关注公众号获取。
数据预处理
变量分箱的做法
有监督:ID3等决策树模型、IV值最大化
无监督:等宽、等频、聚类特征选择
信息增益法、使用 统计量,互信息、TF-IDF。如何使用模型进行特征选择?
对特征 的输入加一个noise,进行之后看树的效果有多少下降,作为 的重要性。
使用xgboost筛选特征时,可根据以下三个维度评价特征重要性:
特征在节点分裂时被使用的次数。
特征被选中后的平均增益。
特征在分裂时所覆盖的样本数量(正相关与根节点距分裂的节点之间的路径长度)
NLP场景中如何做数据增强(在数据量较小时提升泛化能力)
随机挑选k个进行同义词替换
随机插入噪声或删除一些词。
随机交换其中的一些词。
逻辑回归
模型假设、建立
损失函数推导(极大似然函数)
梯度更新推导
与SVM模型的异同点
LR是参数模型,即假设数据来源于某个分布,而SVM是非参数模型。
使用的损失函数分别是交叉熵和Hinge loss。
LR更新为 ,根据预测值降低较远点对模型参数的影响,而SVM仅使用支持向量。
LR难以解决线性不可分的问题,而SVM可以使用各种核函数解决。
SVM只需要计算少数几个支持向量。
与回归的关系和区别
均可用最大似然函数建模,并使用SGD学习参数。
均可使用t检验、F检验评价结果及参数有效性。
解决的问题分别是分类与回归。
逻辑回归可看作是广义的线性回归,对 进行回归。
如何解决多分类问题?
可以输入属于每个类别的概率,计算损失函数,也可以使用多个二分类器,判别样本是否属于每一类。有哪些处理离散、连续特征的方法?
优缺点
支持向量机
模型建立
为什么要求解SVM的对偶问题?
核函数的原理及作用
从模型的角度,使得模型具有拟合非线性函数的能力。根据Cover Theomem,高维空间比低维空间更容易线性可分。
从优化角度,对偶的表示能够带来内积,从而便于求解。
常用核函数
SMO算法
与逻辑回归 异同点
聚类
变量聚类的作用是减少相关性,剔除冗余变量
k-means算法、k-means++、带有惩罚项的k-means算法
能否使用类似于注意力机制中的方法定义距离
编程实现k-means算法
系统聚类法
变量聚类
如何对聚类结果进行评价
外部指标、内部指标
高斯混合聚类
k-means算法是否一定会收敛,是否一定会收敛到最优解
k-means算法一定会收敛,因为点到类内中心的距离之和会单调递减,而根据单调有界原理,最终一定会收敛,但是有可能收敛到局部最小值,如A(-1,10),B(1,10),C(-1,-10),D(1,10),则将AC划分为一组,BD划分为另一组同样会收敛。
熵
自信息、熵、交叉熵、KL散度、互信息
最小化交叉熵损失与最大化对数似然的关系
决策树
决策树建立过程
三种分裂方式(ID3、C4.5、CART)
如何建立回归树
如何处理缺失值
在训练模型时根据不缺失的样本进行特征评估,在预测时认为缺失值可以等可能得取所有值。
有哪些优缺点
优点:解释性强、预测速度快、不需要特征工程、不需要特征标准化、能较好处理缺失、受异常点影响不大
缺点:用于回归时不够平滑,只能得到有限个值、对于高维稀疏数据可能因为过于重视某些特征而将其他的忽略,造成过拟合,泛化能力差(相比于LR中可以加入正则化项),一些缺点可以使用梯度提升来缓解。
有哪些剪枝策略
预剪枝、后剪枝
强化学习
几大要素
马尔可夫决策过程(状态、动作、奖励函数、转移概率)
Bellman方程
策略迭代与值迭代
值迭代在每次迭代中选择最优策略,而策略迭代在策略提升时才考虑。Q-learning
Deep Q Network
集成学习
使用集成学习的优势
精度相比于单学习器显著提升,预测的误差与方差均能减小。
解决局部极小值问题。
表示能力更强大。
Boosting与Bagging的思想、效果提升原理
二者分别有哪些模型
Adaboost、GBDT、Xgboost的原理、公式推导
GBDT使用CART作为基模型
Adaboost算法使用什么损失函数?如何解决回归问题?
GBDT如何用于分类
选用deviance loss或者exponential loss,每一轮训练k个数(对应k个分类),将输出进行归一化,并用标签值减去概率值,得到剩下待预测的概率。
最小化指数损失
GBDT与Xgboost的区别
一阶与二阶。
如何使用决策树做特征工程(GBDT+LR)
Xgboost如何加速
训练之前先将数据进行排序,保存为block结构。
模型本身是串行结构,无法并行构建树,但模型的内循环(在节点处计算各个特征分裂带来的收益,从而选择特征)与外循环(处理节点的各个子节点)均可进行并行计算。
随机森林的优点
可并行、能处理高维特征、缺省值不影响特征筛选、降低方差、受异常值影响很小。
Light GBM的主要思想
解决boosting算法耗时的问题(Xgboost等算法每次分裂都需要遍历整个数据集)
直方图算法
两个优化:GOSS(Gradient-based One-side Sampling)计算样本的梯度,并按照绝对值逆序排序,保留梯度大的部分样本点,而对于梯度小的样本只进行采样。提升了效率,且采样带来了样本多样性。
EFB(Exclusive-feature Bundling)构造特征图,边上的权重为特征之间的总冲突。将特征基于其在图中的度进行降序排序,并遍历,将每个特征分给具有小冲突的现有bundling或者开创新的bundling,从而减少特征。
概率图模型
贝叶斯网络
隐马尔科夫模型、BIO标注、命名实体识别 维特比算法递推求概率
最大熵模型 某分布只知道其中的一部分,最大化熵对未知的部分进行估算。优点:约束可以灵活设置,解决平滑问题。缺点:只记录了特征是否出现,即二值,但无关联性、记忆性,且可能出现标注偏置,每一步都进行归一化,倾向于选择状态比较少的。
条件随机场、图像去噪 不像隐马尔科夫模型需要严格的独立性假设,输出状态前后独立,状态只和前一个状态有关,且融入了上下文信息。每个状态根据全局归一化计算,不会出现标注偏置,所以需要训练的参数也更多。
以上三者的区别与联系
LSTM+CRF模型用于实体抽取
半监督学习
思想
未标记的样本自身的分布中包含的信息也是有价值的。具体做法
评价指标
准确率、召回率
推荐系统的评价指标(AP@n、ndcg@n、rr等)
roc曲线、auc的含义、计算
auc 计算auc实际上需要计算“逆序对”的个数,即负样本排在正样本前面的样本对数。可以使用O(n)的方法,将所有样本按照预测概率排序,将其中正样本的秩相加,再减去其中的正样本对数目即可得到逆序对个数。roc曲线与prc曲线的区别
auc的缺点
忽略了预测值,将样本预测为(0.51, 0.49)与预测为(1, 0)得到的auc是相同的。
只能反映模型对正负样本的区分能力,无法反映查准率、查全率等。
不关心正负样本内部的排序,即无法反应什么样本更容易出错,难以排查。
两个模型的能力不同,但可能auc是相等的(即两条曲线完全不同,但曲线下的总面积相同),这种模型能力的差别无法由auc反应。
auc是否受正阳样本比例影响
auc实际上是负样本排序在正样本之前的概率,分母是正负样本对,所以受正负样本比例的影响较小。有哪些对auc的改进版本 gauc,即根据样本数量对auc进行加权。
F、
建议阅读:
【时空序列预测第一篇】什么是时空序列问题?这类问题主要应用了哪些模型?主要应用在哪些领域?
【AI蜗牛车出品】手把手AI项目、时空序列、时间序列、白话机器学习、pytorch修炼
公众号:AI蜗牛车 保持谦逊、保持自律、保持进步 个人微信 备注:昵称+学校/公司+方向 如果没有备注不拉群! 拉你进AI蜗牛车交流群