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

Pandas Python中使用包含NaN值的数据帧的随机投影,pandas,scikit-learn,projection,dimensionality-reduction,locality-sensitive-hash,Pandas,Scikit Learn,Projection,Dimensionality Reduction,Locality Sensitive Hash,我有一个数据框data,包含实数和一些NaN值。我正在尝试使用随机投影执行局部敏感哈希,以将维度减少到25个组件,特别是使用sklearn.random_projection.GaussianRandomProjection类。但是,当我跑步时: tx=随机投影。高斯随机投影(n\u分量=25) data25=tx.fit\u变换(数据) 我得到的输入包含NaN、无穷大或对数据类型('float64')太大的值。。有办法解决这个问题吗?我尝试将所有NaN值更改为数据集中从不存在的值,例如-1。在

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

tx=随机投影。高斯随机投影(n\u分量=25)
data25=tx.fit\u变换(数据)

我得到的
输入包含NaN、无穷大或对数据类型('float64')太大的值。
。有办法解决这个问题吗?我尝试将所有NaN值更改为数据集中从不存在的值,例如-1。在这种情况下,我的输出有多有效?我不是位置敏感散列/随机投影理论的专家,因此任何见解都会有所帮助。谢谢。

我发现,NA/NaN值(不可用/没有编号)非常麻烦

您不希望只替换像-1这样的随机值。如果你倾向于这样做,使用其中一种方法。否则,可能会极大地更改点之间的距离。如果您使用以下各项,您可能希望尽可能保持距离:

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

然而,这可能会也可能不会产生合理的学习价值。据我所知,插补是一个开放的研究领域,例如专门研究插补

如果有足够的例子,考虑删除包含NA值的行或列。另一种可能性是训练生成模型,如a,并使用它来填充缺失的值:

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个最近邻并使用其中的平均值。(这会非常昂贵,尤其是当您有多个缺少值的行时,因为您必须针对每个缺少列的组合训练一个模型)。

NA/NaN值(不可用/not-a-number)我发现非常麻烦

您不希望只替换像-1这样的随机值。如果你倾向于这样做,使用其中一种方法。否则,可能会极大地更改点之间的距离。如果您使用以下各项,您可能希望尽可能保持距离:

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

然而,这可能会也可能不会产生合理的学习价值。据我所知,插补是一个开放的研究领域,例如专门研究插补

如果有足够的例子,考虑删除包含NA值的行或列。另一种可能性是训练生成模型,如a,并使用它来填充缺失的值:

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个最近邻并使用其中的平均值。(这会非常昂贵,尤其是当您有多个缺少值的行时,因为您必须为缺少的列的每个组合训练模型)