缺失值处理
真实场景中,有很多可能导致产生稀疏。如:数据缺失、某个特征上出现很多0项、人工进行one-hot编码导致大量的0
理论上,数据缺失和数值0的含义是不同的,数值0是有效的
实际上,数值0的处理方式类似缺失值的处理方式,都视为稀疏特征
在xgboost中,数值0的处理方式和缺失值的处理方式是同一的。这只是一个计算上的优化,用于加速稀疏特征的处理速度
对于稀疏特征,只需要对有效值进行处理,无效值则采用默认的分裂方向。
注意每个结点的默认分裂方向可能不同。
XGBoost中实现的方式
在xgboost算法的实现中,允许对数值0进行不同的处理。可以将数值0视作缺失值,也可以将其视作有效值。
如果数值0是有真实意义的,则建议将其视作有效值。
缺失值处理算法
输入:数据集 D = ( x 1 → , y 1 ~ ) , ( x 2 → , y 2 ~ ) , . . . , ( x N → , y N ~ ) D = {(\overrightarrow{x_1},\tilde{y_1}),(\overrightarrow{x_2},\tilde{y_2}),...,(\overrightarrow{x_N},\tilde{y_N})} D=(x1,y1~),(x2,y2~),...,(xN,yN~),其中样本 x i → = ( x i , 1 , x i , 2 , . . . , x i , n ) T \overrightarrow{x_i} = (x_{i,1},x_{i,2},...,x_{i,n})^T xi=(x