如何处理插补没有意义的 NaN 值? (对于主成分分析)

How to deal with NaN values where imputation doesn't make sense? (for PCA)

我很难弄清楚如何处理数据插补没有意义的 NaN 变量。我正在尝试进行 text/document 聚类,并且有一些缺失值需要保留为缺失值,因为没有合理的方法来填充它们。我的数据集包含一些数值、日期、文本等。实际上副标题 "Consider situtations when imputation doesn't make sense." 下的 DannyDannyDanny 's 是我的问题的一个很好的例子。矢量化之后,我需要执行 PCA 来降低维度,这样我就可以在没有内存错误的情况下处理大数据并减少计算时间。这是问题开始的地方,因为 scikit-learn 的 PCA 算法中的 none 可以处理 NaN(或者它们可以吗?)。用 sklearn.preprocessing.Imputer 填充缺失值没有意义,因为;

-不是所有的都是数值或者连续值。事实上,有些列有日期和没有日期!

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

而且我不能因为只有几个缺失值而简单地删除列(或行)。太多放不开... 我的问题是:

  1. 如何处理影响聚类结果的 NaN 值 w/o? (合理的数据估算或其他...)
  2. 是否有任何 PCA 算法可以处理 python 中的 NaN 值?

PS:抱歉我的英语不好

没有

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

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

从直觉上讲,如果您不能使用不同的方法进行估算,或者它没有意义,那么您将删除这些行 -> 但需要注意的是,根据您的数据,您可能最终得到的行不多。仅当您的数据集非常好且 NaN 的百分比非常小时,这才有效。

另一种方法是删除具有非常高 NaN 的列,此时它们对模型不是很有用。

您可以研究的最后一种方法是用不在该列范围内的极端值填充这些值,例如“-9999”或您喜欢的唯一标识符。这主要允许算法拾取异常值而不是将其计入模型。

希望对您有所帮助!