已修改帖子
这是原帖的简短版本。
Amelia
,{{ 1}},impute
和mi
...)。那就是归因应该完全基于训练数据。 原帖(TL; DR)
简单地说,我已经得到了一些复杂的数据。我们获得了大约100k 20D样本和较小测试数据集的训练数据集。每个要素/维度都是连续变量,但比例不同。有两个不同的类。两个数据集都是非常NA膨胀的(NAs在维度上不是均匀分布的)。我使用mice
进行分类,虽然树集合可以处理丢失的数据案例,但执行插补有三个原因
sklearn.ensemble.ExtraTreesClassifier
树集合(scikit
和ExtraTrees
)的实现不处理缺失值。但这一点并不重要。如果不是前两个,我会使用RandomForest
+一些不错的R实现。训练数据集的情况非常简单,因为我可以应用特定于类的中位插补策略来处理缺失值,这种方法到目前为止一直运行良好。显然,这种方法不能应用于查询 - 我们不会开始使用这些类。由于我们知道类可能在查询中具有显着不同的份额,因此我们无法应用类无关紧要的方法,因为这可能会引入偏差并降低分类性能,因此我们需要从模型中计算缺失值。
由于以下几个原因,线性模型不是一种选择:
基于树的回归模型出于同样的原因并不好。因此我们最终选择kNN(k个最近邻居),球树或具有半径阈值的LSH更具体。这种方法非常适合这项任务,因为维度(ergo距离)是相关的,因此我们在极其NA的情况下获得了良好的性能,但有几个缺点:
rpy2
,impute
,sklearn.preprocessing.Imputer
)来处理具有不同缺失值集的特征向量,即我们希望只有一个imputer用于所有可能的缺失功能组合。所以我希望听到您的意见:
数据
以下是训练数据集的一小部分示例。我减少了功能的数量,使其更具可读性。查询数据具有相同的结构,除了明显缺少orange
信息。
category
答案 0 :(得分:5)
根据新的更新,我想我会建议在这里反对kNN或基于树的算法。由于估算是目标,而不是您选择的方法的结果,因此您需要一种能够学习完成不完整数据的算法。
对我而言,这似乎非常适合使用去噪自动编码器。如果您熟悉神经网络,它的基本原理是相同的。您可以训练模型来预测输入数据,而不是训练预测标签。
去噪' part是指在尝试预测之前将输入数据的某个百分比随机设置为0的中间步骤。这会强制算法学习更丰富的功能以及如何在缺少部分时完成数据。在您的情况下,我建议在培训中少量退出(因为您的数据已经缺少功能)并且测试中没有丢失。
如果不首先查看您的数据,就很难编写一个有用的示例,但这里介绍了自动编码器的基本知识(以及完整的代码实现):http://deeplearning.net/tutorial/dA.html
此链接使用名为Theano的python模块,我强烈推荐这项工作。模块的灵活性胜过了我为机器学习所看到的所有其他模块,而且我已经看了很多。这不是最容易学习的东西,但是如果你要做很多这样的事情,我说它值得付出努力。如果你不想完成所有这些,你仍然可以在没有它的情况下在Python中实现去噪自动编码器。