机器学习面经二、机器学习算法

二、机器学习算法

1、处理分类问题常用算法

1、交叉熵损失函数公式具体可看推导过程

  • 交叉熵公式为下图:
    在这里插入图片描述

二分类的交叉熵损失函数如下:
在这里插入图片描述

  • KL散度(相对熵):
    KL散度 = 交叉熵 - label的信息熵
    在这里插入图片描述

2.监督学习和无监督学习的区别

  • 输入的数据有标签则为监督学习,输入数据无标签为非监督学习。

3.机器学习中的距离计算方法?

  • 空间中两个点:(x1,y1),(x2,y2)

  • 欧氏距离:在这里插入图片描述

  • 曼哈顿距离:
    在这里插入图片描述

  • 余弦距离:
    在这里插入图片描述

  • 切比雪夫距离:
    在这里插入图片描述

3、问题:训练集中类别不均衡,哪个参数最不准确?
在这里插入图片描述
4、问题:你用的模型,最有挑战性的项目

  • 在回答自己的模型时,必须要深入了解自己的模型细节以及其中用到知识(如:Bi-LSTM的优点以及与rnn和lstm的对比)的原理。

5、问题:如果给你一些数据集,你会如何分类(我是分情况答的,从数据的大小,特征,是否有缺失,分情况分别答的);

  • 根据数据类型选择不同的模型,如Lr或者SVM,决策树。假如特征维数较多,可以选择SVM模型,如果样本数量较大可以选择LR模型,但是LR模型需要进行数据预处理;假如缺失值较多可以选择决策树。选定完模型后,相应的目标函数就确定了。还可以在考虑正负样例比比,通过上下集采样平衡正负样例比。
  • 解析:需要了解多种分类模型的优缺点,以及如何构造分类模型的步骤

6、问题: 如果数据有问题,怎么处理;

  • 1.上下采样平衡正负样例比;2.考虑缺失值;3.数据归一化
  • 解析:发散问题需要自己展现自己的知识面

7、分层抽样的适用范围

  • 分层抽样利用事先掌握的信息,充分考虑了保持样本结构和总体结构的一致性,当总体由差异明显的几部分组成的时候,适合用分层抽样。

8、LR的损失函数
在这里插入图片描述
9、LR和线性回归的区别

  • 线性回归用来做预测,LR用来做分类。
  • 线性回归是来拟合函数,LR是来预测函数。
  • 线性回归用最小二乘法来计算参数,LR用最大似然估计来计算参数。
  • 线性回归更容易受到异常值的影响,而LR对异常值有较好的稳定性。

10、生成模型和判别模型基本形式,有哪些?
在这里插入图片描述

11、分类算法列一下有多少种?应用场景。

  • 单一的分类方法主要包括:LR逻辑回归,SVM支持向量机,DT决策树、NB朴素贝叶斯、NN人工神经网络、K-近邻;
  • 集成学习算法:基于Bagging和Boosting算法思想,RF随机森林,GBDT,Adaboost,XGboost

12、LR和SVM的区别。

13、ID3,C4.5和CART三种决策树的区别

  • ID3决策树优先选择信息增益大的属性来对样本进行划分,但是这样的分裂节点方法有一个很大的缺点,当一个属性可取值数目较多时,可能在这个属性对应值下的样本只有一个或者很少个,此时它的信息增益将很高,ID3会认为这个属性很适合划分,但实际情况下叫多属性的取值会使模型的泛化能力较差,
  • 所以C4.5不采用信息增益作为划分依据,而是采用信息增益率作为划分依据。但是仍不能完全解决以上问题,而是有所改善,这个时候引入了CART树,它使用gini系数作为节点的分裂依据。
    在这里插入图片描述

14、朴素贝叶斯基本原理和预测过程

15、LR推导
在这里插入图片描述在这里插入图片描述

2、处理回归问题常用算法

1、L1和L2正则化的区别

  • L2和L1正则化
  • L1是模型各个参数的绝对值之和,L2为各个参数平方和的开方值。
  • L1更趋向于产生少量的特征,其它特征为0,最优的参数值很大概率出现在坐标轴上,从而导致产生稀疏的权重矩阵,而L2会选择更多的矩阵,但是这些矩阵趋向于0。

