什么样的模型不需要填充缺失值?

其实不是模型不需要填充缺失值,是写开发工具包的程序员在设计这个函数时已经替我们写好了一个默认的填充值处理的方法。

这样为用户使用模型带来了便利,但同时统一的处理缺失值的方法可能并不适合我们的数据,数据的特征我们只有我们才能精确掌握。

支持缺失值的一些模型

目前我所了解的就是基于树类的模型、贝叶斯网络、神经网络的模型,下面简单介绍下。

1基于树类的模型
1.1随机森林

  方法1(快速简单但效果差) :把数值型变量中的缺失值用该特征的中位数替换,描述型用多数替换原则。
   方法2(耗时费力但效果好):对需要填充的样本和其他样本做相似度测量,通俗来说就是用与其最像的样本来填充。

1.2XGBoost

xgboost处理缺失值的方法和其他树模型不同,xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。
2贝叶斯网络

贝叶斯网络是用来表示变量间连接概率的图形模式,它提供了一种自然的表示因果信息的方法,用来发现数据间的潜在关系。在这个网络中,用节点表示变量,有向边表示变量间的依赖关系。贝叶斯网络仅适合于对领域知识具有一定了解的情况,至少对变量间的依赖关系较清楚的情况。否则直接从数据中学习贝叶斯网的结构不但复杂性较高(随着变量的增加,指数级增加),网络维护代价昂贵,而且它的估计参数较多,为系统带来了高方差,影响了它的预测精度。当在任何一个对象中的缺失值数量很大时,存在指数爆炸的危险。
3神经网络模型

神经网络的鲁棒性强,所以对于缺失数据不是非常敏感。