2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇

​    注:机器学习注重原理理解、算法对比及场景使用,应加强算法公式推导及多场景实战。以下试题为作者日常整理的通用高频面经,包含题目,答案与参考文章,欢迎纠正与补充。

其他相应高频面试题可参考如下内容:

2020 BAT大厂数据分析面试经验:“高频面经”之数据分析篇

2020 BAT大厂数据挖掘面试经验:“高频面经”之数据结构与算法篇

2020 BAT大厂数据开发面试经验:“高频面经”之大数据研发篇

2020 BAT大厂深度学习算法面试经验:“高频面经”之深度学习篇

 

目录

1.常见分类算法及应用场景

2.逻辑回归推导

3.SVM相关问题

4.核函数使用

5.生成模型和判别模型基本形式

6.ID3,C4.5和CART区别

7.交叉熵公式原理

8.L1和L2正则化的区别

9.传统机器学习模型有哪些

10.K-means算法流程

11.DBSCAN和K-means对比

12.LDA原理

13.PCA与SVD的关系

14.推荐系统常用模型

15.协调过滤使用场景及冷启动方案

16.Bagging和Boosting区别

17.XGBoost和GBDT区别

18.SGD,Momentum,Adagard,Adam原理

19.过拟合原因及解决办法

20.LightGBM优势


 

1.常见分类算法及应用场景

    单一分类算法:逻辑回归(LR),支持向量机(SVM),决策树(DT)、朴素贝叶斯(NB)、人工神经网络(NN)、K-近邻(KNN)

    集成学习算法:随机森林(RF),GBDT,Adaboost,XGboost。

    应用场景:生物种类判别、图片分类、广告点击行为预测、垃圾短信识别、经营风险量化分析、异常行为分析、用户画像挖掘、领域情感分析、用户评分及征信评估预测、验证码识别、客户流失率预测等

    参考链接:

    https://blog.csdn.net/liulingyuan6/article/details/53637129/

 

2.逻辑回归推导

    逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层逻辑函数g(z),即先把特征线性求和,然后使用函数g(z)作为假设函数来预测。g(z)可以将连续值映射到0 和1。g(z)为sigmoid函数.

    则

    sigmoid function 的导数如下:

2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇_第1张图片

    逻辑回归用来分类0/1 问题,也就是预测结果属于0 或者1 的二值分类问题。这里假设了二值满足伯努利分布,也就是

 

    其也可以写成如下的形式:

    对于训练数据集,特征数据x={x1, x2, … , xm}和对应的分类标签y={y1, y2, … , ym},假设m个样本是相互独立的,那么,极大似然函数为:

2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇_第2张图片

    log似然为:

    如何使其最大呢?与线性回归类似,我们使用梯度上升的方法(求最小使用梯度下降),那么

2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇_第3张图片

    如果只用一个训练样例(x,y),采用随机梯度上升规则,那么随机梯度上升更新规则为:

    损失函数:

    多分类问题:

    方式一:修改逻辑回归的损失函数,使用softmax函数构造模型解决多分类问题,softmax分类模型会有相同于类别数的输出,输出的值为对于样本属于各个类别的概率,最后对于样本进行预测的类型为概率值最高的那个类别。

    方式二:根据每个类别都建立一个二分类器,本类别的样本标签定义为0,其它分类样本标签定义为1,则有多少个类别就构造多少个逻辑回归分类器

若所有类别之间有明显的互斥则使用softmax分类器,若所有类别不互斥有交叉的情况则构造相应类别个数的逻辑回归分类器。

 

