机器学习面试常见的问题
🎄

机器学习面试常见的问题

Property
notion image

1. XGBoost与LightGBM的区别?相比GBDT有哪些改进?用的是什么基分类器?为什么?

  • GBDT,梯度提升决策树,每一颗树拟合前面所有树输出累加与目标值的差,是一个加性模型;
    • 基准树采用Cart树,Cart分类树采用Gini系数,Cart回归树采用误差平方和分裂;
    • Gini指数的计算为1-所有类的概率平方和;
    • 预测值采用每一个叶子节点的样本值平均;
    • 连续特征都会进行离散化;
    • 使用其他损失函数时,使用损失函数对当前树输出求偏导(负梯度)当成需要拟合的残差;
    • 分类问题可选损失函数:指数损失函数、对数损失函数;
    • 回归问题可选损失函数:均方差损失函数、绝对损失函数;
    • 在后面的每一颗树,都会乘以一个递减的比值,来降低树的权重;
  • XGBoost在这上面的改进:
    • 损失函数中加入了正则项,并且将损失函数通过泰勒展开式展开为具有二阶导的平方函数;
    • 加入新叶子节点引入后的复杂度代价,提升泛化性能;
    • 除了支持CART基分类器外,还支持线性分类器,使用线性分类器的时候可以使用L1正则化;
    • 引入特征的子采样(列采样与行采样);
    • 支持特征上的并行,将特征排序后以块的形式存在内存中,可重复使用;
    • 特征节点分裂时,计算特征的增益可以多线程进行,类别特征采用 梯度比海森值 作为分箱依据;
  • LightGBM的改进:
    • 直方图,将特征离散化为直方图,直接支持类别特征;
    • 单边梯度采样,将梯度贡献小的样本以一定的几率采样,并配以权重;
    • 稀疏特征合并,以一定的规则将互斥的特征合并,减少运算;
    • 类别特征采用了多条件并行分裂,减少类别特征分裂,避免树过深;
    • 按叶子生长,同等分裂次数的情况下,可以获得更大的梯度下降;
    • 数据并行上采取选举并行,即每个worker使用一部分样本,选举k个特征,样本占比作为权重,到最后汇总生成新的直方图;

2. 过拟合是什么现象,该怎么处理?剪枝一般情况下怎么做?

  • 过拟合是指,随着训练效果的提升,测试集上的效果反而逐步降低:
    • 对于树模型可以进行剪枝,通过定义分裂时所需要的收益,或者对树的宽度、深度进行限制;
    • 对于神经网络,可以在激活函数前面,对神经网络的输出做层正则化;
  • 主要是由什么造成的?
    • 通常是由于数据集本身比较脏乱,需要注意清除一下bad case,找出边界;
    • 也可能是因为数据集本身比例失衡,需要通过loss重新分布模型的注意力,常见的有focal loss,或者参考lightGBM的单边梯度采样,或者一些其他的样本权重法;
    • 可以考虑加入新的特征,或者将数据集进行重新采样;
    • 也可能是因为数据集的特征 有些噪音,可以考虑通过PCA进行降维;

3. 为什么SF可以降低方差?以及为什么LR采用交叉熵作为损失函数?

  • SF降低方差:
    • 采用n颗树的均值作为预测值,该均值的方差会被降低到原来的1/n;
  • LR采用交叉熵作为损失函数:
    • 欧氏距离并不是凸函数,交叉熵损失函数为凸函数;

4. 特征构造的方式,可以从哪些方面思考特征的构造?

  • 如果考虑模型的可解释性:
    • 从业务角度出发,考虑一些跟目标直接相关的指标,如目标为成交概率的时候,考虑是否有历史成交率;
    • 从模型训练出发,可以使用一个模型利用少数特征预测成交率,然后将剩余的特征加上成交率放进新的模型训练;
  • 如果考虑模型的效果:
    • 可以使用PCA或者其他方式对数据进行降维,但该方法没法溯源对模型的效果做出解释;
    • 可以考虑加入一些统计预测方法的预测值作为特征;

