XGBoost预排序算法的疑问(求大佬解答)
在XGBoost中,使用预排序的方法来处理节点分裂,会先对每个特征按照特征值大小进行排序,然后保存为block结构,后面的迭代中会重复地使用这个结构,使计算量大大减小。对这一点存在一些疑问:举例说明,假设一个样本有“年龄”,“身高”两个特征,取值分别为[23,24,25,26,27,99],[244,180,181,175,172,168]。预排序后分别为[23,24,25,26,27,99],[
·
在XGBoost中,使用预排序的方法来处理节点分裂,会先对每个特征按照特征值大小进行排序,然后保存为block结构,后面的迭代中会重复地使用这个结构,使计算量大大减小。
对这一点存在一些疑问:
举例说明,假设一个样本有“年龄”,“身高”两个特征,取值分别为
[23,24,25,26,27,99],[244,180,181,175,172,168]。
预排序后分别为
[23,24,25,26,27,99],[168,172,175,180,181,244]。
假设第一次选择“年龄”为26进行分裂,分裂后节点左侧的样本为“年龄”[23,24,25]
,身高[244,180,181]
,节点右侧样本为“年龄”[27,99]
,身高[172,168]
。此时,因为切分后样本的变化,身高数据与预排序结果不同,需要重新进行排序,计算节点分裂增益。
如果上述过程没有错误的话,预排序并没有使计算量大幅度减小。不知道有没有哪位大佬可以解答我的困惑。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)