3.SVM相关问题

    (1)SVM和LR区别

    支持向量机为一个二分类模型,它的基本模型定义为特征空间上的间隔最大的线性分类器。而它的学习策略为最大化分类间隔,最终可转化为凸二次规划问题求解。

    LR是参数模型,SVM为非参数模型。LR采用的损失函数为logisticalloss,而SVM采用的是hingeloss。在学习分类器的时候,SVM只考虑与分类最相关的少数支持向量点。LR的模型相对简单,在进行大规模线性分类时比较方便。

    (2)SVM硬间隔 软间隔

    硬间隔:完全分类准确,其损失函数不存在;其损失值为0;只要找出两个异类正中间的那个平面;

    软间隔:允许一定量的样本分类错误;优化函数包括两个部分,一部分是点到平面的间隔距离,一部分是误分类的损失个数;C是惩罚系数,误分类个数在优化函数中的权重值;权重值越大,误分类的损失惩罚的越厉害。误分类的损失函数可分为hinge损失,指数损失,对率损失。而经常使用的或者说默认的是使用了损失函数为hinge损失的软间隔函数。

 

2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇_第4张图片2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇_第5张图片

    (3)SVM对偶计算目的

    目的有两个:一是方便核函数的引入;二是原问题的求解复杂度与特征的维数相关,而转成对偶问题后只与问题的变量个数有关。由于SVM的变量个数为支持向量的个数,相较于特征位数较少,因此转对偶问题。通过拉格朗日算子发使带约束的优化目标转为不带约束的优化函数,使得W和b的偏导数等于零,带入原来的式子,再通过转成对偶问题。

    参考链接:

    https://blog.csdn.net/ningyanggege/article/details/81015309

 

4.核函数使用

    常用的核函数包括如下几个:线性核函数,多项式核函数,RBF核函数(高斯核),Sigmoid核函数

    线性核:SVM肯定是可以处理线性问题的,这个就是斯坦福课程里讲SVM时候,最开始讲解的部分,以线性问题入手进行讲解。线性核SVM和逻辑回归本质上没有区别。

    RBF核通常是首选,实践中往往能表现出良好的性能。计算方法如下:

    其中,如果σ选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果σ选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。

    多项式核计算方法如下:

    sigmoid核函数计算方法如下:

采用Sigmoid函数作为核函数时,支持向量机实现的就是一种多层感知器神经网络,应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。

    如何选择:可以利用专家先验知识余弦选定核函数,例如已经知道问题是线性可分的,就可以使用线性核,不必选用非线性核;利用交叉验证,试用不同的核函数,误差最小的即为效果最好的核函数;混合核函数方法,将不同的核函数结合起来;在选择核函数的时候,如果不清楚问题属于哪一类,就两类核都尝试一下,所以可以主要尝试线性核以及RBF核。

    Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。

    RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。

    简要概况:当数据的特征提取的较好,所包含的信息量足够大,很多问题是线性可分的那么可以采用线性核。若特征数较少,样本数适中,对于时间不敏感,遇到的问题是线性不可分的时候可以使用高斯核来达到更好的效果。

 

5.生成模型和判别模型基本形式

    生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。基本形式:朴素贝叶斯、混合高斯模型、隐马尔可夫模型 (HMM)

    判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率。基本形式:感知机 (线性分类模型)、k近邻法、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机 (SVM)、boosting方法 (AdaBoost等)、条件随机场 、CNN

2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇_第6张图片

    参考链接:

    https://www.cnblogs.com/Harriett-Lin/p/9621107.html

 

6.ID3,C4.5和CART区别

    ID3决策树:信息熵是度量样本集合纯度最常用的一种指标。假设样本集合D中第k类样本所占的比重为pk,那么信息熵的计算则为下面的计算方式

    当这个Ent(D)的值越小,说明样本集合D的纯度就越高

    有了信息熵,当我选择用样本的某一个属性a来划分样本集合D时,就可以得出用属性a对样本D进行划分所带来的“信息增益”

    一般来讲,信息增益越大,说明如果用属性a来划分样本集合D,那么纯度会提升,因为我们分别对样本的所有属性计算增益情况,选择最大的来作为决策树的一个结点,或者可以说那些信息增益大的属性往往离根结点越近,因为我们会优先用能区分度大的也就是信息增益大的属性来进行划分。当一个属性已经作为划分的依据,在下面就不在参与竞选了,我们刚才说过根结点代表全部样本,而经过根结点下面属性各个取值后样本又可以按照相应属性值进行划分,并且在当前的样本下利用剩下的属性再次计算信息增益来进一步选择划分的结点,ID3决策树就是这样建立起来的。

    C4.5决策树:C4.5决策树的提出完全是为了解决ID3决策树的一个缺点,当一个属性的可取值数目较多时,那么可能在这个属性对应的可取值下的样本只有一个或者是很少个,那么这个时候它的信息增益是非常高的,这个时候纯度很高,ID3决策树会认为这个属性很适合划分,但是较多取值的属性来进行划分带来的问题是它的泛化能力比较弱,不能够对新样本进行有效的预测。