5. 模型效果的评价指标有哪些?

  • 分类模型:交叉熵、F1、准确率、AUC;
  • 回归模型:包含MSELoss、MAE、RMSE,以及一些自定义的Loss函数;

6. Linux对文件及用户进行提权?

  • 文件提权:chmod a+x,a代表所有用户组,x代表执行权限;
  • 文件提权:chmod 755/777,指的是对文件进行提权,分别代表读、写、执行,777代表最高权限,可选参数-R表示递归赋予文件夹所有文件;
  • 用户提权:可以加入sudoer中,也可以使用su进行切换账户;
  • 通常情况下,账户都是管理员账户,因此对文件的读写权限是具备的,而执行权限通常需要手动赋予;
  • 三位数的位置分别代表着用户、组、其他;

7. AB Test?

  • AB Test是为了对比两种方案好坏所做的实验:
    • 分为两个部分,一部分做实验,一部分不做;
    • 对比两部分群体所产生的效果,需要定义效果指标(如总成交额、撬动成本比);
    • 指标的可信问题,对于漏斗类指标(比率)采用卡方检验,对于均值类指标采用t检验
    • 卡方检验其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题;
    • 如果人群分布不一致,需要对比不同人群的实验效果,通常建议年轻人、新用户实验组,中年人、老用户对照组比较好;
    • 如果可以,还能加入贯穿层作为与历史的对比,与前时期对比;

8. BP、Logistics Regression、时序、激活函数?

  • BP函数一般包含前向传播与反向传播:
    • 前向传播:指激励或者数值通过网络或者其他方式向前传播;
    • 反向传播:指得到的结果反向更新参数,一般使用链式法则求解梯度更新;
  • 逻辑回归:
    • 逻辑回归的损失函数是交叉熵;
    • 逻辑回归的更新逻辑是反向传播算法;
    • 逻辑回归主要通过NN实现;
    • 逻辑回归过拟合的调整手段通常有学习率、正则化、dropout(类似于随机森林的降低方差);

9. 如何快速理解、快速熟悉业务?

  • 从问题定义下手,搞清楚可能涉及的业务主体;
  • 从主体出发,找到可能相关的数据表,定义主体的属性与交互属性;
  • 从业务目的出发,定义合适的衡量指标,力求输出与业务目的一致;

10. XGBoost的损失函数,用什么方式分裂?

  • 两种分裂方式,回归树采用误差平方和:
    • 误差平方和的计算就是节点的输出值与目标值的差的平方;

11. XGBoost的基分类器是什么?

  • 基分类器是cart树,它是一颗二叉树:
    • 分类时使用的分裂依据是gini指数;
    • 回归时使用的分裂依据是误差平方和;
  • 也可以使用线性回归:
    • XGBoost允许使用线性模型;

12. PCA降维的原理?SVD与PCA的关系?LDA?

  • PCA也称为主成分分析:
    • 计算方式为变换向量乘以原始的变量得到矩阵,求解矩阵的特征向量与特征值,按特征值大小取前几,对应的特征向量为新的主成分对应的原始变量系数;
    • PCA降维的主要原理在于,原始变量经过了投影,变成了另一个方向,保留了足够的区分性,也即方差;
  • SVD为奇异值分解

13. 相关性怎么判定?大数定律是怎么样的?

  • 相关性通常采用Pearson相关系数来判定:
    • 判定的关系为线性相关;
    • 计算的方式为两者与均值的残差积之和 比 两者分别与均值的残差和的方根积;
    • 如果该系数绝对值越接近1代表越相关;
  • 大数定律:
    • 在实验不变的条件下,重复实验多次,某事件的发生频率近似于它的实际发生概率;
    • Monte - Carlo是该定律的一个实践思想;

