一文总结推荐算法岗基础——机器学习部分

大纲

这里用一个思维导图展示算法岗面试会问到的知识点大纲,笔者分为机器学习部分和深度学习部分。有一些交叉的内容,笔者放到了机器学习部分。这两个部分包含的内容又可以按照一个模型的不同阶段来划分:数据部分(样本和特征),算法部分(常见的分类算法、回归算法、聚类算法等),训练部分(过拟合问题、L1正则和L2正则等),评估部分(如何评估一个模型的好坏等)。
在这里插入图片描述

数据部分

1、怎么解决样本不平衡的问题?
样本不平衡是指样本数据中某一类过多而另外一类过少,比如1000个样本中包含999个正样本和1个负样本,一个模型就算全部预测成正样本也能有99.9%的准确率,但是这并不能体现这个模型的性能。当然你可以用AUC来评估模型的性能,这样更准确一些。
如何解决样本不平衡的问题?过采样和欠采样
过采样:重复类别少的样本数据,但是这样并没有为模型带来新数据。
欠采样:丢弃大量数据,和过采样一样会存在过拟合的问题。
这两种采样方式都可能遇到过拟合问题,那么是否可以为类别少的样本增加一些“新的数据”呢?SMOTE算法就是随机生成一些少数类样本数据,它基于随机过采样方案的一种改进方法。算法流程如下:

(1)对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。

