gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客

注意,下文的原始的gbdt是以sklearn中的gbdt的实现为例子来阐述的,因为gbdt的改进版本有很多,为了叙述方便,使用这个最为人所知的实现来描述。

  • 你有自己用过别的模型然后调参之类的吗?能说一下基本的调参流程吗?XGB知道吗,以XGB为例子说一下调参流程吧

(个人的思路):一般来说采用贝叶斯优化或者遗传算法等启发式的优化算法确定相对最佳参数(如果不熟悉的话用随机搜索也是可以的,或者网格搜索但是参数得到步长设置的很大,一步一步确定相对最优参数的区间),然后再根据实际的模型在验证集上的表现做一些微调,对于过拟合优先调整max_depth和树的数量,在实际使用过程中这两个参数对于模型的整体效果影响很大很明显。对于欠拟合,反着来就行了。

  • XGB和GBDT的区别有哪些?

1、算法层面:

(1)损失函数的二阶泰勒展开;(具体的二阶泰勒展开的阐述下面那点会详细描述)

(2)树的正则化概念的引入,对叶节点数量和叶子节点输出进行了约束,方式是将二者形成的约束项加入损失函数中;

(3)二阶泰勒展开与树正则化推出了新的叶子节点输出的计算公式而不是原始gbdt那样的简单平均;

(4)a、对于基础学习器的改进,

fab1663bdbe94fb8e1830b0965e02017.png

分裂的时候自动根据是否产生正增益指导是否进行分裂,因为引入了正则项的概念,分裂的时候这个预剪枝更加严苛;

b、对于缺失值的处理,xgboost根据左右子节点的增益大小将缺失值分到增益大的节点中,而sklearn中的gbdt是无法处理缺失值的,因为sklearn中的gbdt是以sklearn中的cart为基学习器的,而sklearn中的cart也并没有实现对缺失值的处理功能。

(5)学习率,Shrinkage,对每一颗树都乘以小于1的学习率,来削弱每一颗树的影响,这样的结果就是会引入更多的树来处理使得基学习器得数量变多,从而降低过拟合,不过其实sklearn中的gbdt也实现了。。。不知道为什么这么多人把这一点也列为不同;

(6)、引入了随机森林使用的列采样功能,便于降低过拟合;

(7)、引入了许多近似直方图之类的优化算法来进一步提高树的训练速度与抗过拟合的能力,这个比较复杂,因为实现了很多种算法,后面单独写一篇来总结;

2、工程层面

(1)、对每个特征进行分块(block)并排序(pre_sort),将排序后的结构保存在内存中,这样后续分裂的时候就不需要重复对特征进行排序然后计算最佳分裂点了,并且能够进行并行化计算.这个结构加速了split finding的过程,只需要在建树前排序一次,后面节点分裂时直接根据索引得到梯度信息。

(2)

金贵涛:对xgboost的理解​zhuanlan.zhihu.com
25c7ff8057ef166d4eee78a1684c5caf.png

其它更复杂的工程优化处理见这里。。。。


为什么xgb用二阶导:

1、形式上的统一:

下面来自xgb的官网叙述:

08c3276a7e89c8a1ef9f88f08c9334c2.png

可以看到,损失函数为mse的时候,注意,此时我们没有进行二阶泰勒展开

761bab26962f1a4e7a019abcb489e03c.png

对比可以看到,其它损失函数泰勒展开之后去掉常数最终的形式和mse的不泰勒展开的形式是完全一致的(mse的二阶梯为常数1,一阶梯度是y_pred-y_True),这么做的好处是,这样的话,1、 xgboost在对mse的损失函数设计完求解器之后,这一套代码可以直接复用给别的损失函数来使用,因为我们如果不做二阶泰勒展开的话,比如新的损失函数是二元交叉熵,在工程设计上,我们还要将损失函数的求导,然后把求导之后的式子写出来:

3f19b2dac6a0fa201b5d34067733df20.png
二元交叉熵的一阶梯度

设计一个新的求解器去求解,很麻烦。

而进行了这样的设计之后,后续如果还有一些什么别的损失函数,底层的求解mse的代码可以直接使用,使用者只需要自行去求解新的损失函数的一阶梯度和二阶梯度的表达式,然后通过xgboost的自定义损失函数的功能就可以实现使用完备的xgboost的框架来求解自己的损失函数的最优值了。

