SKlearn--用户手册 -5.4.缺失值的插补(中文版)

5.4.缺失值的插补

    由于各种原因,许多真实世界的数据集包含缺少的值,这些值通常被编码为空白、nan或其他占位符。然而,这些数据集与Scikit学习估计不兼容,Scikit学习估计假定数组中的所有值都是数字,并且都具有和保持意义。使用不完整数据集的基本策略是丢弃包含缺少值的整行和/或整列。然而,这是以丢失可能有价值的数据(即使不完整)为代价的。一个更好的策略是输入缺失的值,即从已知的数据部分推断它们。见常用术语表和关于插补的API元素条目。

5.4.1.单变量 与 多变量 插补

    一种插补算法是单变量算法 SimpleImputer,它只使用第i个特征维度中不缺失的值(例如:插补.单纯形插补:e.g:impute.SimpleImputer)来插补第 i 个特征维度中的值。相比之下,多变量插补算法使用整个可用特征维数集来估计缺失值(例如: 插补.迭代插补, e.g. impute.IterativeImputer)。

5.4.2.单变量特征插补

    simpleinputer 类提供了输入缺失值的基本策略。缺失值可以用提供的常量值或使用缺失值所在列的统计信息(平均值、中位数或 众数 等)进行输入。此类还允许不同的缺失值编码。

    以下代码段演示如何使用包含 缺少值(编码为:np.nan) 的列(axis = 0)的 平均值 替换 缺少值:

SimpleInputer类还支持稀疏矩阵:

    请注意,此格式不用于在矩阵中隐式存储缺少的值,因为它将在转换时对其进行加密。由0编码的缺少值必须与密集输入一起使用。
    当使用most_frequent众数”或 'constant固定值”'策略时,simpleinputer类还支持以 字符串值  或  panda类别  表示的类别数据:

5.4.3.多元特征插补
    一种更复杂的方法是使用迭代器  IterativeImputer 类,该类将每个 missing value 的特征建模为其他特征的函数,并使用该估计进行插补。它是以循环的方式实现的:在每个步骤中,一个特征列被指定为输出 y,而其他特征列被视为输入 X 。对于已知 y,回归量适合(X,y)。然后,回归量用于预测 y 的缺失值。对于 n 迭代方式,然后对 max-iter 插补轮进行重复。最后一轮插补的结果被返回。
    注意:
    这种估计目前仍处于experimental 实验阶段:预测和 API 可能在没有任何下降周期的情况下发生变化。要使用它,需要显式导入 启用  enable_iterative_imputer

    SimpleImputer 单纯形 和 IterativeImputer 迭代输入都可以在管道中用作构建支持插补的复合估计量的方法。请参见Imputing missing values before building an estimator 在构建估计量之前输入缺少的值。

5.4.3.1.迭代输入的灵活性

    R数据科学生态系统中有许多成熟的插补包:amelia、mi、mice、missforest等。missforest很流行,并且是不同顺序插补算法的一个特殊实例,所有这些算法都可以通过传入diff来使用迭代插补器来实现。用于预测缺失特征值的不同回归量。对于missforest,这个回归量是一个随机森林。参见sphx_glr_auto_examples_plot_interactivative_imputer_variants_comparison.py。

5.4.3.2.多重插补与单一插补

    在统计学领域,经常会生成和进行多次插补,例如,为单个特征矩阵生成m个独立的插补。然后,对这 M 个插补中的的每一个插补都将进行后续的分析管道(例如,特征工程、聚类、回归、分类)。这个 m 插补的最终分析结果(例如,保留验证错误)可以帮助数据科学家了解由于缺失值导本身固有的不确定性而导致的分析结果差异性。上述做法称为多重插补 IterativeImputer

    我们的迭代式插补器的实现受到了R MICE 软件包的启发(通过链状方程进行多变量插补)[1],但与之不同的是,返回的是单个插补而不是多个插补。但是,当 sample_posterior=True 即:样本的后验值为真时,IterativeImputer 迭代输入法也可用于
多次输入,方法是将其重复应用于具有不同随机种子的同一数据集。参见第4章[2]中关于多重与单一插补的更多讨论。

    在预测和分类的背景下,当用户对由于缺失值而导致的测量不确定度不感兴趣时,单插补与多重插补的效用如何,仍然是一个悬而未决的问题。

    注意,不允许调用 IterativeImputer 迭代器的Transform方法来更改样本数。因此,一次调用transform 转换 无法 实现多个插补。

5.4.4.工具书类

[1]Stef van Buuren,Karin Groothuis-Oudshorn(2011年)。“小鼠:R中连锁方程的多变量插补”。统计软件杂志45:1-67.

[2]Roderick J A Little和Donald B Rubin(1986年)。缺失数据的统计分析。约翰威利儿子公司,纽约,纽约,美国。

5.4.5.标记输入值

    MissingIndicator Transformer 可用于将数据集转换为相应的二进制矩阵,以指示数据集中是否存在缺少的值。这种转换与插补结合起来是有用的。当使用插补时,保存关于哪些值丢失的信息可以提供信息。

    NaN 通常用作缺少值的占位符。但是,它强制数据类型为 float。缺少的参数允许指定其他占位符,如整数。在下面的示例中,我们将使用-1作为缺少的值:

  Features参数 用于选择为其构建遮罩的功能。默认情况下,它是“'missing-only'”,返回在 fit 时包含缺少值的功能的输入掩码:


features参数可以设置为“all”以返回所有功能,无论它们是否包含缺少的值:

    在管道中使用 MissingIndicator 时,请确保使用 FeatureUnion 或 ColumnTransformer 将指示器功能添加到常规功能中。首先,我们获取 IRIS 数据集,并向其添加一些缺少的值。

    现在我们创建一个功能联合。为了使分类器能够处理这些数据,将使用simpleinputer输入所有特性。此外,它还添加了MissingIndicator中的指示器变量。

   

    当然,我们不能用变压器做任何预测。我们应该用分类器(例如决策树分类器)将其包装在管道中,以便能够进行预测。

猜你喜欢

转载自blog.csdn.net/lee_x_lee/article/details/97251052