RF、GBDT、XGBOOST常见面试算法整理

1、  RF(随机森林)与GBDT之间的区别

相同点:

1)都是由多棵树组成的

2)最终的结果都是由多棵树一起决定

不同点:

1)  组成随机森林的树可以是分类树也可以是回归树,而GBDT只由回归树组成

2)  组成随机森林的树可是并行生成,而GBDT只能是串行生成

3)  随机森林的结果是多棵树表决决定,而GBDT则是多棵树累加之和

4)  随机森林对异常值不敏感,而GBDT对异常值比较敏感

5)  随机森林是通过减少模型的方差来提高性能,而GBDT是减少模型的偏差来提高性能

6)  随机森林不需要进行数据预处理、归一化,而GBDT需要进行归一化

2、  分类树与回归树的区别

1)  分类树使用信息增益或者增益比来划分节点;每个节点的类别经投票数额决定测试样本的类别;

2)  回归树使用最小化均方差划分节点;每个节点样本的均值作为测试样本的回归预测值

3、  GBDT的核心

1)  GBDT的核心就在于每一棵树都建立在之前所学的所有树的绝对值残差,这个残差就是一个加预测值后的真实值的累加量

4、  XGBOOST和GBDT的区别

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

2)  节点分裂的方式不同,gbdt是用gini系数,xgboost是经过优化推导后的。

3)  传统的GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。

4)  xgboost在代价函数里加入了正则项,用于控制模型得复杂度,降低了过拟合的可能性。正则项里包含了树的叶子节点的个数、每个叶子节点上输出的score的L2模的平方和。

5)  shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);

6)  列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过 拟合,还能减少计算;

7)  对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动 学习出它的分裂方向;

8)  xgboost工具支持并行。注意xgboost的并行并不是tree粒度的并行,xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复的使用这个结构,大大减小计算量。这个block结构也使得并行成为可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

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

10)              对缺失值处理。对于特征的值有缺失样本,xgboost可以自动学习出他的分裂方向。

1)    为什么xgboost要用泰勒展开,优势在哪里?

xgboost使用了一阶和二阶偏导,二阶导数有利于梯度下降的更快更准。使用泰勒展开取得函数做自变量得二阶导数形式,可以在不选定损失函数具体形式的情况下,仅仅依靠输入数据的值就可以进行叶子分裂优化计算,本质上也就把损失函数的选取和模型算法优化/参数选择分开了,这种去耦合增加了xgboost的适用性,使得它按需选取损失函数,可以用于分类,也可以用于回归

5、  GBDT怎样设置单颗树的停止生长条件?

1)  节点分裂时的最小样本数

2)  树的最大深度

3)  最多叶子节点数

4)  Loss满足约束条件

6、  GBDT如何评估特征值的权重大小?

1)  通过计算每个特征在训练集下的信息增益,最后计算每个特征信息增益与所有特征信息增益之和的比例为权重值

2)  借鉴投票机制。用相同的GBDT参数对w每个特征训练出一个模型,然后在该模型下计算每个特征正确分类的个数,最后计算每个特征正确分类的个数与所有正确分类个数之和的比例为权重值

7、  GBDT当增加样本数量时,训练时长是线性增加吗?

不是的,因为生成单棵决策树时,对于损失函数极小值与样本数量N不是线性相关的

8、  当增加树的棵数时,训练时长是线性增加吗?

不是的,因为每棵树的生成时间复杂度O(N)不同

9、  当增加一棵树叶子节点数目时,训练时长是线性增加吗?

不是的,叶子节点数和每棵树的生成之间复杂度O(N)不成正比

10、每个节点上都保存什么信息?

中间节点保存某个特征的分割值,叶节点保存预测是某个类别的概率

11、如何防止过拟合

1)增加样本,移除噪声

2)减少特征,保留一些重要的特征

3)对样本进行采样,就是在构建树的时候,不是把所有的样本都作为输入,而是选择一部分数据作为子集