2、关于速度的问题,gbdt的前向分布的求解思路可以说就和我们常见的逻辑回归求解的梯度下降是类似的,线性回归的梯度下降每一轮通过更新参数的方式接近损失函数的最优值,而gbdt则是用基学习器去拟合,相对而言,xgboost类似于使用牛顿法来求解线性回归,所以下面从牛顿和梯度下降的角度来阐述,的实际上我们常说的牛顿法比梯度下降法快是不准确的,应该是牛顿法的收敛速度要比梯度下降法快,也就是说牛顿法使用的迭代次数相对于梯度下降法要更少,但是由于涉及到计算二阶导的信息,牛顿法不一定在算法训练的时间上总比梯度下降法快,只是相对于梯度下降法而言,更少的迭代达到最优,这一点来看,并不算是优势。

没明白为什么有人说xgboost的二阶泰勒展开要更快???希望有大佬来解释一下这个问题。


  • xgb怎么梯度下降的

和gbdt是一样的,t-1轮的所有的子数的总预测值和真实值进入损失函数的负梯度的表达式计算得到负梯度作为第t轮要拟合的标签值。严格来说,这是前向分布算法,虽然他和梯度下降法的思路非常相似,但是梯度下降法对于每一轮的负梯度的使用方法是作为上一轮参数的参数的更新量,而xgb是直接将其作为标签值用新的基学习器去拟合。

  • xgb的正则化

59270eaa68d165a316dff99790a539ee.png

叶子节点个数的正则化约束,参数为gamma,

叶子节点输出值的正则化约束,参数是lambda。

XGB特征重要性程度是怎么判断的?

xgb的特征重要性的方式衍生的非常花俏了。

5009dcb5921db8f96a2e011ef23dc35f.png

官网上给出的方案,total_gain就是特征带来的总的分裂增益,也就是我们常规意义上的分裂总增益,weight,被用来作为分裂节点的次数,也就是我们常规意义上的分裂总次数,gain=total_gain/weight,计算的是每一次分裂带来的平均增益,total_cover表示特征分裂的样本数,举个例子,假设初始样本有10000个,第一次分裂的时候使用了特征A,也就是特征A在这10000个样本上分裂,则此时的cover值为10000,假设根据特征A分裂出左枝的样本有1000个,右边有9000个,而在左枝特征B是最优特征根据这1000个样本进行分裂,则B当前的cover是1000,依次类推最后求和。

而cover显然就是total_cover/weight,也就是平均每次分裂所“负责”的样本数。


XGB很容易理解它的回归和二分类,如何理解多分类呢?

https://www.cnblogs.com/always-fight/p/9400346.html​www.cnblogs.com
4f6123252ab5c4e380bdaf6a547c0bc8.png

GBDT用于分类问题 - 1直在路上1 - 博客园

GBDT用于分类问题 - 1直在路上1 - 博客园​www.cnblogs.com
4f6123252ab5c4e380bdaf6a547c0bc8.png

思路就是ovr,比如三分类,每一轮是生成3颗数,不过损失函数还是用的多分类的损失函数比如常见的logloss,具体的可以见上面这篇文章写的很清楚了。

XGB和LGB区别:

1、直方图优化,对连续特征进行分桶,在损失了一定精度的情况下大大提升了运行速度,并且在gbm的框架下,基学习器的“不精确”分箱反而增强了整体的泛化性能;

2、goss 树的引入;

3、efb,对稀疏特征做了“捆绑”的优化功能;

4、直接支持对于类别特征进行训练(实际上内部是对类别特征做了类似编码的操作了)

5、树的生长方式由level-wise变成leaf-wise;

算法层面的优化具体可见:

马东什么:不手写lightgbm(1)—怎么分桶的​zhuanlan.zhihu.com
马东什么:不手写lightgbm(2)—其它的一些特性​zhuanlan.zhihu.com

工程层面的优化可见lightgbm原作者之一的知乎回答:

如何看待微软新开源的LightGBM?​www.zhihu.com

xgboost与RF的对比

GBDT与RF区别