而C4.5决策树则不直接使用信息增益来作为划分样本的主要依据,而提出了另外一个概念,增益率

但是同样的这个增益率对可取值数目较少的属性有所偏好,因此C4.5决策树先从候选划分属性中找出信息增益高于平均水平的属性,在从中选择增益率最高的。

    CART决策树:CART决策树的全称为Classification and Regression Tree,可以应用于分类和回归。采用基尼系数来划分属性

    基尼值:

    基尼系数:

    因此在候选属性中选择基尼系数最小的属性作为最优划分属性。

    参考链接:

    https://blog.csdn.net/qq_27717921/article/details/74784400

 

7.交叉熵公式原理

    设p(x)、q(x)是X中取值的两个概率分布,则p对q的相对熵是:

    在一定程度上,相对熵可以度量两个随机变量的“距离”,且有D(p||q)

≠D(q||p)。另外,值得一提的是,D(p||q)是必然大于等于0的。

    互信息:两个随机变量X,Y的互信息定义为X,Y的联合分布和各自独立分布乘积的相对熵,用I(X,Y)表示:

    且有I(X,Y)=D(P(X,Y)||P(X)P(Y))。下面,咱们来计算下H(Y)-I(X,Y)的结果,如下:

2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇_第7张图片

 

8.L1和L2正则化的区别

    正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡。

    常用的正则化方法有L1正则化和L2正则化。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归。

    L1正则化的表达如下,其中 为L1正则化项,L1正则化是指权值向量w 中各个元素的绝对值之和。L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择,一定程度上,L1也可以防止过拟合

    L2正则化项表达式如下,其中 为L2正则化项,L2正则化是指权值向量w 中各个元素的平方和然后再求平方根。L2正则化可以防止模型过拟合(overfitting)

    L1正则化的形式是添加参数的绝对值之和作为结构风险项,L2正则化的形式添加参数的平方和作为结构风险项

    L1正则化鼓励产生稀疏的权重,即使得一部分权重为0,用于特征选择;L2鼓励产生小而分散的权重,鼓励让模型做决策的时候考虑更多的特征,而不是仅仅依赖强依赖某几个特征,可以增强模型的泛化能力,防止过拟合。

    正则化参数 λ越大,约束越严格,太大容易产生欠拟合。正则化参数 λ越小,约束宽松,太小起不到约束作用,容易产生过拟合。

    如果不是为了进行特征选择,一般使用L2正则化模型效果更好。

    参考链接:

    https://blog.csdn.net/liuweiyuxiang/article/details/99984288

 

9.传统机器学习模型有哪些

  • 回归算法:回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。常见的回归算法包括:最小二乘法(Ordinary Least Square),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)。

  • 基于实例的算法:基于实例的算法常常用来对决策问题建立模型,这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较。通过这种方式来寻找最佳的匹配。因此,基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map,SOM)。深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

  • 决策树学习:决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。常见的算法包括:分类及回归树(Classification And Regression Tree,CART),ID3 (Iterative Dichotomiser 3),C4.5,Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest),多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine,GBM)。

  • 贝叶斯方法:贝叶斯方法算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators,AODE),以及Bayesian Belief Network(BBN)。

  • 基于核的算法:基于核的算法中最著名的莫过于支持向量机(SVM)了。基于核的算法把输入数据映射到一个高阶的向量空间,在这些高阶向量空间里,有些分类或者回归问题能够更容易的解决。常见的基于核的算法包括:支持向量机(Support Vector Machine,SVM), 径向基函数(Radial Basis Function,RBF),以及线性判别分析(Linear Discriminate Analysis,LDA)等。

  • 聚类算法:聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization,EM)。

  • 降低维度算法:像聚类算法一样,降低维度算法试图分析数据的内在结构,不过降低维度算法是以非监督学习的方式试图利用较少的信息来归纳或者解释数据。这类算法可以用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:主成份分析(Principle Component Analysis,PCA),偏最小二乘回归(Partial Least Square Regression,PLS),Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(Projection Pursuit)等。

  • 关联规则学习:关联规则学习通过寻找最能够解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。

  • 集成算法:集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:Boosting,Bootstrapped Aggregation(Bagging),AdaBoost,堆叠泛化(Stacked Generalization,Blending),梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。

  • 人工神经网络:人工神经网络算法模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论),重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation),Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)。

    参考链接:

    https://www.nowcoder.com/tutorial/95/17d29b1ea4bc438f8d61e90db54e6cc0

 