4)对特征进行采样化,和对样本采样基本一致,就是在每次建树的时候只对部分的特征进行切分

12、GBDT中哪些部分可以并行

1)计算每个样本的负梯度时

2)分裂挑选最佳特征及其分割点时,对特征计算相应的误差及均值时

3)更新每个样本的负梯度时

4)最后预测的过程当中,每个样本将之前的所有树的结果累加的时候

13、树生成畸形树,会带来哪些危害,如何预防?

在生成树的过程中,加入树不平衡的约束条件。这种约束条件可以是用户自定义的。例如对样本集中分到某个节点,而另一个节点的样本很少的情况进行惩罚。

原文地址:https://www.cnblogs.com/zhibei/p/9384382.html

时间: 2024-10-28 07:56:01

RF、GBDT、XGBOOST常见面试算法整理的相关文章

几种常见模式识别算法整理和总结

这学期选了门模式识别的课.发现最常见的一种情况就是,书上写的老师ppt上写的都看不懂,然后绕了一大圈去自己查资料理解,回头看看发现,Ah-ha,原来本质的原理那么简单,自己一開始仅仅只是被那些看似formidable的细节吓到了.所以在这里把自己所学的一些点记录下来,供备忘,也供參考. 1. K-Nearest Neighbor K-NN能够说是一种最直接的用来分类未知数据的方法.基本通过以下这张图跟文字说明就能够明确K-NN是干什么的 简单来说,K-NN能够看成:有那么一堆你已经知道分类的数据

常见面试问题整理系列之--多线程

1. 线程的优先级分几级,默认级别是什么优先级分为1-10共10个等级,1表示最低优先级,5是默认级别:t.setPriority()用来设定线程的优先级,需要在线程开始方法被调用之前进行设定:可以使用MIN_PRIORITY(1),MAX_PRIORITY(10),NORM_PRIORITY(5)来设定优先级. 2. 如何实现线程同步(1)同步方法即有synchronized关键字修饰的方法:由于Java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法.在调用该方法之前,

大数据常见面试算法题复习

1.海量日志数据,提取出某日访问百度次数最多的那个IP. 解:ip个数是4个0到256的数字来表示.所以他是2^32个. 扫描一下日志:直接把所有第一个数字是n的放到一个文件n里面.这样我们有256个文件了. 对每一个小文件,他里面找到访问百度次数最多的ip(可以字典计数).然后得到256个ip.在256个ip里面找最大的.整体效率O(N) 2.假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个.一个查询串的重复度越高,说明查询它的用户越多,也就

python常见面试算法

一.冒泡排序 '''冒泡排序'''# coding:utf-8list = [1, 13, 5, 35, 6, 9, 10]s = range(len(list))[::-1]print(s)for i in s: for j in range(i): if list[j] > list[j +1 ]: list[j], list[j + 1] = list[j + 1], list[j]print(list) 原文地址:https://www.cnblogs.com/queenz-852/p/

【整理】常见排序算法及其时间复杂度总结

原文出处: 1. 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇 2. 面试常用算法总结--排序算法(java版) 3. 常见排序算法小结 本篇主要整理了冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序,堆排序七种常见算法,是从上面三篇博文中摘抄整理的,非原创. 一.冒泡排序 主要思路是: 通过交换相邻的两个数变成小数在前大数在后,这样每次遍历后,最大的数就"沉"到最后面了.重复N次即可以使数组有序. 冒泡排序改进1: 在某次遍历中,如果没有

【转】常见面试之机器学习算法思想简单梳理

转:http://www.chinakdd.com/article-oyU85v018dQL0Iu.html 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内

机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

http://www.cnblogs.com/tornadomeet/p/3395593.html 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大.

常见面试之机器学习算法思想简单梳理

http://www.cnblogs.com/tornadomeet/p/3395593.html (转) 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内大

常见面试之机器学习算法思想简单梳理【转】

前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内大点的公司里百度,阿里,腾讯,网易,搜狐,华为(华为的岗位基本都是随机分配,机器学习等岗位基本面向的是博士)等