如何处理插补没有意义的NaN值? (对于PCA)

时间:2019-04-03 08:07:54

标签: cluster-analysis nan pca imputation

我很难弄清楚如何处理数据插补没有意义的NaN变量。我正在尝试进行文本/文档聚类,并且有一些缺失的值需要保持缺失状态,因为没有明智的方式来填充它们。我的数据集包含一些数值,日期,文本等。实际上,DannyDannyDannyexample副标题为“在插补没有意义的情况下考虑情景”。是解决我的问题的好例子。在向量化之后,我需要执行PCA来降低维数,这样我就可以处理没有内存错误的大数据并减少计算时间。这是问题开始的地方,因为scikit-learn的PCA算法没有一个可以处理NaN的算法(或者可以吗?)。并且用sklearn.preprocessing.Imputer填充缺失值是没有道理的,因为;

-并非所有都是数字或连续值。实际上,有一些带日期和不带日期的列!

-其中一些必须保留为NaN,因为否则它们可能(或可能?)对聚类产生不良影响。

由于一些缺失的值,我不能只是简单地删除列(或行)。太松了... 我的问题是:

  1. 我如何处理不影响聚类结果的NaN值? (明智的数据估算或其他方式...)
  2. 是否有任何PCA算法可以处理python中的NaN值?

PS:对不起,我的英语不好

2 个答案:

答案 0 :(得分:1)

否。

PCA意味着基本上每个输出变量在某种程度上都取决于每个输入变量。因此,投影后,整个向量将变为NaN。直观地,缺少值(不能将其表示为0)表示可以任意移动点。但是因为您仍然可以移动该点,所以您不知道它在任何坐标中的位置-它可能在任何位置。

PCA在低维连续数据上最有意义。您对数据的描述听起来并不适合PCA在这里使用。

答案 1 :(得分:1)

直觉上,如果您不能使用不同的方法进行插补,或者没有意义,那么您将删除这些行->但请注意,根据数据的不同,最终可能行数不多。仅当您具有良好的数据集且NaN的百分比很小时,这才起作用。

另一种方法是删除具有很高NaN的列,这时无论如何它们对模型不是很有用。

您可以查看的最后一种方法是用那些不在该列范围内的极端值,诸如“ -9999”之类的唯一标识符或您喜欢的值来填充这些值。大多数情况下,该算法可使算法提取异常值,而不将其计入模型。

希望这会有所帮助!