决策树、RF、xgboost如何处理缺失值?判断特征重要性?缺失值不敏感?

时间:2024-05-31 15:01:40

1.随机森林模型怎么处理异常值?

隨机森:林是已故统计学家Leo Breiman提出的,和gradient boosted tree样,它的基模型是决策树。在介绍RF时,Breiman就提出两种解决缺失值的方去 (Random forests - classification description):

方法1(快速简草但效果差)

把数值型变畺(numerical variables)中的缺失值用其所对应的类别中 (class)的中位数(median)替换。描述型变畺(categorical variables)缺失的部分用所对应类别中出现最多的数值替代(most frequent non-missing value)以数值型变悬为例:

决策树、RF、xgboost如何处理缺失值?判断特征重要性?缺失值不敏感?

 方法2(耗时费力但效果好):虽然依然是便用中位数出现次敎最多的数来进行替换,方法2引入 了权重。即对需要替换的数据先和其他数据做相似度测量(proximity measurement)也就是下面 公式中的Weight,在补全缺失点是相似的点的数据会有更高的权重W。以数值型变畺为例:

决策树、RF、xgboost如何处理缺失值?判断特征重要性?缺失值不敏感?

Breiman说明了第二种方法的效果更好,但雲要的时间更长,这也是为什么工具包中不提供数据补全的功能,因为会影响到工具包的效率。

在训练、验证、测试含有缺失值时怎么办?

1. 在选择分裂属性的时候,训练样本存在缺失值,如何处理?(计算分裂损失减少值时,忽略特征缺失的样本,最终计算的值乘以比例(实际参与计算的样本数除以总的样本数))

假如你使用ID3算法,那么选择分类属性时,就要计算所有属性的熵增(信息增益,Gain)。假设10个样本,属性是a,b,c。在计算a属性熵时发现,第10个样本的a属性缺失,那么就把第10个样本去掉,前9个样本组成新的样本集,在新样本集上按正常方法计算a属性的熵增。然后结果乘0.9(新样本占raw样本的比例),就是a属性最终的熵。

2. 分类属性选择完成,对训练样本分类,发现样本属性缺失怎么办?(将该样本分配到所有子节点中,权重由1变为具有属性a的样本被划分成的子集样本个数的相对比率,计算错误率的时候,需要考虑到样本权重)

比如该节点是根据a属性划分,但是待分类样本a属性缺失,怎么办呢?假设a属性离散,有1,2两种取值,那么就把该样本分配到两个子节点中去,但是权重由1变为相应离散值个数占样本的比例。然后计算错误率的时候,注意,不是每个样本都是权重为1,存在分数。

3. 训练完成,给测试集样本分类,有缺失值怎么办?(分类时,如果待分类样本有缺失变量,而决策树决策过程中没有用到这些变量,则决策过程和没有缺失的数据一样;否则,如果决策要用到缺失变量,决策树也可以在当前节点做多数投票来决定(选择样本数最多的特征值方向)。)

(U)如果有单独的缺失分支,使用此分支。(c)把待分类的样本的属性a值分配一个最常出现的a的属性值,然后进行分支预测。(S)根据其他属性为该待分类样本填充一个属性a值,然后进行分支处理。(F)在决策树中属性a节点的分支上,遍历属性a节点的所有分支,探索可能所有的分类结果,然后把这些分类结果结合起来一起考虑,按照概率决定一个分类。(H)待分类样本在到达属性a节点时就终止分类,然后根据此时a节点所覆盖的叶子节点类别状况为其分配一个发生概率最高的类。

2.xgboost怎幺处理缺失值?

xgboost处理缺失值的方法和其他树模型不同。根据作者TianqiChen在论文[1]中章节3.4的介绍,xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计层损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。具体的介绍可以参考[2,3]。

决策树、RF、xgboost如何处理缺失值?判断特征重要性?缺失值不敏感?

这样的处理方法固然巧妙,但也有风险:假设了训练数据和预测数据的分布相同,比如缺失值的分布也相同,不过直觉上应该影响不是很大。

3.什么样的模型对缺失值更敏感?

  1. 树模型对缺失值的敏感度低,大部分时候可以在数据缺失时时使用。
  2. 涉及到距离度量(distancemeasurement)时,如计算两个点之间的距离,缺失数据就变得比较重要。因为涉及到"距离离"这个概念,那么缺失值处理不当就会导致效果很差,如K近邻算法(KNN)、支持向量机(SVM)。
  3. 线性模型的代价函数(loss function)往往涉及到距离(distance)的计算,计罰筛则值和真实值之间的差别,这容易导致对缺失值敏感。
  4. 神经网络的鲁棒强,对于缺失数据不是非常敏感,但一|g没有那么多数据可供使用。
  5. 贝叶斯模型对于缺失数据也比较稳定,数据量很小的时候雜贝叶斯模型。

总体来看,对于有缺失值的数据在经过缺失处理后:

 

  • 数据量很小,朴素贝叶斯
  • 数据量适中或者较大,用树横型,优先xgboost
  • 数据量较大,也可以用神经网络
  • 避免使用距离度量相关的模型,如KNN和SVM

4.xgboost 判断特征重要程度的三种指标

get_fscore 有三种种评判特征重要程度的方法:

‘weight’ - the number of times a feature is used to split the data across all trees. ‘gain’ - the average gain of the feature when it is used in trees. ‘cover’ - the average coverage of the feature when it is used in trees.

weight - 该特征在所有树中被用作分割样本的特征的次数。

gain - 在所有树中的平均增益。

cover - 在树中使用该特征时的平均覆盖范围。(还不是特别明白)

 

---------------------------------ending------------------------------------

参考原文:https://www.zhihu.com/question/58230411