【发布时间】:2015-11-06 08:31:54
【问题描述】:
我计划使用 Pandas get_dummies() 生成一个包含 70000 行和 150000 列的巨大稀疏矩阵,但是我得到了 MemoryError。如何在这个稀疏矩阵上应用 PCA 来降低维度?
【问题讨论】:
标签: python r pandas machine-learning scikit-learn
我计划使用 Pandas get_dummies() 生成一个包含 70000 行和 150000 列的巨大稀疏矩阵,但是我得到了 MemoryError。如何在这个稀疏矩阵上应用 PCA 来降低维度?
【问题讨论】:
标签: python r pandas machine-learning scikit-learn
见this answer。您将希望使用 sklearn.decomposition.TruncatedSVD 在稀疏矩阵上执行 PCA。例如:
import numpy as np
from scipy.sparse import coo_matrix
from sklearn.decomposition import TruncatedSVD
# create a sparse matrix:
np.random.seed(0)
i = np.random.randint(0, 100, 500)
j = np.random.randint(0, 1000, 500)
vals = np.random.random(500)
M = coo_matrix((vals, (i, j)), shape=(100, 1000))
# compute the sparse PCA
comp = TruncatedSVD(n_components=2).fit_transform(M)
comp.shape
# (100, 2)
如果您的稀疏矩阵本身太大而无法存储在内存中,您也许可以使用IncrementalPCA 的partial_fit 方法进行在线更新,尽管它只接受密集输入。
【讨论】: