2018年机器学习岗面试干货(京东/华为/美图/招银)
讲讲去年在秋招过程中积累的一些粗浅的经验,希望对大家有帮助。
面试主要是从项目、算法原理、代码以及场景应用这几个方面进行考察。面试开始时,首先对项目进行了解提问,确认项目的真实性,在此基础上对项目上所涉及的算法进行深入提问,所以一定要非常熟悉写在简历上的机器学习算法,包括原理和数学公式推倒。此外,面试心态上的小trick就是在交流过程中要有一定的心里优势,抓住面试官所提问的点,回答逻辑结构要从面到点。
以下为面试过程中可能会遇到的问题,结合了网络资料以及自我的理解,如果大家需要更全面细致的总结,可以加我的微信:zhengzhixian1468 加我的时候可以备注一下来自牛客。
- 支持向量机SVM
在整体框架上,首先要知道SVM的学习策略是间隔最大化,可形式化为一个凸二次规划,等价于正则化的hinge损失函数的最小化问题,最后通过SMO方法解决接下来可根据李航的统计学习方法或者周志华的机器学习的SVM章节从头开始回忆细节。可根据以下问题串联算法原理细节。
1、函数间隔和几何间隔的区别?
分类超平面可表示为wx+b,y为分类类别(1/-1),其中函数间隔(function margin)为y(wx+b),可代表距离超平面的远近即为对样本分类的确信程度。此时会显易见想到如果成比例改变w,b,虽然没有改变分离超平面但是会增加函数间隔,所以需要对分离超平面进行规范化即除以||w||,得到几何间隔。https://blog.csdn.net/maymay_/article/details/80263845
2、怎么得到svm目标函数?
基本思想为相近样本点使其最大间隔化,这样确保距离超平面很近的点能有足够大的区分度。即为最大化样本(xi,yi)之间的最小几何间隔。实际上以上思想是对数据结构化分布做了描述。
3、 什么是kkt条件? 什么是支持向量?
将含由不等式的约束问题通过拉格朗日法得到了无约束问题,此时得到了KKT条件,通俗来将有以下几个条件
(1)拉格朗日式L对各个参数求导为0
(2)等式约束f(xi)为0
(3)拉格朗日系数alpha>=0
(4) 拉格朗日系数alpha 与不等式约束式子g(xi)的乘积=0
可由以上可的,当alpha>0 时,g(xi) =0即其解x向量就是支持向量这里同时说明支持向量机只依赖于alpha>0的样本点,其他样本点对其没有影响,说明支持向量对噪音不敏感
4、 什么是松弛变量?
所有训练样本并不是线性可分的,意味着不能满足函数间隔大于等于1。为了提高容错率使得函数间隔加上松弛变量 sigm且sigm>=0 。对于每个松弛变量需要支付代价,则改变目标函数+C sum(sigm),其中C为惩罚系数,C越大表示误分类的个数越少。
5、 为什么推到成对偶形式?
(1) 对偶问题更容易求解(2) 能够自然的引入核函数,进而推广到非线性问题6、核函数的作用是什么?有哪些核函数?如何选择核函数?
(1) 什么是核函数?
特征函数为将欧式空间映射到希尔伯特征空间, 核函数K(x,z)就为特征函数的内积。核技巧为只定义核函数K(x,z),不定义映射函数, 通过核函数直接计算映射函数的内积。2 核函数的作用?
将低维的欧式空间映射到高唯特征空间,将线性不可分在高维特征空间中变得线性可分,在svm中拉格朗日对偶问题中的内积xi*xj 可以用核函数代替 。核函数可将两组数据映射为核空间内的两个点,看两个点之间的距离判断是否为同一分布。3 有哪些核函数?1)高斯核函数RBF: 其嵌入空间(embedding space)非常丰富,使得原空间的不同分布能够映射到不同的点.核函数能将连续函数空间填满的kernel叫做general kernel.2)多项式核函数:多项式函数不是general kernel. 因为更高阶的多项式不能由低阶多项式的线性组合构成3)字符串核函数(string kernel function):核函数不仅定义在欧式空间,还定义在离散数据集合. 字符串核函数是定义在字符串集合上的核函数
7、 模型的优缺点?
优点:
1 、基于结构风险最小化原则,正则化的合页损失函数(当样本被正确分类且函数间隔(确性度)>1 的时候损失数为0,否则损失函数为1-y(wx+b)),有更好的泛化能力2 、在对偶问题上可以使用核技巧,避免了高维空间的复杂映射3 、SVM问题是凸二次规划函数,可以求得全局最优解缺点 1 、有较大的空间消耗,主要是储存训练样本与核函数,适用于训练小样本
- 逻辑回归 LR
1、为什么可以用(要用)sigmoid 函数?
(1) 为什么可以用: Sigmoid函数定义了逻辑回归的条件概率,<w,x>的内积代表数据属于正类(y=1)的确信度。<w,x>越大则x属于正类的确信度越大。由于建模需求,需要将<w,x>从整个实数空间映射到条件概率P(y=1|w,x),Sigmoid 函数单调递增能反映确信度,并且能够将实数空间(-无穷,+无穷)映射到(0,1)区间内,能表示概率意义,更加直观。
(2) 为什么要用:指数分布具有最大熵的性质,即在满足前提假设下的分布,分布越均匀越好.在逻辑回归中认为P(Y|x)服从伯努利二分布,并且P(y|x)=f(wx),可根据最大熵的性质推出sigmoid函数。
2、 逻辑回归对于多分类怎么做?
P(y=k|x)的概率分布,等价于softmax,计算在哪类的概率值高。
3、逻辑回归能否解决非线性分类?
(1)非线性超平面可通过变换替换,使得超平面关于新变量线性。(2)逻辑回归不是wx+b这样的形式,需要变换为有内积的对偶形式,再利用核技巧。但LR对偶形式系数不稀疏,但是svm对偶形式系数是稀疏的,所以当线性可分会选择svm4、逻辑回归有哪些应用场景?在特征很多的场景,比如上亿 - 决策树
1、 如何生成决策树?
决策树思想:表示给定特征条件下的条件概率分布,分类即将该节点分到条件概率大的一边,决策树是一个递归选择最优特征的过程,特征将训练机划分成子集,在当前条件下该状态是最好的分类 1)若子集能被正确分类,则构造叶节点 2)若自己没有完全被正确分类,则对自己选择新的最有特征(递归过程) 终止条件:直到所有训练子集能被正确分类
2、 决策树属性选择的方法?
1)信息增益2) 信息增益比3、什么是ID3 ID4.5 CART?
特征分裂准则:信息增益(熵H(Y)-条件熵H(Y|X) :即已知特征X后Y的信息量减少的程度
ID4.5:由于信息增益选择取值较多的特征问题,使用信息增益比进行矫正
CART分类回归树,回归树特征选择标准为最小化平方误差,分类树则为吉尼系数,吉尼系数越大不确定性久越大。
4、 决策树如何后减枝?
损失函数为C(T)+a|T| ,其中C(T)是训练数据的预测误差,|T|为叶子结点的个数,a为权衡模型复杂度的系数。对树任意内部节点,计算以t为单节点的损失函数 与 t为根节点的损失函数,并且由此计算减枝后整体损失函数减少程度。5、 决策树的优缺点?
缺点:(1)噪音对决策树生成影响很大,我们所希望的分类器对噪音是健壮的。( 2)决策树是基于贪婪算法,难以找到全局最优优点:(1)对数据类型和缺失值,离群点鲁 (2)可解释性很强,抽取分类规则路径
6、决策树的适用场景
中小型数据集,适合小特征量。若特征量过多则可能被剪枝。 - 决策树集成算法
1、 什么是adaboost?
Adaboost是提升方法的一种特例,其算法主要思想为:
(1) 、一个弱分类器在每一轮训练过程中改变数据的权值分布,即提高前一轮被分类器分错类的样本的权值
(2)、将多个弱分类器组合成一个强分类器,即加大分类误差小的弱分类器的权值算法模型为加法模型,不能直接用SGD优化方法更新权重,故用前向分步算法更新权重。
2、 什么是GBDT?
重点是新的模型是在之前模型的残差往梯度方向走
3、什么是xgboost?
(1) 为什么xgboost是对误差进行建模?xgboost是集成学习boosting框架下的学习算法,因为特征空间是用分段函数去逼近的,所以采用additive training去学习我们的模型。additive training 是第t轮的模型预测=第t-1轮的模型预测+新的函数f(t),新的函数就是我们所学习的,其中q为叶子索引代表树的结构,w为叶子结点的权重,所以新函数为特定的叶子结点的权重
(2) 如何学习新函数通过最小化目标函数得出新函数,目标函数是基于结构风险最小化原则,目标函数=误差拟合+模型复杂度
对误差拟合函数二阶泰勒展开,对模型复杂度包含(叶子结点数 和 叶子结点权重)最后通过对目标函数求导 得到最优权重(该权重与一阶与二阶信息有关) 以及 已知权重下的目标函数(打分函数)(3) 如何生成xgboost?
选取最优特征,在最优特征下寻找最佳属性分割点,评判标准为类似于吉尼系数形式,递归生成树
(4)xgboost有哪些参数?
-学习率 eta :学习率越小,迭代次数越多。-最小孩子权重 min-child-weight:控制叶子结点中二阶导数和的最小值,即样本的数量越少(由于h大约均在0.01附近),越容易过拟合-最大深度 max_depth
-最大叶子结点数 max_leaf_node-后剪枝参数gamma
-L2参数lambda
-L1参数alpha (控制模型复杂度)-样本随机采样 subsample;列采样比例 colsample_bytree
(5)xgboost 有哪些优点?
-树节点分裂方法,利用近似算法,二阶导数为权重值的分位数作为切分点-自动学习特征缺失值的方向-列抽样(借鉴随机森林),行抽样-学习率(eta)的shrinkage,增加迭代次数-自定义损失函数-特征预排序
(6)xgboost和gbdt的区别?
1)GBDT是以CART作为基分类器,xgboost支持线性分类器,其中线性分类器的xgboost相当于正则化的逻辑回归(分类问题)或线性回归(回归问题)2)GBDT的目标函数含有一阶信息,xgboost的目标函数含有二阶信息,最小化目标函数可得关于函数空间f(t)的梯度迭代或牛顿迭代,牛顿法能更快的收敛。同时xgboost加入了正则项,控制了模型的复杂度。(7) Lightgbm对xgboost有哪些改进?
-Histgram算法 将浮点型数值离散为K个,统计离散值的累积量,遍历直方图找最优特征分裂点
-直方图加速:叶子结点的直方图可由父亲结点的直方图与兄弟结点的直方图做差得到
-leave wise 选取信息增益最大的叶子结点继续分裂(容易过拟合,利用max_depth参数控制)
- 深度学习
(1) 什么是卷积网络?什么是vgg16-19 ?
vgg16有同样大小卷积核3*3和2*2池化层,最后三层为全连结,全连结耗参数,卷积耗时间,在每次卷积后均有Relu激活函数进行非线性映射。
(2) 为什么多次小核要好于一次大核?
增强非线性映射
(3) 什么是ResNet?
神经网络存在退化现象(degradation),即会随着深度增加达到饱和后,再持续增加深度准确率下降(测试集和训练集准确率均下降,故不是过拟合).
为了解决这个问题,引入了残差但愿,一个残差单元学习的目标为输入和输出的差别H(x)-x,而不是完整的输入H(x) -
未完待续~~~