搜索
写经验 领红包

树模型需要处理缺失值吗(树模型的损失函数)

导语:机器学习:聊聊树模型中处理数据缺失值的思路

何为缺失值?

缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类,分组,删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。所以在日常训练模型中,数据集中对缺失值的处理是必不可少的工作之一,以下简单介绍下树模型的缺失值处理方案和一点经验之谈。

随机森林处理缺失值

方案一(快速简单但效果一般):

把数值型变量中的缺失值用其所对应类别中的中位数代替。把描述型变量中的缺失值用所对应类别中出现最多的数替代。

为什么可以选择上述二值作为可替代类型出现?在数值型变量中,通常情况下中位数的效果与算术平均数相接近,但如果数列中出现极端情况,用中位数作为代表值要比用算术平均数的效果要好。

方案二(耗时费力但效果较好):

这种方法只能对训练集进行处理,首先对缺失的值进行粗略地填充,可以是上述方案一的方式,然后利用随机森林分类后,对已填充的值进行更新。

更新的方法是若是连续值,其更新后填充量为非缺失值之间的近似值加权的平均值;如果是分类变量,则将其替换为非缺失值之间频率邻近度加权的平均值。

然后利用再更新后的填充后的值重新构建一个森林,找到新的填充并再次迭代。 一般来说4-6次迭代就足够了。

XGBOOST处理缺失值

XGBOOST处理缺失值的方法与其他树模型不同,这种方法有个假设前提是训练集和预测集的数据分布相一致,其缺失值的分布也相同。论文作者陈天奇描述是将缺失值当作稀疏矩阵对待,本身的节点分裂时不考虑缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的哪一个。如果训练中没有数据缺失,预测中出现数据缺失,那么默认被分类到右子树。具体算法如下:

经验之谈

1.线性模型对缺失值比较敏感,直观来看线性模型希望对每个样本都想尽量拟合,这时缺失值如果不做适当地处理会对结果造成较大的影响;

2.树模型对缺失值的敏感较低,因为树模型在处理缺失值时候会选择性忽略缺失值,然后采取属性选择度(信息增益、增益率、基尼指数)对剩下的样本进行分裂;

3.KNN和SVM等这些涉及到“距离”的模型会对缺失值比较敏感;

4.贝叶斯模型和神经网络对缺失值的敏感性较低。

本文内容由快快网络小心整理编辑!