14. Adam、SGD、Adagrad的区别?

  • 现在提到的 SGD 都是 mini batch 梯度下降,每次计算 mini-batch 的梯度,然后对参数进行更新;
  • Momentum 是动量的概念,可以积累之前的动量来代替真正的梯度,下降初期时,\mu参数可以帮助下降地更快;到了末期可以帮助跳出局部最优;在梯度改变方向的时候,\mu可以减少更新;
  • Nesterov 在梯度更新的时候加上一个矫正的量,避免前进太快,提升灵敏度;
  • Adagrad 是对学习速率做了一个约束;
  • Adam 利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率;经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。
 

15. 逻辑回归损失函数可以用MSE吗(梯度角度)?

  • 不能,MSELoss本质上是在衡量两个指标的欧式距离,使其尽量接近;而交叉熵是在衡量两个概率的分布之间的差异;
  • 逻辑回归使用激活函数的时候,使用MSELoss时是非凸函数,有多个极值点;
 

16. 关于机器学习,简单介绍一下类别?

一般的说法有机器学习、深度学习、人工智能,这几者是范围上的包含关系。机器学习包含了深度学习,人工智能则又包含了机器学习。当然,现在单独提到机器学习一般指传统机器学习,不包含深度学习的那一部分。
  • 机器学习简单分为单模型、集成学习,集成学习中又分为Boosting、Bagging两类。目前使用得比较广泛的是单模型与Boosting两类模型,具有代表性的是逻辑回归与GBDT;
  • 单模型:单模型一般包含逻辑回归、线性回归、SVM、朴素贝叶斯等,因其效果不错、工程实现简单与性能较高,仍然被使用在一些业务上;
  • Boosting:一般是指多个模型序列拟合,每一个模型拟合一部分数据,降低模型的残差,因其效果不错,经常见于比赛和实际业务中;
  • Bagging:一般是指多个模型群体决策,各自赋予一定的权重(或者简单加和),降低了拟合出的模型预测方差,目前比赛中较为少见;
 

17. 常见的特征工程方法有哪些?

  • 缩放数据:
    • 归一化;
    • 标准化;
    • 分位数据;
  • 缺失值处理:
    • 对于时间序列的数据需要查看是否存在季节性及趋势;
    • 无季节性及趋势的数据可以考虑采取平均值;
    • 存在趋势无季节性的数据可以考虑线性插值与中位数;
    • 存在趋势与季节性的数据可以在季节性调整之后进行线性插值;
 

18. 交叉熵的优缺点?

  • 相对于softmax函数,常用的MSE误差更大,下降越慢。交叉熵则在误差比较大的时候,梯度比较大,下降地比较快;同时避免了某些情况下激活函数进入饱和区,梯度消失的问题。
 

19. 什么是弱学习器?什么是强学习器?XGBoost中的基学习器是弱学习器还是强学习器?

  • 弱学习器的定义:同质集成(只包含同种类型的个体学习器的集成称为同质集成)中的个体学习器称为“基学习器”,基学习器有时也被直接称为弱学习器;有时候也把一些集成起来比单一强的学习器称为弱学习器;
  • 强学习器的定义:强学习器即为与弱学习器相反的概念;
  • XGBoost中的基学习器显然是通过集成,且比单一的学习器要强;
 

20. 假设检验是什么?方差分析主要做什么?T检验主要做什么?中心极限定理是什么?

  • 假设检验:主要用来检验样本与样本、样本与总体之间的差别是由抽样还是本质差别引起;
    • 常用的检验方法有Z检验、t检验、卡方检验、F检验;
    • F检验:两个方差相比,得到的F统计量去看是否符合F分布;
    • T检验:根号n乘以(x均值-对应的均值),查看是否符合t(n-1)分布;
  • 方差分析(ANOVA):可以分析类别数据与数值数据的关系,例如不同性别花钱多少;
    • 可以多因素方差分析;
  • T检验主要比较两个方差是否存在差异,是否服从t分布;
  • 中心极限定理指的是给定一个任意分布的总体,每次从总体中随机抽取n个样本,一共抽m次,然后将m组抽样分别求出平均值。这些平均值的分布接近正态分布。
 