(2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为$x_n$。

(3)对于每一个随机选出的近邻$x_n$,分别与原样本按照如下的公式构建新的样本。

在这里插入图片描述

模型部分

1、什么是生成模型和判别模型,差别是什么?
生成模型需要学习P(X,Y)的联合概率分布,而判别模型不需要;

生成模型有朴素贝叶斯法和条件随机场,当样本容量增加的时候,学到的模型可以更快地收敛;而且当模型存在隐变量的时候,仍然可以用生成方法学习。

判别模型直接面对预测,往往学习到的准确率越高;常见的判别模型有:LR,SVM,等;

2、用过哪些回归模型?介绍一下它们的区别?
线性回归,带L1正则化的线性回归叫LASSO回归,带L2正则化的叫Ridge 回归。
还有支持向量回归,CART等;

3、KNN和Kmeans的算法流程是什么
Kmeans算法的流程,先从样本中随机选取K个样本作为簇的中心,然后计算每一个样本到各个中心的距离,选取最小距离作为属于该簇。然后,更新簇的中心;直到当前所有簇的中心收敛。Kmeans其实体现了EM算法的思想。

KNN可以用作分类或者回归,是一种有监督的算法,给定一个测试样本,首先找到K个和该样本距离最近的样本,然后这些训练集的样本是有标记的,那么就可以按照投票法判断该测试样本的label。显然该算法的核心参数就是K以及距离的度量方式。

4、LR的数学原理,LR是线性模型吗?为什么?
LR体现的是最大熵原理。熵越大,不确定的程度越多,我们需要分布在满足条件的要求下越均匀越好。我们建模Y|X,并且前提预测了Y|X满足伯努利分布,所以我们只需要知道P(Y|X),其次我们需要一个线性模型,所以P(Y|X) = f(wx),那么只需要用最大熵模型确定f即可,伯努利的指数分布簇就是sigmoid形式。
LR不是带了Sigmoid非线性函数了吗?为什么还是线性模型?
判断一个模型是不是线性的,自变量是否只被一个参数影响以及决策边界是否是线性的。

5、感知机的学习流程?参数怎么求?
感知机的目的是学得一个能使正负样本分离的超平面。目标函数是让误分类的点到超平面的距离越小越好,最终的参数求取是使用梯度下降法。考虑到每次初始值可能不同,因此得到的超平面也不相同,也就是说空间中存在无数个能使正负样本分离的超平面

6、SVM推导和核函数
SMO选择合适的a1,a2,怎么算合适的呢?
只选择不满足KKT条件的,直观来说就是带来误差(错误样本)的α,每次都从中选取带来误差最大的α作为第一个参数,也就是我们要优化的参数,假设为α1。选取第二个参数的时候,我们要选取对待优化参数α1带来积极影响最大的那个参数.怎么算积极影响呢?SMO定义一个指标E:
E i = f ( x i ) − y i E_{i} = f(x_{i}) - y_{i} Ei=f(xi)yi
先算出所有的参数的E值,已知我们优化的参数为α1的话,那么E1如果为正,则取其他参数中负的最大的那个,反之取正的最大的那个,也是使得|E1 - Ei|最大的那个αi.这样所有环都通畅了,且每次迭代带来的收益都是最高,迭代次数可能会更少。确定了a,就可以确定w和b:
在这里插入图片描述
在这里插入图片描述
KKT条件,支持向量之类的可以看深入理解支持向量机
好了,到了树模型部分了,这部分面试频率之高就等同于后台开发岗问线程和进程的区别,汗~

6、决策树有哪几种节点分裂方式或者说特征选择方式?分别介绍一下。
C4.5——信息增益熵
ID3——信息增益比
CART——Gini系数
7、随机森林是怎么生成的?AdaBoost?
RF = DT + bagging, AdaBoost = Boosting + 线性分类器;
8、集成学习中的bagging和boosting的差别?
bagging,就是很多弱分类器或者回归算法通过某种策略聚合在一起,比如回归任务,所有的弱分类器的输出累加在一起取平均作为最终的结果,这样形成的强分类器方差小;同时,在样本选取上选取有放回的采样策略,因此所有的样本都有等概率被取出,同时也有一些样本无法取出。
boosting,也是将很多弱分类器聚合在一起,只不过这次样本变了,上一次预测错误的样本的权重会增加,然后再训练本轮的分类器,最后通过一些策略组合这些弱分类器。
9、GBDT中G是什么意思?这里的B和集成学习中的Boosting区别在哪?GBDT和XGboost的差别?LightGBM呢?
GBDT是决策树的集成模型,通过每次拟合负梯度来学习决策树,这里的G指的是负梯度,也就是残差。这里的B和AdaBoost的差别在于显式地更新样本的权重。在每一轮迭代中,首先计算出当前模型在所有样本上的负梯度,然后以该值为目标训练一个新的弱分类器进行拟合并计算出该弱分类器的权重,最终实现对模型的更新。
XGboost是GBDT的工程实现,它们的差别在于:

1)GBDT是机器学习算法,XGBoost是该算法的工程实现。
2)在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
3)GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
4)传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
5)传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
6)传统的GBDT没有设计对缺失值进行处理,XGBoost可以自动学习出它的分裂方向。XGBoost对于确实值能预先学习一个默认的分裂方向。
7)Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)

XGboost和LightGBM的差别:

1)XGBoost使用基于预排序的决策树算法,每遍历一个特征就需要计算一次特征的增益,时间复杂度为
O(data*feature)。而LightGBM使用基于直方图的决策树算法,直方图的优化算法只需要计算K次,时间复杂度为O(K*feature)
2)XGBoost使用按层生长(level-wise)的决策树生长策略,能够同时分裂同一层的叶子,从而进行多线程优化,不容易过拟合;
但不加区分的对待同一层的叶子,带来了很多没必要的开销。因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。
LightGBM则采用带有深度限制的按叶子节点(leaf-wise)算法。在分裂次数相同的情况下,leaf-wise可以降低更多的误差,得到更好的精度。
leaf-wise的缺点在于会产生较深的决策树,产生过拟合。
3)支持类别特征,不需要进行独热编码处理
4)优化了特征并行和数据并行算法,除此之外还添加了投票并行方案
5)采用基于梯度的单边采样来保持数据分布,减少模型因数据分布发生变化而造成的模型精度下降
6)特征捆绑转化为图着色问题,减少特征数量

10、损失函数、代价函数、目标函数有什么区别?
损失函数(loss function)表示的是预测值和真实值之间的差距,定义的是单个样本上的;
代价函数(cost function)表示的是整个数据上的样本的误差的平均,也就是损失函数的平均;
目标函数:需要优化的函数,由cost function + 正则项组成。