10.K-means算法流程

    K-Means算法思想:对给定的样本集,事先确定聚类簇数K,让簇内的样本尽可能紧密分布在一起,使簇间的距离尽可能大。该算法试图使集群数据分为n组独立数据样本,使n组集群间的方差相等,数学描述为最小化惯性或集群内的平方和。K-Means作为无监督的聚类算法,实现较简单,聚类效果好,因此被广泛使用。

    算法步骤:

    输入:样本集D,簇的数目k,最大迭代次数N;

    输出:簇划分(k个簇,使平方误差最小);

(1)为每个聚类选择一个初始聚类中心

(2)将样本集按照最小距离原则分配到最邻近聚类;

(3)使用每个聚类的样本均值更新聚类中心;

(4)重复步骤(2)、(3),直到聚类中心不再发生变化;

(5)输出最终的聚类中心和k个簇划分;

    流程框图:

2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇_第8张图片

    参考链接:

    https://blog.csdn.net/lyq_12/article/details/81043690

 

11.DBSCAN和K-means对比

  • K-means和DBSCAN都是将每个对象指派到单个簇的划分聚类算法,但是K-means一般聚类所有对象,而DBSCAN丢弃被它识别为噪声的对象。

  • K-means使用簇的基于原型的概念,而DBSCAN使用基于密度的概念。

  • K-means很难处理非球形的簇和不同大小的簇。DBSCAN可以处理不同大小或形状的簇,并且不太受噪声和离群点的影响。当簇具有很不相同的密度时,两种算法的性能都很差。

  • K-means只能用于具有明确定义的质心(比如均值或中位数)的数据。DBSCAN要求密度定义(基于传统的欧几里得密度概念)对于数据是有意义的。

  • K-means可以用于稀疏的高维数据,如文档数据。DBSCAN通常在这类数据上的性能很差,因为对于高维数据,传统的欧几里得密度定义不能很好处理它们。

  • K-means和DBSCAN的最初版本都是针对欧几里得数据设计的,但是它们都被扩展,以便处理其他类型的数据。

  • 基本K-means算法等价于一种统计聚类方法(混合模型),假定所有的簇都来自球形高斯分布,具有不同的均值,但具有相同的协方差矩阵。DBSCAN不对数据的分布做任何假定。

  • K-meansDBSCAN和都寻找使用所有属性的簇,即它们都不寻找可能只涉及某个属性子集的簇。

  • K-means可以发现不是明显分离的簇,即便簇有重叠也可以发现,但是DBSCAN会合并有重叠的簇。

  • K-means算法的时间复杂度是O(m),而DBSCAN的时间复杂度是O(m^2),除非用于诸如低维欧几里得数据这样的特殊情况。

  • DBSCAN多次运行产生相同的结果,而K-means通常使用随机初始化质心,不会产生相同的结果。

  • DBSCAN自动地确定簇个数,对于K-means,簇个数需要作为参数指定。然而,DBSCAN必须指定另外两个参数:Eps(邻域半径)和MinPts(最少点数)。

  • K-means聚类可以看作优化问题,即最小化每个点到最近质心的误差平方和,并且可以看作一种统计聚类(混合模型)的特例。DBSCAN不基于任何形式化模型。

    参考链接:

    https://zhuanlan.zhihu.com/p/94022640

 