21. KNN本质上是一种数据统计方法,通过给定的K个最近的已知数据进行投票,离谁近打成什么标签,回归则是使用均值。

 

22. 朴素Bayes通常是使用后验概率求解,假设X的各个变量相互独立;

 

23. L1正则化为什么比L2正则化更加稀疏?

  • 从导数上来看,L1正则后的损失函数在某一个常数附近会有突变;
  • 从几何上来看,L1正则等于某个值时,其几何形状为多边形,而L2为一个圆滑闭合曲边,同样去接近一个最优的值时,产生的解必然要比L2更加稀疏;
 

24. 极大似然估计是怎么推导得到的?

  • 通过拟合数据,推导出数据出现的概率,然后通过使这个概率最大,得到问题的答案;
  • 通俗点说,就是利用已知的样本结果信息,反推具有最大可能(最大概率)导致这些样本结果出现的模型参数值;
  • 似然函数为,即在参数的情况下,出现的概率,显然这个概率越大,参数越准确;

25. 如何挑选损失函数?

  • 损失函数是用来估量模型的预测值与真实值的不一致程度,通常是一个非负的实值函数,损失函数越小,模型的鲁棒性越好;
  • 逻辑回归如果使用交叉熵来做损失函数的话,就基本与极大似然函数一致;
  • 最小二乘法隐含了一个条件,即样本和噪声都满足高斯分布,使用了中心极限定理;
  • 中心极限定理说明,在适当的条件下,大量相互独立随机变量的均值经适当标准化后依分布收敛于标准正态分布;
 

26. 逻辑回归建模,如果只有9个正样本,1个副样本,那么有一列特征,这个特征对应的权重是正还是负?

 

27. Bayes、Line Regression?

朴素贝叶斯
  • 提到Bayes,通常指的是朴素贝叶斯,朴素贝叶斯的原理很简单,就是通过新的信念更新得到事件或者概率发生的可能:
  • 上述方程中,分母与C无关,看作常数处理,此时分子等价于联合分布模型(联合分布函数就是多元分布函数)
 
  • 通过上面的计算可以得到贝叶斯概率,朴素在这里的含义是条件独立假设:假设每个特征,对于其他特征是独立的,即特征之间相互独立,有:
  • 注:这意味着,内部特征具有强关联性时应用这个模型也许效果比较差;
  • 此时,我们可以讲变量C的条件分布表达为:
  • 其中,Z是一个只依赖于,当特征变量已知时Z是一个常数;当特征是离散特征时,可以直接统计概率;当特征是连续型时,可以先进行分箱;

28. Python中的字典,对于key有什么限制?Python中的整形有没有约束大小?

  • key不能是可变类型,其他类型可以;
  • 基本没有约束大小,使用数组来存放整形数字;

29. AB Test的原理,AB Test中会关注哪些信息?

  • 这一部分已经在另一个问题中回答过,见第七题;

30. AUC的意义与计算,灵敏度和特异性的含义。不平衡样本怎么处理?LR的优化?

  • AUC为ROC曲线下的面积。ROC曲线的横坐标为FP(负例中判定为正例的概率),纵坐标为TP(正例中判定为正例的概率)。模型追求的目标为FP为0,TP为1。因此ROC曲线的形状越靠近(0,0)→(0,1)→(1,1),模型的效果说明越好;随机判定时,曲线接近于一条直线,从(0,0)→(1,1),意味着随着FP的增大,TP也会增大。
  • 灵敏度是指某个变量变化单位长度,目标变量的变化长度;

31. SVM推导,常见的核函数及需要满足的条件;LR损失及推导,SVM与LR的区别;