训练部分

1、梯度提升(Gradient Boosting)和梯度下降(Gradient Decent)的区别:
可以发现,两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参 数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。

2、梯度消失和梯度爆炸:
两者都是出现在深度神经网络之中,梯度消失是因为层数太多,导致参数以指数形式衰减,或者采用了不合适的激活函数。梯度爆炸则是由于层数太多导致参数以指数形式增加。

激活函数角度: sigmoid函数的导数不会超过0.25,tanh的导数不会超过1。
解决方案: 梯度裁剪,采用relu,linkeyrelu等函数,Batch Norm。

3、梯度下降的方法有哪些?区别是什么?
(以下图片来自知乎张戎,侵删)
随机梯度下降SGD:
在这里插入图片描述
使用动量的随机梯度下降法:
在这里插入图片描述
能够自适应更新学习率的AdaGrad算法:
在这里插入图片描述
RMSProp通过衰减速率来改善AdaGrad算法学习率变化太快的问题:
在这里插入图片描述
Adam:可以看成是二阶动量的RMSProp算法,在一阶动量的基础上还考虑了二阶动量,
在这里插入图片描述

评估部分

1、什么是过拟合,怎么解决
过拟合是指模型在训练集上拟合的过好了,导致在测试集上的泛化性能太差。解决方法就是正则化,dropout,batch norm, early stopping等。
2、batch norm的数学原理是什么?一般是放激活函数前还是激活函数后?
独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢?BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
接下来一步一步的理解什么是BN,为什么深度神经网络随着网络深度加深,训练起来越困难,收敛越来越慢?
计算过程如下,参数为 γ \gamma γ β \beta β注意BN是有参数的。
在这里插入图片描述
变换后某个神经元的激活x形成了均值为0,方差为1的正态分布,目的是把值往后续要进行的非线性变换的线性区拉动,增大导数值,增强反向传播信息流动性,加快训练收敛速度。
一般是放在激活函数之前。 简而言之,就是u(即输入的x)更偏向于非线性分布,它的分布的shape在训练中易改变,并且对u的第一次、第二次限制并不会消除协变量漂移(原文为:constraining its first and second moments would not eliminate the covariate shift),因此为了使输出tensor的分布更加稳定,应该将BN加在激活层之前,并且偏置项b可以省略(可以起到相同的作用)。
2、L1正则和L2正则的区别:
(1) 优化问题角度,L1范数相当于一个正方形的限制区域,那么在这个限制区域求最优值即是平方差误差项的等值曲线和该区域相交的点,显然很容易落在坐标轴上。
在这里插入图片描述
假设使用L1正则和L2正则的目标函数分别为:
J 1 ( w ) = L ( w ) + λ ∣ w ∣ J_{1}(w) =L(w) + \lambda |w| J1(w)=L(w)+λw
J 2 ( w ) = L ( w ) + λ ∣ ∣ w ∣ ∣ 2 J_{2}(w) =L(w) + \lambda ||w||_{2} J2(w)=L(w)+λw2
那么导数分别为:
δ J 1 ( w ) δ w = L ( w ) δ w + ∣ λ ∣ \frac{\delta J_{1}(w)}{\delta w} =\frac{L(w)}{\delta w} + |\lambda| δwδJ1(w)=δwL(w)+λ
δ J 1 ( w ) δ w = L ( w ) δ w + 2 λ w \frac{\delta J_{1}(w)}{\delta w} =\frac{L(w)}{\delta w} + 2\lambda w δwδJ1(w)=δwL(w)+2λw
那么当w=0时,带L2正则的目标函数的导数仍是 L ( w ) δ w \frac{L(w)}{\delta w} δwL(w),无变化。而引入L1正则后,目标函数在0处的导数有一个突变。从 L ( w ) δ w \frac{L(w)}{\delta w} δwL(w)+λ到 L ( w ) δ w \frac{L(w)}{\delta w} δwL(w)−λ,若 L ( w ) δ w \frac{L(w)}{\delta w} δwL(w)+λ和 L ( w ) δ w \frac{L(w)}{\delta w} δwL(w)−λ异号,则在0处会是一个极小值点。因此,优化时,很可能优化到该极小值点上,即w=0处。通常越大的λ 可以让代价函数在参数为0时取到最小值。
那么L1更容易得到稀疏解,那么就可以用作特征选择。L2更容易得到平滑解。
(2)贝叶斯角度,从最大似然估计来讲的话,L1正则化相当于平均值为0,参数为a的拉普拉斯的先验分布,而L2正则化相当于均值为0,方差为δ的正态分布;
(3)从梯度角度,当w大于1,l2下降更快,到w越接近0,L1比L2更快,那么能比L2得到更加稀疏的解。
在这里插入图片描述
在这里插入图片描述
3、偏差和方差的区别:
偏差:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据。
方差:描述的是预测值的变化范围,离散程度,方差越大,数据分离越分散。下面这张图展示了偏差和方差与模型复杂度之间的关系。
在这里插入图片描述
这里有一个需要注意的知识点是,我们常说的训练模型其实等于数据部分+算法部分,因此评估一个训练好了的模型的好坏那就是看一些评测指标,比如AUC等等;但是这里指的是算法模型部分,那么评估它的好坏就看偏差和方差。
4、评估指标:
Precision ,Recall, F1, AUC,ROC:
Precision和Recall是再基础不过的评测指标,这个不清楚真的可以劝退了~。稍微有点绕但是又经常在面试上会问到的就是AUC和ROC。
首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。
ROC曲线怎么绘制:ROC横坐标是假正率,纵坐标是真正率。我把测试样本拉出来,把每个样本的预测值从高到低排序,并把预测值作为阈值,当预测样本为正类的概率大于这个阈值,那么我就认为它是正类。然后,取不同的阈值我们就能得到不同的一组FPR和TPR,以此绘制在坐标系上,最后得到的就是完整的ROC曲线。我们并不一定要得到每个测试样本是正样本的概率值,只要得到这个分类器对该测试样本的“评分值”即可。
当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。也就是说即使在样本不平衡的情况下,AUC依然能较好的评估模型。
其它的评价指标见机器学习 推荐系统常见指标计算

