xgboost之分位点算法
1. 基本概念
1.1 分位点
输入数据: 14, 19, 3, 15, 4, 6, 1, 13, 13, 7, 11, 8, 4, 5, 15, 2
则排序后,该组数据为: 1, 2, 3, 4, 4, 5, 6, 7, 8, 11, 13, 13, 14, 15, 15, 19. 如下图所示:
在上面的序列中,
- 第1小的数是什么? 很明显是:1 ()
- 第4小的数是什么? 答案是:4 ()
- 第50%小的数是什么? 50% * 16 = 8(), 则答案为:7
什么是分位点呢? ϕ-quantile表示 的元素,其中,为序列中元素的个数。例如,在上面的例子中:
- 0.25-quantile是什么? ,所以答案为:4
- 0.5-quantile是什么? ,所以答案为:7
1.2 ε-approximate 分位点
假定序列的大小为,给定误差和,其 分位点为序列中的一些元素,且这些元素的rank值满足:。以上面的序列为例,给定,此时,则rank值在区间的元素为:,即: *0.1-appoximate 0.5-quantile*为:
注意:ϕ-quantile对应区间的计算方法在参考[3]和参考[4]有所不同(是否取整,如何取整),这里采用参考[3]中的方法
1.3 quantile summary
ε-approximate quantile summary 是一种数据结构,该数据结构能够以 的精度计算任意的分位查询。当一个序列无法全部加载到内存时,常常采用quantile suammary近似的计算分位点。
An ε-approximate quantile summary of a sequence of N elements is a data structure that can answer quantile queries about the sequence to within a precision of εN [5].
下图展示了上面序列的一个quantile suammary,可以看出:quantile summary中value是原序列的一个子集,通过这种方式就能达到减少数据量的效果。
如何利用quantile summary呢?
第2小的数是什么? 在上面的quantile summary中,与2最近的rank为1,则答案近似为:1 () 第25%小的数是什么? (),在上面的quantile summary中,与4最近的rank为4,则答案“近似”为:4()
注意:在quantile summary中,需要保留原序列中的最小值和最大值。
2. 加权分位点
在上面的描述中,每个数据的计数都为1,即权重都为1,所以rank的取值也都是整数。在xgboost中,每个样本的权重会出现小数,此时会出现这这样的情况:“第0.5个元素是什么?”。如下图所示,第0.5个元素为:3。
当数据量非常大时,也需要使用quantile summary的方式来近似计算分位点。
在xgboost中,需要根据特征值以及样本的权重分布,近似计算特征值的分位点,实现近似分割算法。近似计算特征值分位点的算法称为:weighted quantile sketch[2],该算法满足quantile summary通常的两个操作:merge和prune。
2.1 定义和结论
2.1.1 基本定义
给定multi-set ,其中:,假定顺序为:升序。定义两个排序函数,
这两个函数对应上面的rank取值,分别表示特征值 rank取值的最小值和最大值,这里需要注意函数的定义域。
由于D是multi-set,所以可能存在完全相同的 。
定义权重函数:
整个数据集上的权重和定义为:
2.1.2 quantile summary of weighted data
加权数据的quantile suammary定义为四元组:
其中: ,
满足以下条件:
- 对于所有的,满足,且分别是最小值和最大值,即:
- 三个函数:,并且有:1) ; 2) ;3) 。当时,取得等号
- ,并且:
提示: ,严格递增,和之间可能包含很多元素,但这些元素并不在summary中(所以才有第3条特性)
2.1.3 函数定义域扩展
函数的定义域为,现将其扩展到实数域。
当时,
当时,
当时,
扩展后的函数仍然满足上面三个条件。
2.1.4 ε-approximate quantile summary
给定quantile suammary , 对于任意的,如果满足:
则 为 ε-approximate quantile summary。
对于, 当且仅当下面两个条件满足时,其为ε-approximate quantile summary:
对于上面第二个不等式,可以理解为:开区间 中权重之和,由此可以与“分桶”相结合。
2.2 初始化
给定multi-set ,可以定义为:, 且对于:
此时,是0-approximate quantile summary.
2.2 merge
假定:
令, 合并后的quantile sumamry为: 满足:
如果是-approximate quantile summary以及是-approximate quantile summary, 则: 为 -approximate quantile summary。
2.3 prune
给定 , 其中: ,给定memory budget , prune操作会返回一个新的quantile summary
其中,
1、 , 且:
2、 中的与原summary保持一致;
并且 是 -approximate quantile summary。