12.LDA原理

    LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的,这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。    LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”,如下图所示。 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。

2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇_第9张图片

    参考链接:

    https://blog.csdn.net/ruthywei/article/details/83045288

 

13.PCA与SVD的关系

  • PCA求解关键在于求解协方差矩阵的特征值分解

  • SVD关键在于  的特征值分解。

    很明显二者所解决的问题非常相似,都是对一个实对称矩阵进行特征值分解,如果取:

    则有:

    SVD与PCA等价,所以PCA问题可以转化为SVD问题求解,那转化为SVD问题有三点好处:

    一般  的维度很高, 的计算量很大

    方阵的特征值分解计算效率不高

    SVD除了特征值分解这种求解方式外,还有更高效且更准确的迭代求解法,避免了 的计算

    其实,PCA只与SVD的右奇异向量的压缩效果相同。如果取 的前  行作为变换矩阵  ,则  ,起到压缩行即降维的效果;如果取 的前  行作为变换矩阵  ,则  ,起到压缩列即去除冗余样本的效果。

    参考链接:

    https://zhuanlan.zhihu.com/p/58064462

 

 

14.推荐系统常用模型

    在推荐系统和计算广告业务中,点击率CTR(click-through rate)和转化率CVR(conversion rate)是衡量流量转化的两个关键指标。准确的估计CTR、CVR对于提高流量的价值,增加广告及电商收入有重要的指导作用。业界常用的方法有人工特征工程 + LR(Logistic Regression)GBDT(Gradient Boosting Decision Tree) + LRFM模型。在这些模型中,FM近年来表现突出,分别在由Criteo和Avazu举办的CTR预测竞赛中夺得冠军。

    因子分解机(Factorization Machine, FM)是由Steffen Rendle提出的一种基于矩阵分解的机器学习算法,其主要用于解决数据稀疏的业务场景(如推荐业务),特征怎样组合的问题。

    FM可以实现非常稀疏数据参数估计,而SVM会效果很差,因为训出的SVM模型会面临较高的bias;FMs拥有线性的复杂度, 可以通过 primal 来优化而不依赖于像SVM的支持向量机.

    参考链接:

    https://blog.csdn.net/baymax_007/article/details/83931698

 

15.协调过滤使用场景及冷启动方案

    Item CF 和 User CF两个方法都能很好的给出推荐,并可以达到不错的效果。但是他们之间还是有不同之处的,而且适用性也有区别。下面进行一下对比

    计算复杂度:

    Item CF 和 User CF 是基于协同过滤推荐的两个最基本的算法,User CF 是很早以前就提出来了,Item CF 是从 Amazon 的论文和专利发表之后(2001 年左右)开始流行,大家都觉得 Item CF 从性能和复杂度上比 User CF 更优,其中的一个主要原因就是对于一个在线网站,用户的数量往往大大超过物品的数量,同时物品的数据相对稳定,因此计算物品的相似度不但计算量较小,同时也不必频繁更新。但我们往往忽略了这种情况只适应于提供商品的电子商务网站,对于新闻,博客或者微内容的推荐系统,情况往往是相反的,物品的数量是海量的,同时也是更新频繁的,所以单从复杂度的角度,这两个算法在不同的系统中各有优势,推荐引擎的设计者需要根据自己应用的特点选择更加合适的算法。

    适用场景:

    在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。比如在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。可以看到,在这种情况下,Item CF 的推荐成为了引导用户浏览的重要手段。同时 Item CF 便于为推荐做出解释,在一个非社交网络的网站中,给某个用户推荐一本书,同时给出的解释是某某和你有相似兴趣的人也看了这本书,这很难让用户信服,因为用户可能根本不认识那个人;但如果解释说是因为这本书和你以前看的某本书相似,用户可能就觉得合理而采纳了此推荐。

    相反的,在现今很流行的社交网络站点中,User CF 是一个更不错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。

    冷启动解决方案:

  • 提供非个性化的推荐

  • 利用用户注册信息

  • 选择合适的物品启动用户的兴趣

  • 利用物品的内容信息

  • 采用专家标注

  • 利用用户在其他地方已经沉淀的数据进行冷启动

  • 利用用户的手机等兴趣偏好进行冷启动

 