1、组成随机森林的树可以是分类树,也可以是回归树;而GBDT只由回归树组成,GBDT的会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树(尽管GBDT调整后也可以用于分类但不代表GBDT的树为分类树)

2、组成随机森林的树可以并行生成;而GBDT只能是串行生成

3、对于最终的输出结果而言,随机森林采用多数投票或简单平均等;而GBDT则是将所有结果累加起来,或者加权累加起来(存在学习率)

4、随机森林对异常值不敏感,GBDT对异常值非常敏感

5、随机森林对训练集一视同仁,GBDT是基于权值的弱分类器的集成

6、随机森林是通过减少模型方差提高性能,GBDT是通过减少模型偏差提高性能,但是xgb引入了正则项和列采样等等正则化手段之后,可以在少量增加偏差的情况下大幅度缩减模型的方差。

xgb的预排序算法是怎么做的呢?

将原始特征进行排序之后以块的形式保存到内存中,在块里面保存排序后的特征值及对应样本的引用,以便于获取样本的一阶、二阶导数值,但意味着除了保存原始特征之外还要保存原始特征的排序结果,耗内存。

rf和xgb哪个对异常点更敏感

xgb明显敏感的多,当然对rf也是有一定影响的,rf的每棵数的生成是独立的,异常点数量不多的情况下异常点常常和正常样本中的某些样本合并在一个分支里。

但是xgb不一样,异常样本的t-1轮的预测值和真实标签计算出来的负梯度会一直很大,假设当到达某一轮的时候,所有正常样本的计算得到的负梯度都很小而异常样本的负梯度很大例如【0.0000001,0.0000001,0.0000001,0.0000001,0.0000001,10】,这个时候新树会可能会继续进行不正常的分裂为[0.0000001,0.0000001,0.0000001,0.0000001,0.0000001],[10],而这样的分裂是不合理的,因为异常值本身可能是因为某些人为失误导致的数据记录错误,或者异常样本完全是属于另外一种分布,此时强制要进行模型训练会导致模型的结果有偏从而发生过拟合。

当然异常样本数量很少比如10个以内的时候而正常样本有100000000个其实基本没什么影响,但是如果占比较高的话是会产生影响的。

xgb何时停止分裂?

1、人工设定的参数,max_depth,min_data_in_leaf等等,这类通过超参数形式限制树的复杂度的方法都会引发xgb的分裂的停止,也就是常说的预剪枝;

2、人工不限制,自由生长的情况下,当分裂增益小于0则基学习器停止分裂

XGB怎么解决过拟合?怎么剪枝?怎么选择特征?

叶节点个数和叶节点权重(输出值)树的正则项,各种预剪枝的超参数(最大深度、最大叶节点个数、最小分裂增益、学习率、早停等等)控制树结构的复杂度,行列采样的引入、以及各类近似算法等。每轮计算所有特征各自的最佳分裂点,比较所有特征按照最佳分裂点分裂之后的分裂增益大小,使用分裂增益最大的特征在其最佳分裂点分裂一次,然后继续循环。。。。。

对比一下XGB和lightGBM在节点分裂时候的区别

xgb是level-wise,lgb是leaf-wise,level-wise指在树分裂的过程中,同一层的非叶子节点,只要继续分裂能够产生正的增益就继续分裂下去,而leaf-wise更苛刻一点,同一层的非叶子节点,仅仅选择分裂增益最大的叶子节点进行分裂。

Lgb相对于xgb的优缺点

优点:直方图算法—更高(效率)更快(速度)更低(内存占用)更泛化(分箱与之后的不精确分割也起到了一定防止过拟合的作用);

缺点:直方图较为粗糙,会损失一定精度,但是在gbm的框架下,基学习器的精度损失可以通过引入更多的tree来弥补。

Xgb叶子节点怎么计算值的

损失函数引入树正则化概念并二阶泰勒展开,去掉常数项之后得到最终的xgb损失函数的形式:,

b2cd6eac1376bbab635b651518ef15a4.png

然后根据此损失函数推导得到叶节点的计算公式

0d777c9ab1e0fb110576afde9b6a44d5.png

2.xgb与lr相比优缺点在哪里?

这类问题是一个很广的问题,涉及到不同算法的适用性,这个后面单独总结一下吧

xgb中l1正则怎么用的