2、问题:Loss Function有哪些,怎么用?

  • 平方损失(预测问题)、交叉熵(分类问题)、hinge损失(SVM支持向量机)、CART回归树的残差损失

3、问题:线性回归的表达式,损失函数;

  • 线性回归y=wx+b,w和x可能是多维。线性回归的损失函数为平方损失函数。
    在这里插入图片描述

  • 解析:一般会要求反向求导推导
    在这里插入图片描述

5、机器学习:知道哪些传统机器学习模型

  • 常见的机器学习算法:

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

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

  • 3).决策树学习:决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。常见的算法包括:分类及回归树(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)。

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

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

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

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

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

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

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

3、处理聚类问题常用算法

1、什么是DBSCAN

  • DBSCAN是一种基于密度的空间聚类算法,它不需要定义簇的个数,而是将具有足够高密度的区域划分为簇,并在有噪声的数据中发现任意形状的簇,在此算法中将簇定义为密度相连的点的最大集合。

2、k-means算法流程

  • (1)从数据集中随机选择k个聚类样本作为初始的聚类中心,
  • (2)然后计算数据集中每个样本到这k个聚类中心的距离,并将此样本分到距离最小的聚类中心所对应的类中。
  • (3)将所有样本归类后,对于每个类别重新计算每个类别的聚类中心即每个类中所有样本的质心,重复以上操作直到聚类中心不变为止。

3、LDA的原理

  • LDA是一种基于有监督学习的降维方式,将数据集在低维度的空间进行投影,要使得投影后的同类别的数据点间的距离尽可能的靠近,而不同类别间的数据点的距离尽可能的远。

4、介绍几种机器学习的算法,我就结合我的项目经历介绍了些RF, Kmeans等算法。

  • 见上面,下面着重介绍一些项目里的:
  • K-means:基本K-Means算法的思想很简单,事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,知道质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。
  • 步骤:
    初始化常数K,随机选取初始点为质心
    重复计算一下过程,直到质心不再改变
    计算样本与每个质心之间的相似度,将样本归类到最相似的类中
    重新计算质心
    输出最终的质心以及每个类

5、KMeans讲讲,KMeans有什么缺点,K怎么确定
在这里插入图片描述
6、Kmeans
在这里插入图片描述
7、DBSCAN原理和算法伪代码,与kmeans,OPTICS区别
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4、推荐系统的常用算法

1、 问推荐算法,fm,lr,embedding
在这里插入图片描述

6、Kmeans

  • 基本K-Means算法的思想很简单,事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,知道质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。
  • 初始化常数K,随机选取初始点为质心
  • 重复计算一下过程,直到质心不再改变
  • 计算样本与每个质心之间的相似度,将样本归类到最相似的类中
  • 重新计算质心
  • 输出最终的质心以及每个类

7、A/B test如何进行流量分流

8、协同过滤中的算法怎么细分

  • 协同过滤算法通过对用户历史行为数据挖掘发现用户的偏好,基于不同的偏好对用户进行群组划分并推荐相似的商品。
  • 协同过的算法分为两类分为基于用户的协同过滤算法基于物品的协同过滤的算法
  • 基于用户的协同过滤是基于用户对物品的偏好找到相邻邻居用户然后将邻居用户喜欢的推荐给当前的用户。
  • 基于物品的协同过滤是计算邻居时采用物品本身,基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好推荐相似的物品给他。

5、模型融合和提升的算法

1、BaggingBoosting区别

  • Bagging和Boosting的区别:
  • 1)样本选择上:Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
  • 2)样例权重:Bagging:使用均匀取样,每个样例的权重相等。Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
  • 3)预测函数:Bagging:所有预测函数的权重相等。Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
  • 4)并行计算:Bagging:各个预测函数可以并行生成。Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

