当前位置:   article > 正文

算法工程师-机器学习模型(处理缺失值)_能够自动处理缺失值的模型

能够自动处理缺失值的模型

title: 机器学习模型–处理缺失值
tags: python,机器学习
grammar_cjkRuby: true

现实生活中的数据集中的样本通常在某系属性上是缺失的,如果属性值缺失的样本数量比较少,我们可以直接简单粗暴的把不完备的样本删除掉,但是如果有大量的样本都有属性值的缺失,那么就不能简单地删除,因为这样删除了大量的样本,对于机器学习模型而言损失了大量有用的信息,训练出来的模型性能会受到影响。数据集如下(数据集来自周志华《机器学习》)

1. 决策树处理缺失值

参考来源:http://blog.csdn.net/u012328159/article/details/79413610

在决策树中处理含有缺失值的样本的时候,需要解决两个问题:

  1. 如何数据缺失的情况下进行增益计算?(比如“色泽”属性有的样本在该属性上的值是缺失的,那么该如何计算“色泽”的信息增益?)
  2. 若样本在该属性上的值是缺失的,那么该如何对这个样本进行划分?(即到底把这个样本划分到哪个结点里?)

具体处理情况如下
在这里插入图片描述

  1. 之后子树分裂时,仍然会把权重乘进去
  2. 注意:训练核测试数据的处理方式时不同的,决策要用到缺失变量,决策树也可以在当前节点做多数投票来决定(选择样本数最多的特征值方向)
  3. 如果有单独的缺失分支,使用此分支。
  4. 把待分类的样本的属性a值分配一个最常出现的a的属性值,然后进行分支预测
  5. 根据其他属性为该待分类样本填充一个属性a值,然后进行分支处理
  6. 在决策树中属性a节点的分支上,遍历属性a节点的所有分支,探索可能所有的分类结果,然后把这些分类结果结合起来一起考虑,按照概率决定一个分类
  7. 待分类样本在到达属性a节点时就终止分类,然后根据此时a节点所覆盖的叶子节点类别状况为其分配一个发生概率最高的类

2 XGBoost处理缺失值

XGBoost模型却能够处理缺失值,也就是说模型允许缺失值存在。XGBoost处理缺失值的方法和其他树模型不同。根据原文中的介绍,XGBoost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。

3 随机森林处理缺失值

  1. 方法1(快速简单但效果差):
    把数值型变量中的缺失值用其所对应的类别中的中位数替换。描述型变量缺失的部分用所对应类别中出现最多的数值替代。
  2. 方法2(耗时费力但效果好):
    虽然依然是便用中位数出现次数最多的数来进行替换,方法2引入了权重。即对需要替换的数据先和其他数据做相似度测量(proximity measurement)也就是下面公式中的Weight,在补全缺失点是相似的点的数据会有更高的权重W。以数值型变量为例:
    在这里插入图片描述

4 什么样的模型对缺失值更敏感?

  1. 树模型对缺失值的敏感度低,大部分时候可以在数据缺失时使用。
  2. 涉及到距离度量时,如计算两个点之间的距离,缺失数据就变得比较重要。因为涉及到"距离"这个概念,那么缺失值处理不当就会导致效果很差,如K近邻算法(KNN)、支持向量机(SVM)。
  3. 线性模型的代价函数(loss function)往往涉及到距离(distance)的计算,计算预测值和真实值之间的差别,这容易导致对缺失值敏感.
  4. 神经网络的鲁棒强,对于缺失数据不是非常敏感,但一般没有那么多数据可供使用。
  5. 贝叶斯模型对于缺失数据也比较稳定,数据量很小的时候选贝叶斯模型。

总体来看,对于有缺失值的数据在经过缺失处理后:

  • 数据量很小,朴素贝叶斯
  • 数据量适中或者较大,用树横型,优先xgboost
  • 数据量较大,也可以用神经网络
  • 避免使用距离度量相关的模型,如KNN和SVM

5 XGBoost判断特征重要程度的三种指标

  1. weight - 该特征在所有树中被用作分割样本的特征的次数。
  2. gain - 在所有树中的平均增益。
  3. cover - 在树中使用该特征时的平均覆盖范围。(还不是特别明白)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/330819
推荐阅读
相关标签
  

闽ICP备14008679号