xgb中l1表示对叶节点个数的约束项的系数,而l2则是叶子节点权重的约束项系数。

6、xgboost对特征缺失敏感吗,对缺失值做了什么操作,存在什么问题

不敏感,可以自动处理,处理方式是将missing值分别加入左节点 右节点取分裂增益最大的节点将missing样本分裂进这个节点 。这种处理方式的问题在xgboost仅仅在特征的非缺失的值上进行分裂然后missing值直接放入其中一个节点,显然当缺失值很多的情况下,比如缺失80%,那么xgb分裂的时候仅仅在20%的特征值上分裂,这是非常容易过拟合的。

7、xgb和lgb在特征、数据并行上存在什么差异?

lgbm特征并行的前提是每个worker留有一份完整的数据集,但是每个worker仅在特征子集上进行最佳切分点的寻找;worker之间需要相互通信,通过比对损失来确定最佳切分点;然后将这个最佳切分点的位置进行全局广播,每个worker进行切分即可。

xgb的特征并行与lgbm的最大不同在于xgb每个worker节点中仅有部分的列数据,也就是垂直切分,每个worker寻找局部最佳切分点,worker之间相互通信,然后在具有最佳切分点的worker上进行节点分裂,再由这个节点广播一下被切分到左右节点的样本索引号,其他worker才能开始分裂。

二者的区别就导致了lgbm中worker间通信成本明显降低,只需通信一个特征分裂点即可,而xgb中要广播样本索引。

2)数据并行

当数据量很大,特征相对较少时,可采用数据并行策略。

lgbm中先对数据水平切分,每个worker上的数据先建立起局部的直方图,然后合并成全局的直方图,采用直方图相减的方式,先计算样本量少的节点的样本索引,然后直接相减得到另一子节点的样本索引,这个直方图算法使得worker间的通信成本降低一倍,因为只用通信以此样本量少的节点。

xgb中的数据并行也是水平切分,然后单个worker建立局部直方图,再合并为全局,不同在于根据全局直方图进行各个worker上的节点分裂时会单独计算子节点的样本索引,因此效率贼慢,每个worker间的通信量也就变得很大。

3)投票并行(lgbm)

当数据量和维度都很大时,选用投票并行,该方法是数据并行的一个改进。数据并行中的合并直方图的代价相对较大,尤其是当特征维度很大时。

大致思想是:每个worker首先会找到本地的一些优秀的特征,然后进行全局投票,根据投票结果,选择top的特征进行直方图的合并,再寻求全局的最优分割点。这个方法我没有找到很好的解释,因此,面试过程中答出前面两种我觉得就ok了吧。

为什么xgboost不用后剪枝

后剪枝计算代价太高了,合并一次叶节点就要计算一次测试集的表现,数据量大的情况下非常消耗时间,而且也并不是特别必要,因为这样很容易过拟合测试集。

4、GBDT和RF哪个树比较深

第一种解释: RF深。随机森林的思路是用大量低偏差高方差的基学习器进行集成,简单平均(不过lightgbm中的rf貌似不太一样,没有细致研究过),降低方差,所以希望每一个基学习器的精度尽量高,如果随机森林的基学习器偏差大,对于100个或者10000个精度为0.6的学习器,很难通过随机森林的集成方式来达到好的效果;而gbdt本身就是对误差的不断拟合,本身就是一个偏差很低的集成框架,那么为了同时也使得方差缩小,需要基学习器的泛化性能好一些,避免整个框架的偏差很低但方差很大的窘境;

第二种解释:随机森林每一颗树都是独立的,每一颗树都是以原始标签进行训练的,在不进行任何限制的情况下会生长的比较深,而gbdt不一样,每一轮都是以上一轮的负梯度为新标签进行训练,训练到一定程度的时候我们去观察负梯度就可以发现,因为很多样本已经得到很好的拟合,所以负梯度会比较小,比如可能是这样的[0.000000001,0.000000001,0.000000001,0.0000000015......],这样树在分裂的时候实际上再进行分裂的增益并不大,甚至分裂之后的增益反而减少,这就导致了基树训练的时候很早就停止了,从而导致树的深度降低。

为什么gbdt不能用分类树?

分类树无法处理连续值,负梯度一般都是连续值。