2、boosting和bagging在不同情况下的选用

  • Bagging与Boosting的区别:
  • 1)取样方式(样本权重):Bagging是均匀选取,样本的权重相等,Boosting根据错误率取样,错误率越大则权重越大。
  • 2)训练集的选择:Bagging随机选择训练集,训练集之间相互独立,Boosting的各轮训练集的选择与前面各轮的学习结果有关。
  • 3)预测函数:Bagging各个预测函数没有权重,可以并行生成,Boosting有权重,顺序生成。
  • 4)Bagging是减少方差,Boosting是减少偏差。

3、随机森林和 GBDT 的区别

(这部分回答基本上还是基于bagging和boosting的区别回答的)

  • 1)**随机森林采用的bagging思想,而GBDT采用的boosting思想。**这两种方法都是Bootstrap思想的应用,Bootstrap是一种有放回的抽样方法思想。虽然都是有放回的抽样,但二者的区别在于:Bagging采用有放回的均匀取样,而Boosting根据错误率来取样(Boosting初始化时对每一个训练样例赋相等的权重1/n,然后用该算法对训练集训练t轮,每次训练后,对训练失败的样例赋以较大的权重),因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各训练集之间相互独立,弱分类器可并行,而Boosting的训练集的选择与前一轮的学习结果有关,是串行的。
  • 2)组成随机森林的树可以是分类树,也可以是回归树;而GBDT只能由回归树组成。
  • 3)组成随机森林的树可以并行生成;而GBDT只能是串行生成。
  • 4)对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来。
  • 5)随机森林对异常值不敏感;GBDT对异常值非常敏感。
  • 6)随机森林对训练集一视同仁;GBDT是基于权值的弱分类器的集成。
  • 7)随机森林是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能。

4、随机森林和GBDT基分类器区别,里面的决策树分别长啥样,怎么剪枝

  • 在上一题的基础上,进一步了解下如何剪枝的。
    在这里插入图片描述

5、XGBOOST和GDBT的区别

  • GBDT是机器学习算法,XGBoost是该算法的工程实现
  • 基分类器 传统的GBDT采用CART作为基分类器,xgboost的基分类器不仅支持cart树,还支持线性分类器,此时的xgboost相当于带L1和L2正则项的逻辑回归(分类问题)或者线性回归(回归问题)
  • 导数信息 GBDT在模型训练时只使用了代价函数的一阶导数信息, xgboost对损失函数(代价函数)做了二阶泰勒展开,可以同时使用一阶和二阶导数,gbdt只用了一阶导数,并且xgboost还支持自定义损失函数,只有损失函数一阶,二阶可导。
  • 正则项 在使用CART作为基分类器时,XGBoost在目标函数中加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力,这是gbdt中没有的
    列抽样 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样,xgboost支持列抽样,即特征抽样,与随机森林类似,用于防止过拟合
  • 缺失值处理 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。对树中的非叶子结点,xgboost在训练过程中会自动学习出它的默认分裂方向,如果测试样本的该特征的特征值缺失,将会划入默认分支中去。
  • 并行化 注意不是tree维度的并行(boosting策略类的加法模型都做不到tree级别的并行),而是特征维度的并行,xgboost预先将每个特征按特征值排好序,存储为block结构,分裂结点时,可以采用多线程并行查找每个特征的最佳分裂点,从而提升训练速度
  • 处理不平衡 在计算损失函数时,考虑不平衡因素,加权损失。

6、AdaBoost和GBDT的区别

  • AdaBoost通过调整错分的数据点的权重来改进模型,而GBDT是从负梯度的方向去拟合改进模型。
  • AdaBoost改变了训练数据的权值,即样本的概率分布,减少上一轮被正确分类的样本权值,提高被错误分类的样本权值,而随机森林在训练每棵树的时候,随机挑选部分训练集进行训练。在对新数据进行预测时,AdaBoost中所有树加权投票进行预测,每棵树的权重和错误率有关,而随机森林对所有树的结果按照少数服从多数的原则进行预测。

7、GDBT的原理,以及常用的调参参数

  • 先用一个初始值去学习一棵树,然后在叶子处得到预测值以及预测后的残差,之后的树则基于之前树的残差不断的拟合得到,从而训练出一系列的树作为模型。
  • n_estimators基学习器的最大迭代次数,learning_rate学习率,max_lead_nodes最大叶子节点数,max_depth树的最大深度,min_samples_leaf叶子节点上最少样本数。