分割=====================================================================================================
以上就是机器学习基础部分了,我觉得对这些基础掌握分为三个level:
1、了解这些模型怎么用的,算法流程是怎样的;
2、了解这些模型为什么要这样做,以及这样做背后的原理是什么(其实都离不开信息论和数学,不管是微积分、统计、概率论、线代,还是组合优化、线性规划)
3、你能做出一些改进,比如从GBDT到XGboost,LightGBM等。
而且随着机器学习和深度学习在企业运用的越来越普遍,大厂对机器学习岗位的人员的编码要求也逐渐在提高。比如2020年阿里暑期实习某次笔试题背景就是隐马尔可夫链的维特比算法,LeetCode 197场和字节合作的周赛最后一题求费马点就是梯度下降的应用。当然,某些题目用传统的一些方法(比如DP等)也能解决或者本身就是DP的应用,但是假如你能真正的掌握这些基础机器学习算法和优化方法,甚至能够写出代码,那看到这些题就多一分把握迅速AC。

引用

1、机器学习,周志华;
2、统计学习方法,李航;
3、https://www.zhihu.com/question/35322351?sort=created,为什么 LR 模型要使用 sigmoid 函数,背后的数学原理是什么?
4、深度学习中的优化算法,知乎张戎
5、https://www.zhihu.com/question/35322351
6、https://blog.csdn.net/Dawei_01/article/details/80846371
7、https://blog.csdn.net/niutingbaby/article/details/96104814
8、https://www.jianshu.com/p/765efe2b951a
9、https://www.zhihu.com/question/356571056/answer/902691251
10、https://www.cnblogs.com/guoyaohua/p/8724433.html
11、https://zhuanlan.zhihu.com/p/129024068

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值