6 lightGBM直方图加速原理? lightGBM处理类别变量的原理? lightGBM在特征分裂时相比GBDT和xgboost有什么优化? lightGBM特征分裂加速的原理是什么?

马东什么:不手写lightgbm(1)—怎么分桶的​zhuanlan.zhihu.com
马东什么:不手写lightgbm(2)—其它的一些特性​zhuanlan.zhihu.com
如何看待微软新开源的LightGBM?​www.zhihu.com

算法和工程方面的都在这里了。

2 lightGBM重要性怎么评估?

和xgb一样。不过lgb中没有cover这一评价方式。

3 lightGBM节点怎么分裂的?

这个问题,去github上看了问答才搞清楚,

马东什么:不手写lightgbm(1)—怎么分桶的​zhuanlan.zhihu.com
What is the LightGBM splitting criterion? · Issue #1774 · microsoft/LightGBM​github.com
8efa6d618e2633257e87d6c7e1a28be8.png

已经有人在github上提问了,按照开发者的意思,和xgboost是一样的。

9a1557d181603f4ed15c32ed9bc6b5fd.png

用的xgboost也许要对特征进行标准化吗?

不用做标准化,但是要对分布不稳定的特征进行处理,比如分箱,log变换之类的,因为我们交叉验证的时候如果特征分布特别不规则,可能每一折的训练集和开发集上划分到的特征差异性比较大,这是包括gbdt算法之外所有算法都 需要进行处理的,机器学习的基本假设是同分布,如果不同数据集的特征分布差异性太大,这样的特征没法直接使用必须要转换一下。

XGBoost或GBDT中怎么控制模型复杂度?XGBoost的参数选择(怎么调参)。。。

自己看参数吧

1.xgboost怎么处理高维稀疏数据?

xgboost原理中的稀疏感知是关于缺失值的,

1c107c506b663d5825ff326a5a56de11.png

就是在非缺失的样本上做分裂然后缺失值根据分别进入左右节点带来的增益来决定要划分到哪个节点。如果是常规意义上的高基数类别特征进行onehot之后的0-1矩阵,xgb没有什么特别的处理方案。

数据标签值都在0-1000范围之内,随机森林和gbdt做回归的值能否超过1000.

80b4096cdf9f03f3e735d9335be17639.png

以原始的gbdt的叶子节点输出为例,假设学习率为1,以mse为损失函数的情况下上面的式子可以变成:

其中n为这个叶子节点的样本数量。。。。。

这个问题。。。我还真没想到什么答案。。。。

7、GBDT为什么用CART回归树做基学习器?

GBDT算法原理深入解析​xudongyang.coding.me

这一篇说的很清晰。

基于梯度提升算法的学习器叫做GBM(Gradient Boosting Machine)。理论上,GBM可以选择各种不同的学习算法作为基学习器。现实中,用得最多的基学习器是决策树。为什么梯度提升方法倾向于选择决策树(通常是CART树)作为基学习器呢?这与决策树算法自身的优点有很大的关系。决策树可以认为是if-then规则的集合,易于理解,可解释性强,预测速度快。同时,决策树算法相比于其他的算法需要更少的特征工程,比如可以不用做特征标准化,可以很好的处理字段缺失的数据,也可以不用关心特征间是否相互依赖等。决策树能够自动组合多个特征,它可以毫无压力地处理特征间的交互关系并且是非参数化的,因此你不必担心异常值或者数据是否线性可分(举个例子,决策树能轻松处理好类别A在某个特征维度x的末端,类别B在中间,然后类别A又出现在特征维度x前端的情况)。不过,单独使用决策树算法时,有容易过拟合缺点。所幸的是,通过各种方法,抑制决策树的复杂性,降低单颗决策树的拟合能力,再通过梯度提升的方法集成多个决策树,最终能够很好的解决过拟合的问题。由此可见,梯度提升方法和决策树学习算法可以互相取长补短,是一对完美的搭档。至于抑制单颗决策树的复杂度的方法有很多,比如限制树的最大深度、限制叶子节点的最少样本数量、限制节点分裂时的最少样本数量、吸收bagging的思想对训练样本采样(subsample),在学习单颗决策树时只使用一部分训练样本、借鉴随机森林的思路在学习单颗决策树时只采样一部分特征、在目标函数中添加正则项惩罚复杂的树结构等。