8、gbdt推导和适用场景
在这里插入图片描述

9、xgboost推导

10、xgboost为什么用二阶导数?

  • 仅仅用一阶导数的问题就是, 我们根本无法保证我们找到的是全局最优且用二阶导可以梯度下降的更快更好。除非问题f(x)本身是强凸的而且最好是smooth的。每次迭代相当于就是最优化负梯度。即下式中的▽f(xi)因为是负梯度所以前面要加负号, c代表学习率。
    在这里插入图片描述
    有没有感觉这个公式形式很熟悉, 是不是就是一般常见的linear regression 的 stochastic 梯度更新公式。既然GBDT用的是Stochastic Gradient Descent, 我们回想一下, 是不是还有别的梯度更新的方式, 这时, 牛顿法 Newton’s method就出现了。可以说, XGBoost是用了牛顿法进行的梯度更新。仅仅用一阶导数的问题就是, 我们根本无法保证我们找到的是全局最优。

11、xgboost的特征重要性计算

  • Xgboost根据结构分数的增益情况计算出来选择哪个特征作为分割点,而某个特征的重要性就是它在所有树中出现的次数之和。

12、xgboost的正则项表达式
在这里插入图片描述

13、xgboost原理,怎么防过拟合

  • xgboost在设计之初,为了防止过拟合就采取了很多的优化,具体如下:

  • 目标函数加入正则项,叶子结点个数+叶子结点权值的l2正则化

  • 列抽样,训练时只用一部分特征,(不考虑剩余的block块即可)

  • 子采样,下采样 每轮计算可以不采用所有的样本,使得算法更保守

  • shrinkage ,可以叫做学习率或者步长,为了给后面的训练留出更多的学习空间

14、xgboost,rf(随机森林),lr(线性回归)优缺点场景。。。

——>Xgboost:

  • 优缺点:
  • 1)在寻找最佳分割点时,考虑传统的枚举每个特征的所有可能分割点的贪心法效率太低,xgboost实现了一种近似的算法。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。
  • 2)xgboost考虑了训练数据为稀疏值的情况,可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率,paper提到50倍。
  • 3)特征列排序后以块的形式存储在内存中,在迭代中可以重复使用;虽然boosting算法迭代必须串行,但是在处理每个特征列时可以做到并行。
  • 4)按照特征列方式存储能优化寻找最佳的分割点,但是当以行计算梯度数据时会导致内存的不连续访问,严重时会导致cache miss,降低算法效率。paper中提到,可先将数据收集到线程内部的buffer,然后再计算,提高算法的效率。
  • 5)xgboost 还考虑了当数据量比较大,内存不够时怎么有效的使用磁盘,主要是结合多线程、数据压缩、分片的方法,尽可能的提高算法的效率。
  • 适用场景:分类回归问题都可以。

——>Rf:

  • 优点:

  • 1)表现性能好,与其他算法相比有着很大优势。

  • 2)随机森林能处理很高维度的数据(也就是很多特征的数据),并且不用做特征选择。

  • 3)在训练完之后,随机森林能给出哪些特征比较重要。

  • 4)训练速度快,容易做成并行化方法(训练时,树与树之间是相互独立的)。

  • 5)在训练过程中,能够检测到feature之间的影响。

  • 6)对于不平衡数据集来说,随机森林可以平衡误差。当存在分类不平衡的情况时,随机森林能提供平衡数据集误差的有效方法。

  • 7)如果有很大一部分的特征遗失,用RF算法仍然可以维持准确度。

  • 8)随机森林算法有很强的抗干扰能力(具体体现在6,7点)。所以当数据存在大量的数据缺失,用RF也是不错的。

  • 9)随机森林抗过拟合能力比较强(虽然理论上说随机森林不会产生过拟合现象,但是在现实中噪声是不能忽略的,增加树虽然能够减小过拟合,但没有办法完全消除过拟合,无论怎么增加树都不行,再说树的数目也不可能无限增加的)。

  • 10)随机森林能够解决分类与回归两种类型的问题,并在这两方面都有相当好的估计表现。(虽然RF能做回归问题,但通常都用RF来解决分类问题)。

  • 11)在创建随机森林时候,对generlization error(泛化误差)使用的是无偏估计模型,泛化能力强。

  • 缺点:

  • 1)随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上回过拟合)。

  • 2)对于许多统计建模者来说,随机森林给人的感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试。

  • 3)可能有很多相似的决策树,掩盖了真实的结果。

  • 4)对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。

  • 5)执行数据虽然比boosting等快(随机森林属于bagging),但比单只决策树慢多了。

  • 适用场景:数据维度相对低(几十维),同时对准确性有较高要求时。因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