SVM推导
只有推导的关键思想,数学推导请看另一篇文章;
  • SVM推导从直线分隔样本开始,目标为能尽量使两类样本分开;
  • 损失一开始定义成样本点到直线上的距离,(所有点中的)最小距离显然越大越好;
  • 为了将约束优化问题转变为无约束优化问题,采用了拉格朗日变换,拉格朗日变换的原因;
  • 利用拉格朗日对偶性转换为对偶问题,求解对偶问题可以降低求解的复杂性;
  • 拉格朗日对偶性:
    • 强对偶性表现:原文题的最优解与对偶问题的最优解相等;
    • 弱对偶性表现:原问题的最优解大于等于或者小于等于对偶问题的最优解;
    • 强对偶性要求:主问题是凸优化问题,且可行域中至少有一点使不等式约束严格成立;
  • SVM的强对偶性求解:将拉格朗日函数分别对元变量和对偶变量求导,再同时令导数等于零,即可得到原变量与对偶变量的数值关系;
  • SVM如果没办法使用“直线”将样本分开,可以考虑通过一定的变换,将特征变量变换到新的维度空间(低维度到高维度的映射)进行区分,这个变换(高维度空间内的值为原来空间的变量内积)为核函数,它同时简化了计算量。
  • 核函数有效的条件是:核函数矩阵是对称半正定的;
  • 常见的核函数有简单的线性函数、多项式函数、高斯函数等;
LR推导
只有推导的关键思想,数学推导请看另一篇文章;
  • LR推导目标与SVM相同;
  • 原损失定义为样本点目标值与推测值的均方损失函数,损失越小,目标值与推测值差距越小;
  • 假设数据服从Logistic分布,使用极大似然估计做参数的估计;
  • Logistic的形式是通过线性回归推导得到的,借助的是对数几率函数变换;
  • 似然函数则是:符合Logistic分布情况、拥有最佳参数情况下,当前样本数据出现的概率;
    • 显然,概率越大,该模型(及参数)越合适;
    • 概率的计算方式为二项分布的形式,样本之间发生的概率独立;
  • 求解的过程使用随机梯度下降或者使用牛顿法,牛顿法的核心在于,更新参数时使用一阶导比二阶导;
两者之间的区别
浅谈一下区别,如有不同意见,可反馈至邮箱admin@zeksay.cn;
  • 区别:
    • SVM每一次只需要找到能使最小分隔最大的点即可,其他数据没有更新模型的作用;LR需要每一个样本对数据进行更新,每一个样本都对模型存在贡献;
    • SVM与LR都是从直线回归推导得到的,SVM为纯数学推导,SVM不需要数据样本预服从某一个分布;
    • SVM每次更新参数需要遍历整个数据集,LR每遍历一个batch,就进行参数更新;

32. CNN、RNN、Transformer、LSTM?

 
 

33. 时序数据是怎么处理的?用什么来划分时间点?

有很多种方式,前面的问题中应该有提到,我常用的方式是两种,时序特征抽取与时序差分训练验证;当然还有一些抽取时序特征的时序差分模型,使用模型去训练拟合的时候,我还是习惯将时序特征抽取出来;
  • 时序特征抽取
    • 将年、季节、月、周、节假日、周几、促销日等信息抽取出来;
    • 去掉数据序列本身的时间标识;
    • 使用一些机器学习模型去训练(测试集训练集无需严格按照时间顺序划分);
  • 时序差分训练验证
    • 按照时间点序列对数据集进行序列切分,滑动分为训练集与测试集;
    • 反复训练与测试数据;
 

34. 协方差和相关性有什么区别?

协方差是不处理单位的,相关性是会去掉单位进行衡量的。
 

35. 相关性是否可以传递?

不可以传递,即使两个变量看起来比较相似,并且都与某个变量有相关性,也不可以说是因为相关性的传递导致的。