2、GBDT不擅长处理离散特征,你在应用的时候是怎么处理的

GBDT不擅长处理高基数类别特征,如果基数低,问题也不大。原因可见:

马东什么:为何常规的gbdt和决策树不适用于高基数特征的场景​zhuanlan.zhihu.com

lightgbm和catboost内部对类别特征有自己的特征工程方案,而xgboost这类无法直接处理类别特征的库则一般来说:1、单值离散用编码的方法;2、多值离散用embedding

6、GBDT在回归和多分类当中有什么不同,在预测的时候的流程是怎样的

损失函数不同(废话),预测存在差异。

回归则直接加权求和输出全部基学习器的预测结果,分类还要将预测结果加权求和的结果放到sigmoid或者softmax里面转化为概率值。

1,gbdt如果损失函数换成exponent会怎样,有什么变化?

变成adaboost。

具体可见:

(boost框架的历史回顾中,有空补上)

3.GBDT在什么情况下比逻辑回归算法要差?

高维稀疏的数据集,gbdt对维度超高的稀疏数据集,其正则项约束基本没用,并且决策空间会变成太多零散的决策小空间,具体可见上gbdt为何不好处理高基数类别特征的问题。

而lr的l1正则项可以很好的约束没啥用 的稀疏特征,直接w置0即可。

4、GBDT对输入数据有什么要求,如果效果比较差,可能是什么原因造成的?

如果训练集的效果很差,说明原始数据相对于gbdt算法来说实在太差了,特征基本没什么区分度,xgb这种拟合能力超强的算法都无法很好的拟合;

如果训练集的效果很好测试集很差,并且二者的差距非常大(比如10个点以上),考虑特征分布的问题,应该是有一些强特的分布在训练集和测试集上差异太大了。

如果训练集效果很好,测试集稍差一点,二者差异并不是很大,考虑调参。

xgb和lgb的并行实现的比较

1)特征并行

lgbm特征并行的前提是每个worker留有一份完整的数据集,但是每个worker仅在特征子集上进行最佳切分点的寻找;worker之间需要相互通信,通过比对损失来确定最佳切分点;然后将这个最佳切分点的位置进行全局广播,每个worker进行切分即可。

简单说就是lgb的每一个worker处理一个特征,按列来拆分到多个worker上进行计算的

xgb的特征并行与lgbm的最大不同在于xgb每个worker节点中仅有部分的列数据,也就是垂直切分,每个worker寻找局部最佳切分点,worker之间相互通信,然后在具有最佳切分点的worker上进行节点分裂,再由这个节点广播一下被切分到左右节点的样本索引号,其他worker才能开始分裂。

简单说就是xgb的每一个worker处理所有特征,但是每个worker只处理一部分取值范围里的最佳切分点,比如5个worker对一个特征的取值范围切分为5份,在每一份上计算最佳切分点,然后5份上的5个最佳切分点做比较取最好

一个是竖着切分,一个是横着切分。

二者的区别就导致了lgbm中worker间通信成本明显降低,只需通信一个特征分裂点即可,而xgb中要广播样本索引。

2)数据并行

当数据量很大,特征相对较少时,可采用数据并行策略。

lgbm中先对数据水平切分,每个worker上的数据先建立起局部的直方图,然后合并成全局的直方图,采用直方图相减的方式,先计算样本量少的节点的样本索引,然后直接相减得到另一子节点的样本索引,这个直方图算法使得worker间的通信成本降低一倍,因为只用通信以此样本量少的节点。

xgb中的数据并行也是水平切分,然后单个worker建立局部直方图,再合并为全局,不同在于根据全局直方图进行各个worker上的节点分裂时会单独计算子节点的样本索引,因此效率贼慢,每个worker间的通信量也就变得很大。

3)投票并行(lgbm)

当数据量和维度都很大时,选用投票并行,该方法是数据并行的一个改进。数据并行中的合并直方图的代价相对较大,尤其是当特征维度很大时。

大致思想是:每个worker首先会找到本地的一些优秀的特征,然后进行全局投票,根据投票结果,选择top的特征进行直方图的合并,再寻求全局的最优分割点。这个方法。。。不懂,上述都是搬运来的。。

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参数控制)


