Scikit-learn Incremental PCA - ValueError: array must not contain infs or NaNs

Scikit-learn Incremental PCA - ValueError: array must not contain infs or NaNs

我正在尝试使用 scikit-learn 中的 IncrementalPCA。由于我的应用程序的在线性质,我真的需要算法的增量版本。我的代码再简单不过了:

from sklearn.decomposition import IncrementalPCA
import pandas as pd

with open('C:/My/File/Path/file.csv', 'r') as fp:
    data = pd.read_csv(fp)

ipca = IncrementalPCA(n_components=4)
ipca.fit(data)

但启动时它是这样完成的:

C:\Users\myuser\PycharmProjects\mushu\venv\lib\site-packages\sklearn\decomposition\_incremental_pca.py:293: RuntimeWarning: overflow encountered in long_scalars
  np.sqrt((self.n_samples_seen_ * n_samples) /
C:\Users\myuser\PycharmProjects\mushu\venv\lib\site-packages\sklearn\decomposition\_incremental_pca.py:293: RuntimeWarning: invalid value encountered in sqrt
  np.sqrt((self.n_samples_seen_ * n_samples) /
Traceback (most recent call last):
File "C:/Users/myuser/AppData/Roaming/JetBrains/PyCharmCE2020.1/scratches/scratch_9.py", line 6, in <module>
  ipca.fit(data)
File "C:\Users\myuser\PycharmProjects\mushu\venv\lib\site-packages\sklearn\decomposition\_incremental_pca.py", line 215, in fit
  self.partial_fit(X_batch, check_input=False)
File "C:\Users\myuser\PycharmProjects\mushu\venv\lib\site-packages\sklearn\decomposition\_incremental_pca.py", line 298, in partial_fit
  U, S, V = linalg.svd(X, full_matrices=False)
File "C:\Users\myuser\PycharmProjects\mushu\venv\lib\site-packages\scipy\linalg\decomp_svd.py", line 106, in svd
  a1 = _asarray_validated(a, check_finite=check_finite)
File "C:\Users\myuser\PycharmProjects\mushu\venv\lib\site-packages\scipy\_lib\_util.py", line 263, in _asarray_validated
  a = toarray(a)
File "C:\Users\myuser\PycharmProjects\mushu\venv\lib\site-packages\numpy\lib\function_base.py", line 498, in asarray_chkfinite
  raise ValueError(
ValueError: array must not contain infs or NaNs

Process finished with exit code 1

我的数据是 243 列,只有 0 和 1。我已经检查过:

如果有人能帮助我,我将不胜感激

编辑:
我的数据,就像我将它们提供给上面的代码一样 https://drive.google.com/file/d/1JBIliADt9TViTk8qjnmIS3RFEO934dY6/view?usp=sharing

编辑 2:
尝试同时使用

data = pd.read_csv(fp, dtype = 'Int64')

data = pd.read_csv(fp, dtype = np.float64)

结果没有差异。

编辑 3:
似乎问题与数据集大小有关。如果我尝试适应较小的部分,一切正常。直到我得到大约 1800000 行。这就是错误开始显示的地方。

您的数据有问题。

这是一个使用一些人工数据(n=2000000 和 d=243)的 100% 工作示例。 为了提供更多帮助,请上传导致错误的数据示例。

from sklearn.decomposition import IncrementalPCA
import pandas as pd, numpy as np

n=2000000
d=243
data = pd.DataFrame(np.ones((n,d)))

ipca = IncrementalPCA(n_components=4)
ipca.fit(data.values)

我将它发给了 scikit-learn,他们很快就收到了。发生这种情况是因为 numpy 数组在 Windows 上默认为 int32,这会导致回溯顶部的 RuntimeWarning 并升级为将 NaN 传递给 partial_fit()。我暂时搬到 Linux 等待修复。
Here 遇到类似问题的任何人都可以在将来跟踪其解决方案。

tl;dr: 检查上面 link 以查看问题是否已解决。如果不是,请使用 batch_size,例如 batch_size * n_samples < 2^31 - 1。如果这对您来说不可能,请移至 Linux.