16.Bagging和Boosting区别

    样本选择上:

  • Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

  • Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

    样例权重:

  • Bagging:使用均匀取样,每个样例的权重相等

  • Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

    预测函数:

  • Bagging:所有预测函数的权重相等。

  • Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

    并行计算:

  • Bagging:各个预测函数可以并行生成

  • Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

    参考链接:

    https://www.cnblogs.com/earendil/p/8872001.html

 

17.XGBoost和GBDT区别

  • 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。

  • 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。

  • xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。

  • Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)

  • 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。

    参考链接:

    https://www.cnblogs.com/fujian-code/p/9018114.html

 

18.SGD,Momentum,Adagard,Adam原理

  • SGD:随机梯度下降,每一次迭代计算数据集的mini-batch的梯度,然后对参数进行更新。

  • Momentum:参考了物理中动量的概念,前几次的梯度也会参与道当前的计算中,但是前几轮的梯度叠加在当前计算中会有一定的衰减。

  • Adagard:在训练过程中可以自动变更学习的速率,设置一个全局的学习率,而实际的学习率玉以往的参数模的和的开方成反比。

  • Adam:利用梯度的一阶矩估计和二阶矩估计,动态调整每个参数的学习率,在经过偏置的校正后,每一次迭代后的学习率都有个确定的范围,使得参数比较平稳。

    参考链接:

    https://blog.csdn.net/weixin_42338058/article/details/93792205

 

19.过拟合原因及解决办法

    原因:特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。过度的拟合了训练数据,而没有考虑到泛化能力。因此需要减少特征维度,或者正则化降低参数值。

    方法:

  • 交叉验证:即重复使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集训练模型,用测试集来评估模型预测的好坏。

  • 正则化:(L1和L2)通过改动代价函数实现。

  • 数据增强:增加训练数据样本。

  • Dropout:通过改动神经网络本身来实现。例如,训练前,随机删除一部分隐层单元,保持输入输出层不变,依照BP算法更新上图神经网络中的权值。

  • early stopping:即提前终止。Early stopping是一种以迭代次数截断的方法来防止过拟合。

  • Bagging用不同的模型拟合不同部分的训练集;Boosting只使用简单的神经网络;

  • 数据清洗:将错误的label纠正或者删除错误的数据。

    参考链接:

    https://www.cnblogs.com/hugechuanqi/p/10515901.html

 

20.LightGBM优势

  • 更快的训练速度和更高的效率:LightGBM使用基于直方图的算法。例如,它将连续的特征值分桶(buckets)装进离散的箱子(bins),这是的训练过程中变得更快。

  • 更低的内存占用:使用离散的箱子(bins)保存并替换连续值导致更少的内存占用。

  • 更高的准确率(相比于其他任何提升算法) :它通过leaf-wise分裂方法产生比level-wise分裂方法更复杂的树,这就是实现更高准确率的主要因素。然而,它有时候或导致过拟合,但是我们可以通过设置 **max-depth** 参数来防止过拟合的发生。

  • 大数据处理能力:相比于XGBoost,由于它在训练时间上的缩减,它同样能够具有处理大数据的能力。

  • 支持并行学习

    参考链接:

    https://www.aboutyun.com/thread-24339-1-1.html】

 

其他相应高频面试题可参考如下内容:

2020 BAT大厂数据分析面试经验:“高频面经”之数据分析篇

2020 BAT大厂数据挖掘面试经验:“高频面经”之数据结构与算法篇

2020 BAT大厂数据开发面试经验:“高频面经”之大数据研发篇

2020 BAT大厂深度学习算法面试经验:“高频面经”之深度学习篇

 

 

欢迎关注作者微信公众号:学习号,涉及数据分析与挖掘、数据结构与算法、大数据与机器学习等内容

你可能感兴趣的:(高频面经)