我正在尝试在scikit-learn中由TfidfVectorizer给出的稀疏矩阵上应用TruncatedSVD.fit_transform(),它给出了:
tsv = TruncatedSVD(n_components=10000,algorithm='randomized',n_iterations=5)
tfv = TfidfVectorizer(min_df=3,max_features=None,strip_accents='unicode',analyzer='word',token_pattern=r'\w{1,}',ngram_range=(1, 2), use_idf=1,smooth_idf=1,sublinear_tf=1)
tfv.fit(text)
text = tfv.transform(text)
tsv.fit(text)
Value error : array is too big
我可以使用的其他方法或减少维数。
答案 0 :(得分:3)
我很确定问题是:
tsv = TruncatedSVD(n_components=10000...
您的SVD中有10000个组件。如果您有一个m×n数据矩阵,SVD将具有维度为m x n_components和n_components x n的矩阵,即使数据稀疏,这些矩阵也会很密集。那些矩阵可能太大了。
我复制了你的代码并在Kaggle Hashtag数据上运行它(我认为这是来自),在300个组件中,python使用高达1GB。在10000,你使用大约30倍。
顺便说一下,你在这里做的是潜在的语义分析,并且不太可能从这么多组件中受益。在50-300范围内的某个地方应该捕捉重要的一切。
答案 1 :(得分:0)
当您使用32位python时,可能会出现此错误。尝试切换到64位。稀疏矩阵降维的另一种方法是使用RandomizedPCA
,这是使用随机SVD的PCA。