缺失值处理
算法:随机森林、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