机器学习模型支持缺失值的那些事儿
之前读过一些别人的文章,对于有些模型可以支持缺失数据这件事有点印象,最近开始做一个新的项目,缺失大量的数据,所以就想用这些支持缺失值的模型完成工作。
机器学习模型如何支持缺失值
其实,这个支持并不是说算法本身就不考虑缺失值了,而是开发这个包的程序员帮助你实现了数据预处理,也就是数据填充的工作。
支持缺失值的一些模型
目前我所了解的就是基于树类的模型、贝叶斯网络、神经网络的模型,下面简单介绍下。
基于树类的模型
随机森林
- 把数值型变量中的缺失值用该特征的中位数替换,描述型用多数替换原则。
- 对需要填充的样本和其他样本做相似度测量,通俗来说就是用与其最像的样本来填充。
XGBoost
xgboost处理缺失值的方法和其他树模型不同,xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。
贝叶斯网络
贝叶斯网络是用来表示变量间连接概率的图形模式,它提供了一种自然的表示因果信息的方法,用来发现数据间的潜在关系。在这个网络中,用节点表示变量,有向边表示变量间的依赖关系。贝叶斯网络仅适合于对领域知识具有一定了解的情况,至少对变量间的依赖关系较清楚的情况。否则直接从数据中学习贝叶斯网的结构不但复杂性较高(随着变量的增加,指数级增加),网络维护代价昂贵,而且它的估计参数较多,为系统带来了高方差,影响了它的预测精度。当在任何一个对象中的缺失值数量很大时,存在指数爆炸的危险。
神经网络模型
神经网络的鲁棒性强,所以对于缺失数据不是非常敏感。
参考:https://blog.csdn.net/yh0vlde8vg8ep9vge/article/details/78265671