Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在特征向量中输入多个缺失值_Python_R_Machine Learning_Missing Data - Fatal编程技术网

Python 在特征向量中输入多个缺失值

Python 在特征向量中输入多个缺失值,python,r,machine-learning,missing-data,Python,R,Machine Learning,Missing Data,编辑的帖子 这是一个简短的,有点澄清的版本,原来的职位 我们有一个训练数据集(一些特征是显著相关的)。要素空间有20个维度(全部连续) 我们需要使用训练数据训练一个非参数(大多数特征形成非线性子空间,我们不能为其中任何一个假设分布)输入(kNN或基于树的回归) 我们需要使用经过训练的插补器预测查询数据中的多个缺失值(一个查询特征向量最多可以有13个缺失特征,因此插补器应该处理缺失特征的任意组合)注意不应使用查询数据以任何方式重新训练/拟合插补器(就像我目前发现的所有主流R软件包中一样:Ameli

编辑的帖子

这是一个简短的,有点澄清的版本,原来的职位

  • 我们有一个训练数据集(一些特征是显著相关的)。要素空间有20个维度(全部连续)
  • 我们需要使用训练数据训练一个非参数(大多数特征形成非线性子空间,我们不能为其中任何一个假设分布)输入(kNN或基于树的回归)
  • 我们需要使用经过训练的插补器预测查询数据中的多个缺失值(一个查询特征向量最多可以有13个缺失特征,因此插补器应该处理缺失特征的任意组合)注意不应使用查询数据以任何方式重新训练/拟合插补器(就像我目前发现的所有主流R软件包中一样:
    Amelia
    impute
    mi
    mice
    …)。也就是说,插补应完全基于培训数据
  • 所有这些的目的如下所述
  • 下面是一个小数据样本 原始帖子(TL;DR)

    简单地说,我有一些复杂的数据输入要做。我们有一个约100k 20D样本的训练数据集和一个较小的测试数据集。每个特征/尺寸都是一个连续变量,但比例不同。有两个不同的类别。这两个数据集都非常庞大(NAs在各个维度上的分布并不均匀)。我使用
    sklearn.ensemble.extratreeClassifier
    进行分类,尽管树集合可以处理缺失数据情况,但执行插补有三个原因

  • 这样,在对查询数据集进行分类期间,我们可以从林中的所有树中获得投票(而不仅仅是那些没有缺少特征的树)
  • 我们在训练期间不会丢失数据
  • scikit
    树集成的实现(包括
    外部树
    随机林
    )不会处理缺失值。但这一点并不重要。如果不是前两个,我会使用
    rpy2
    +一些不错的R实现
  • 使用训练数据集的事情非常简单,因为我可以应用特定于类的中值插补策略来处理缺失值,而且这种方法到目前为止一直运行良好。显然,这种方法不能应用到查询中——我们没有可以开始使用的类。因为我们知道类在查询中可能有显著不同的份额,所以我们不能应用与类无关的方法,因为这可能会引入偏差并降低分类性能,因此我们需要从模型中估算缺失值

    由于以下几个原因,线性模型不是一个选项:

  • 所有特征都有一定的相关性
  • 理论上,我们可以在一个样本特征向量中得到所有可能的缺失特征组合,即使我们的工具需要至少7个非缺失特征,我们最终得到大约1^6个可能的模型,如果你问我,这看起来不是很优雅 基于树的回归模型由于同样的原因并不好。所以我们最终选择了kNN(k近邻)、球树或LSH,更具体地说是半径阈值。这种方法非常适合这项任务,因为维度(ergo距离)是相关的,因此我们在极端NA丰富的情况下获得了很好的性能,但有几个缺点:

  • 我还没有在Python中找到一个单独的实现(包括
    impute
    sklearn.preprocessing.Imputer
    orange
    )来处理具有不同缺失值集的特征向量,也就是说,对于缺失特征的所有可能组合,我们希望只有一个插补器
  • kNN使用成对点距离进行预测/插补。正如我已经提到的,我们的变量具有不同的尺度,因此在距离估计之前必须对特征空间进行归一化。我们需要知道每个维度的理论最大/最小值,以便正确地进行缩放。这不是什么大问题,而是架构简单性的问题(用户必须提供最小/最大值向量) 下面是我想从你那里听到的:

  • 是否有任何经典的方法来解决上述列表中给出的kNN相关问题?我相信这一定是一个常见的情况,但我还没有在网上找到任何具体的东西
  • 在我们的案例中,有没有更好的方法来估算数据?你推荐什么?请提供Python实现(也考虑R和C/C++)
  • 数据

    下面是训练数据集的一个小样本。我减少了功能的数量,使其更具可读性。除了明显缺少
    类别
    信息外,查询数据具有相同的结构

    v1  v2  v3  v4  v5  category
    0.40524 0.71542 NA  0.81033 0.8209  1
    0.78421 0.76378 0.84324 0.58814 0.9348  2
    0.30055 NA  0.84324 NA  0.60003 1
    0.34754 0.25277 0.18861 0.28937 0.41394 1
    NA  0.71542 0.10333 0.41448 0.07377 1
    0.40019 0.02634 0.20924 NA  0.85404 2
    0.56404 0.5481  0.51284 0.39956 0.95957 2
    0.07758 0.40959 0.33802 0.27802 0.35396 1
    0.91219 0.89865 0.84324 0.81033 0.99243 1
    0.91219 NA  NA  0.81033 0.95988 2
    0.5463  0.89865 0.84324 0.81033 NA  2
    0.00963 0.06737 0.03719 0.08979 0.57746 2
    0.59875 0.89865 0.84324 0.50834 0.98906 1
    0.72092 NA  0.49118 0.58814 0.77973 2
    0.06389 NA  0.22424 0.08979 0.7556  2
    

    基于最新的更新,我想我会推荐反对kNN或基于树的算法。由于插补是目标,而不是您选择的方法的结果,因此您需要一种算法来学习完成不完整数据

    对我来说,这似乎非常适合使用去噪自动编码器。如果你熟悉神经网络,这是相同的基本原理。您不需要训练预测标签,而是训练模型预测输入数据,这是一个显著的转折

    “去噪”部分指的是一个中间步骤,在尝试预测之前,您可以将输入数据的某些百分比随机设置为0。这迫使算法学习更丰富的特征,以及在缺少片段时如何完成数据。在您的情况下,我建议您在培训中少辍学(因为您的数据已经缺少功能),在测试中不要辍学

    如果不先查看数据,就很难编写一个有用的示例,但是要了解自动编码器的基本功能(以及完整的代码实现