——>Lr:

  • 优点:实现简单,广泛的应用于工业问题上;分类时计算量非常小,速度很快,存储资源低;便利的观测样本概率分数;对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题。

  • 缺点:当特征空间很大时,逻辑回归的性能不是很好;容易欠拟合,一般准确度不太高。不能很好地处理大量多类特征或变量;只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;对于非线性特征,需要进行转换。

  • 适用场景:LR同样是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。虽然效果一般,却胜在模型清晰,背后的概率学经得住推敲。它拟合出来的参数就代表了每一个特征(feature)对结果的影响。也是一个理解数据的好工具。

15、xgboost特征并行化怎么做的

  • 决策树的学习最耗时的一个步骤就是对特征值进行排序,在进行节点分裂时需要计算每个特征的增益,最终选增益大的特征做分裂,各个特征的增益计算就可开启多线程进行。而且可以采用并行化的近似直方图算法进行节点分裂。

16、 xgboost和lightgbm的区别和适用场景

  • (1)xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略,区别是xgboost对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也进行了分裂,带来了务必要的开销。 leaft-wise的做法是在当前所有叶子节点中选择分裂收益最大的节点进行分裂,如此递归进行,很明显leaf-wise这种做法容易过拟合,因为容易陷入比较高的深度中,因此需要对最大深度做限制,从而避免过拟合。
  • (2)lightgbm使用了基于histogram的决策树算法,这一点不同与xgboost中的 exact 算法,histogram算法在内存和计算代价上都有不小优势。1)内存上优势:很明显,直方图算法的内存消耗为(#data* #features * 1Bytes)(因为对特征分桶后只需保存特征离散化之后的值),而xgboost的exact算法内存消耗为:(2 * #data * #features* 4Bytes),因为xgboost既要保存原始feature的值,也要保存这个值的顺序索引,这些值需要32位的浮点数来保存。2)计算上的优势,预排序算法在选择好分裂特征计算分裂收益时需要遍历所有样本的特征值,时间为(#data),而直方图算法只需要遍历桶就行了,时间为(#bin)
  • (3)直方图做差加速,一个子节点的直方图可以通过父节点的直方图减去兄弟节点的直方图得到,从而加速计算。
  • (4)lightgbm支持直接输入categorical 的feature,在对离散特征分裂时,每个取值都当作一个桶,分裂时的增益算的是”是否属于某个category“的gain。类似于one-hot编码。
  • (5)xgboost在每一层都动态构建直方图,因为xgboost的直方图算法不是针对某个特定的feature,而是所有feature共享一个直方图(每个样本的权重是二阶导),所以每一层都要重新构建直方图,而lightgbm中对每个特征都有一个直方图,所以构建一次直方图就够了。
  • 其适用场景根据实际项目和两种算法的优点进行选择。

6、其他重要算法

1、问题:Bootstrap方法是什么?

  • 从一个数据集中有放回的抽取N次,每次抽M个。
  • 解析:Bagging算法基于bootstrap。面试时结合Bagging算法讲述会更好。

2、问题:如何防止过拟合?

  • 1、早停法;
  • 2、l1和l2正则化;
  • 3、神经网络的dropout;
  • 4、决策树剪枝;
  • 5、SVM的松弛变量;
  • 6、集成学习
  • 解析:能够达到模型权重减小,模型简单的效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值