14. xgboost里面的lambdarank的损失函数是什么?

15. xgboost在什么地方做的剪枝,怎么做的? 分裂,预剪枝;参数,预剪枝。

16. xgboost如何分布式?特征分布式和数据分布式? 各有什么存在的问题?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入C#类的方法

构造函数 example1: static void Main(string [] args) {SE engineernew SE();engineer.Age25;enginner.Name"艾边成";//省略其他属性赋值操作Console.WriteLine(engineer.SayHi());} 我们知道要使用类的属性和方法,首先要对类进行实例化&…

在linux上处理base64加密和解密

http://snailwarrior.blog.51cto.com/680306/142472/ 2.从标准输入读取文件内容,base64编码并打印到标准输出 [rootlocalhost test]# base64snailwarriorc25haWx3YXJyaW9yCg 我是输入snailwarrior,回车,然后按CtrlD结束文件输入的。 3、对字符…

python3迭代器是什么,python3 迭代器

1. 想要了解 迭代器 ,需要先 知道什么是 可迭代对象。简单点说,可以直接作用于for循环的对象,称之为可迭代对象(Iterable)。1.png可迭代对象,一定实现了__iter__方法。isinstance內建函数,可以判断一个对象是否是某个类…

边缘检测robert原理_机器视觉尺寸检测基础

尺寸测量/边缘检测利用边缘检查的尺寸检查是图像传感器的最新应用趋势。图像传感器可以将检查对象在平面上表现出来,通过边缘检测,测算位置、宽度、角度等。下面将按照处理过程来介绍边缘检查的原理。理解原理有助于优化检查设置。除此之外,还将介绍一些…

linux 查杀php木马,linux上php木马、后门查杀总结

Web Server(Nginx为例)1、为防止跨站感染,要做虚拟主机目录隔离(我是直接利用fpm建立多个程序池达到隔离效果)2、上传目录、include类的库文件目录要禁止代码执行(Nginx正则过滤)3、path_info漏洞修正:if ($request_filename ~* (.*)\.php) {set $php_ur…

Telnet 爆破 kail_【UZI|SN输给DWG后,AD选手被爆破,弹幕刷了半小时Uzi】英雄联盟S10于10月31日终于正式落幕了_科技资讯...

『联盟玩科技摘要_UZI|SN输给DWG后,AD选手被爆破,弹幕刷了半小时Uzi』在SN输给了DWG之后,最大的背锅选手也出来了,AD选手huanfeng成为了这次的背锅选手,毕竟在最重要的第三把比赛中,huanfeng的EZ全程都没有…

20160205.CCPP体系详解(0015天)

程序片段(01):01.杨辉三角.c 内容概要:杨辉三角 #include <stdio.h> #include <stdlib.h>#define N 10//01.杨辉三角: // 1.图形转换:将标准杨辉三角采用标准数组进行模拟 // 2.确定标准数组的图形描述关系: // (1).数组当中第一列的所有元素以及正对角线的…

no.7_qzhai 开心版_开心宝贝GM版下载-开心宝贝GM版安卓下载

开心宝贝GM版是一款经典Q萌风格的仙侠冒险ARPG手游。游戏画面精致唯美&#xff0c;角色刻画活灵活现&#xff0c;动态特效表达细致&#xff0c;原创的剧情故事跌宕起伏&#xff0c;为玩家们奉上了一场殿堂级的视听双重盛宴。Q萌仙侠世界任你探索&#xff0c;快来九妖下载体验一…

魔力耳朵java工作,魔力耳朵

热爱教育、英语流利的小伙伴&#xff0c;小兔子邦妮在等你&#xff01;外教管理岗位职责&#xff1a;1. 协助北美外教的管理&#xff0c;协调外教上课时间&内容&#xff0c;对外教进行平台使用和教学大纲的培训&#xff0c;并在线监督外教上课效果&#xff0c;对突发情况进…

android ContentResolver详解

查询出来的cursor的初始位置是指向第一条记录的前一个位置的cursor.moveToFirst&#xff08;&#xff09;指向查询结果的第一个位置。一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。cursor.moveToNext()是用来做循环的&#xff0c;一般这样来用&a…

咋安装redhatlinux镜像在哪下载_Windows7正版系统安装教程

大家好&#xff0c;今天分享一篇来自装机吧官网(zhuangjiba.com)的图文教程。操作系统在整个计算机系统中具有承上启下的地位。但由于上网的操作系统鱼龙混杂的&#xff0c;很多朋友是不知道在哪下载Windows7正版系统的&#xff0c;所以贴心的小编就整理了这个Windows7正版系统…

termux php 出错,android上的终端——termux

前言在安卓也可以体验终端命令的快感&#xff0c;甚至还可以操作安卓基础硬件。基本命令termux支持apt软件管理和pkg软件管理&#xff0c;首次安装时&#xff0c;系统会默认给出pkg的安装及更新命令&#xff0c;对此不做过多赘述&#xff0c;用过linux的可以直接上手。更换国内…

Duanxx的图像处理学习: 透视变换(一)

当人用眼睛看事物的时候&#xff0c;会感觉到近处的东西是比远处的东西要大一些的&#xff0c;通俗的说&#xff0c;这就是透视。 总的来说。透视变换是将3D的世界转换到2D图像上的一种手段&#xff0c;人的视觉系统和摄像头视觉系统也是基于这一工作原理。 对透视变化的研究&a…

虚拟摄像头 安卓版_林俊杰 ft. M.E.,联同视效大厂数字王国加码虚拟偶像

原标题&#xff1a;林俊杰 ft. .&#xff0c;联同视效大厂数字王国加码虚拟偶像睽违三年,林俊杰携新专《幸存者如你》强势回归,一场「新歌首唱LIVE」在10月30日晚间如约而至。对虚拟科技情有独钟的林俊杰,从未错过每一次变身资深玩家的机会。此番线上视听盛宴的中途,一位「平行…

php获得对象的类型,php 类型(对象)提示

PHP面向对象&#xff1a;类型提示2010-07-06PHP是弱类型语言&#xff0c;向方法传递参数时候也不太区分类型。这样的使用会引起很多的问题&#xff0c;PHP开发者认为&#xff0c;这些问题应该是由代码书写者在书写代码时进行检验以避免。没有类型提示很危险下面的代码可能会出现…

2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)

首先祝自己生日快乐~23咯~ 一 autorelease的概念 autorelease会像C语言的自动变量那样来对待对象实例。当超出作用域(相当于变量作用域)时&#xff0c;对象的实例release实力方法被调用。 另外&#xff0c;同C语言的自动变量不同的是&#xff0c;编程人员可以自己设置变量的作…

iphone屏蔽系统更新_iOS13屏蔽系统更新升级教程

好消息 &#xff01;今天开始可以安装 tvOS13 屏蔽系统升级描述文件了。说起系统屏蔽更新&#xff0c;以前都是利用 tvOS描述文件去屏蔽系统更新&#xff0c;如果你之前有使用过它&#xff0c;你应该知道&#xff0c;一旦安装了&#xff0c;在软件更新就会显示当前系统为最新&a…

oracle批量生成索引,ORACLE迁移时批量导出索引、存储过程,表结构等

[toc]ORACLE迁移中的一些经验(一)批量导出sequence批量导出squence在网上找到这样一条语句&#xff1a;select create sequence || sequence_name || minvalue || min_value || maxvalue || max_value || start with || last_number || increment by || increment_by ||…

myeclipse 怎么安装与激活

摘录自&#xff1a;http://blog.csdn.net/u012318074/article/details/71310553 第一步&#xff1a;安装完成后不要运行MyEclipse 第二步&#xff1a;下载对应的破解文件 第三步&#xff1a;解压并打开破解文件 第四步&#xff1a;打开文件夹patch&#xff0c;将里面的文件全部…

oracle insert select 大 批量 数据_芬兰 Vaisala维萨拉 HM70手持式温湿度表 型号:FL15/HM70+HMP75【北京中西华大吧】...

陈经理18910282263芬兰 Vaisala维萨拉 HM70手持式温湿度表 型号:FL15/HM70HMP75库号&#xff1a;M72537 相对湿度测量范围 0…100 % RH多种语言用户界面显示图形趋势维萨拉HUMICAP 传感器技术3个探头, 温度范围-70 至180 C湿度探头、露点探头和二氧化碳探头均可连接显示多种湿度…