scikit learn - Python Pandas 中的随机投影,使用包含 NaN 值的数据帧



>我有一个包含实值和一些 NaN 值的数据帧data。我正在尝试使用随机投影执行局部敏感哈希,以将维度减少到 25 个组件,特别是使用 sklearn.random_projection.GaussianRandomProjection 类。但是,当我运行时:

tx = random_projection.GaussianRandomProjection(n_components = 25) data25 = tx.fit_transform(data)

我得到Input contains NaN, infinity or a value too large for dtype('float64').有没有解决方法?我尝试将所有 NaN 值更改为数据集中从未存在的值,例如 -1。在这种情况下,我的输出有多有效?我不是局部敏感哈希/随机投影理论背后的专家,所以任何见解也会有所帮助。谢谢。

NA/

NaN 值(不可用/非数字)我发现,只是很麻烦。

您不想只替换像 -1 这样的随机值。如果您倾向于这样做,请使用 Imputer 类之一。否则,您可能会非常大幅度地更改点之间的距离。如果使用随机投影,则可能希望尽可能保留距离:

控制随机投影矩阵的维度和分布,以保持数据集任意两个样本之间的成对距离。

但是,这可能会也可能不会产生合理的学习价值。据我所知,归因是一个开放的研究领域,例如这位先生们专门研究。

如果有足够的示例,请考虑删除包含 NaN 值的行或列。另一种可能性是训练一个生成模型,如受限玻尔兹曼机,并用它来填充缺失值:

rbm = sklearn.neural_network.BernoulliRBM().fit( data_with_no_nans )
mean_imputed_data = sklearn.preprocessing.Imputer().fit_transform( all_data )
rbm_imputation = rbm.gibbs( mean_imputed_data )
nan_mask = np.isnan( all_data )
all_data[ nan_mask ] = rbm_imputation[ nan_mask ]

最后,您可以考虑使用最近邻进行插补。对于给定列,使用所有完整行对所有变量(该列除外)训练最近邻模型。然后,对于缺少该列的行,找到 k 个最近邻并使用其中的平均值。(这变得非常昂贵,特别是如果您的行具有多个缺失值,因为您必须为缺少列的每个组合训练一个模型)。

相关内容

  • 没有找到相关文章

最新更新