参考回答:
(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的值,也要保存这个值的顺序html" target="_blank">索引,这些值需要32位的浮点数来保存。2)计算上的优势,预排序算法在选择好分裂特征计算分裂收益时需要遍历所有样本的特征值,时间为(#data),而直方图算法只需要遍历桶就行了,时间为(#bin)
(3)直方图做差加速,一个子节点的直方图可以通过父节点的直方图减去兄弟节点的直方图得到,从而加速计算。
(4)lightgbm支持直接输入categorical 的feature,在对离散特征分裂时,每个取值都当作一个桶,分裂时的增益算的是”是否属于某个category“的gain。类似于one-hot编码。
(5)xgboost在每一层都动态构建直方图,因为xgboost的直方图算法不是针对某个特定的feature,而是所有feature共享一个直方图(每个样本的权重是二阶导),所以每一层都要重新构建直方图,而lightgbm中对每个特征都有一个直方图,所以构建一次直方图就够了。
其适用场景根据实际项目和两种算法的优点进行选择。
本文向大家介绍XGBOOST和GDBT的区别?相关面试题,主要包含被问及XGBOOST和GDBT的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: GDBT在函数空间中利用梯度下降法进行优化而XGB在函数空间中使用了牛顿法进行优化。即GDBT在优化中使用了一阶导数信息,而XGB对损失函数进行了二阶泰勒展开,用到了一阶和二阶倒数信息。XGB在损失函数中加入了正则项(树叶子节点个数,每个叶
本文向大家介绍TCP和UDP的区别和各自适用的场景相关面试题,主要包含被问及TCP和UDP的区别和各自适用的场景时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1)TCP和UDP区别 1) 连接 TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接。 UDP无连接。 2) 服务对象 TCP是点对点的两点间服务,即一条TCP连接只能有两个端点; UDP支持一对一,一对多,多对一,多对
本文向大家介绍C#引用类型和值类型的适用场合和区别,包括了C#引用类型和值类型的适用场合和区别的使用技巧和注意事项,需要的朋友参考一下 1.值类型 值类型包括:数值类型,结构体,bool型,用户定义的结构体,枚举,可空类型。 值类型的变量直接存储数据,分配在托管栈中。变量会在创建它们的方法返回时自动释放。 所有的值类型都是密封(seal)的,所以无法派生出新的值类型。 2.引用类型 引用类型包括:
本文向大家介绍jQuery和Zepto的区别?各自的使用场景?相关面试题,主要包含被问及jQuery和Zepto的区别?各自的使用场景?时的应答技巧和注意事项,需要的朋友参考一下 创建$的方式不同。前者略微要大,后者略微小点。 场景....emmmm
本文向大家介绍协同过滤的itemCF,userCF区别适用场景相关面试题,主要包含被问及协同过滤的itemCF,userCF区别适用场景时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Item CF 和 User CF两个方法都能很好的给出推荐,并可以达到不错的效果。但是他们之间还是有不同之处的,而且适用性也有区别。下面进行一下对比 计算复杂度: Item CF 和 User CF 是基于
有人能给我解释一下在列表类中使用E或Object的区别吗,以及它们的单一用法和定义。我必须在LinkedList中使用它们来实现方法。