接下来,每天推送一道BAT面试题,日积月累,相信大家会从中学到一些东西。最后希望大家顺利拿到自己期盼已久的OFFER.
今天连载两题,都是关于XGBoost的。文中提到的陈大佬即是发明者:陈天奇。
7.为什么XGBoost要用泰勒展开,优势在哪里?
实际上使用二阶泰勒展开是为了xgboost能够【自定义loss function】,如果按照最小二乘法的损失函数直接推导,同样能够得到陈大佬最终的推导式子:
二阶泰勒展开实际不是最小二乘法,平方损失函数的二阶泰勒展开=最小二乘法。但陈佬为何想用二阶泰勒展开呢,我猜是为了xgboost库的可扩展性,因为任何损失函数只要二阶可导即能【复用】陈大佬所做的关于最小二乘法的任何推导。而且泰勒的本质是尽量去模仿一个函数,我猜二阶泰勒展开已经足以近似大量损失函数了,典型的还有基于分类的对数似然损失函数。嘿,这样同一套代码就能完成回归或者分类了,而不是每次都推导一番,重写训练代码。
8.XGBoost如何寻找最优特征?是有放回还是无放回的呢?
XGBoost在训练的过程中给出各个特征的评分,从而表明每个特征对模型训练的重要性。
XGBoost利用梯度优化模型算法, 样本是不放回的,想象一个样本连续重复抽出,梯度来回踏步,这显然不利于收敛。
XGBoost支持子采样, 也就是每轮计算可以不使用全部样本。
参考:
https://www.zhihu.com/question/61374305
本文分享自 程序员郭震zhenguo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!