python - 大型高维数据集上的 PCA
问题描述
我正在尝试在 python 中对大型数据集(410 000 个条目和 32 000 个特征)执行 PCA 分析,但sklearn.decomposition.PCA
不起作用,因为底层 LAPACK 实现无法处理我拥有的那么多数据。它引发以下错误。
Traceback (most recent call last):
File "main.py", line 47, in <module>
model.fit(x_std.transform(deep_data))
File "/home/lib/python3.6/site-
packages/sklearn/decomposition/_pca.py", line 344, in fit
self._fit(X)
File "/home/lib/python3.6/site-
packages/sklearn/decomposition/_pca.py", line 416, in _fit
return self._fit_full(X, n_components)
File "/home/lib/python3.6/site-
packages/sklearn/decomposition/_pca.py", line 447, in _fit_full
U, S, V = linalg.svd(X, full_matrices=False)
File "/home/lib/python3.6/site-
packages/scipy/linalg/decomp_svd.py", line 125, in svd
compute_uv=compute_uv, full_matrices=full_matrices)
File "/home/lib/python3.6/site-
packages/scipy/linalg/lapack.py", line 605, in _compute_lwork
raise ValueError("Too large work array required -- computation cannot "
ValueError: Too large work array required -- computation cannot be performed with standard 32-bit LAPACK.
我也尝试过sklearn.decomposition.IncrementalPCA
,但由于我的 RAM 没有任何问题,它并没有解决我的问题,它只是引入了更多,因为如果我的批量大小小于它,它不允许我拥有所有 32000 个组件。
是否有任何其他 PCA 实现可以处理这么多数据?我不一定需要全部 410 000 个样本,但我至少需要 32 000 个样本,这样我才能分析所有主成分。
解决方案
推荐阅读
- node.js - 如何在nodejs中将数据从控制器传输到socket.io?
- fedora - 64 位 riscv Fedora 上缺少库
- c# - 为什么我的 DataContext 会从我下面切换出来进行绑定?
- python - Django ORM中带有时间戳且没有外键的内部连接
- django - 如何显示自定义数量的模型记录
- visual-studio-code - 冻结时如何在VS代码中重新启动dafny
- ethereum - 将solidity代码上传到EVM时,是否也会上传支持的openzepplin合约?如果是这样,为什么要上传“库”类型的文件?
- product - 仅在移动视图中的新行
- javascript - 带有 DOM 的 javascript foreach
- scala - 编译时保证地图对每个枚举案例都有一个键