缺失值处理

算法:随机森林、XGboost可以接受数据部分属性存在缺失值,解决方法:

通用方法:

1、补一个值:常见的是补中位数、均值等;

2、使用模型预测缺失值;

3、直接忽略,将缺失作为一种信息给模型学习;

RF:

1、使用中位数替换:快速简单但效果差;

2、引入权重,计算对应向量与其他数据之间的相似度,计算平均权重,计算费力但效果好。

--训练时样本中存在缺失值,如何处理?

计算分裂损失减少值时,忽略特征缺失的样本,最终计算的值乘以比例,实际计算参与的样本数除以总样本数;

例子:假设10个样本,第10个样本数值缺失,将前9个数据组成新的样本集,在新样本上按照正常策略计算a属性的增益,乘以0.9;

--分类属性选择完成,对训练样本分类,发现样本属性缺失怎么办?

将样本分配到所有子节点中,权重由1变为具有属性a的样本被划分程的子集样本个数的相对比率,计算错误率时,需要考虑样本权重;

--训练完成,给测试集样本分类,有缺失值怎么办?

分类时,如果待分类样本有缺失变量,而决策树决策过程中没有用到这些变量,则决策过程和没有缺失的数据一样;否则,如果决策要用到缺失变量,决策树也可以在当前节点做多数投票来决定(选择样本数最多的特征值方向);

Xgboost处理缺失值:

将缺失值当作稀疏矩阵看待,本身在节点分裂的时候不考虑缺失值的数值,缺失值会被分到左右子树进行计算损失,选择较优的一部分,如果训练中没有数据损失,预测时出现数据缺失,默认分类树到右子树。

 

什么样的模型对数据缺失敏感?

1、树模型对缺失值敏感度低;

2、涉及距离计算度量相关的模型对数据敏感;

3、线性模型的代价函数往往涉及距离计算,计算预测值与真实值之间的差距;

4、神经网络鲁棒性强,对数据缺失不敏感;

5、贝叶斯模型对缺失数据也比较稳定,数据量小的时候选择贝叶斯模型;

 

总结:

数据量小,朴素贝叶斯;

数据量适中:树模型,Xgboost;

数据量较大:神经网络;

数据值缺失:尽量避免线性模型:KNN、SVM、LR

 

posted @ 2021-03-17 19:53  Qian1996  阅读(361)  评论(0编辑  收藏  举报