2013-11-26 110 views
1

我試圖在scikit-學會TfidfVectorizer給出稀疏矩陣這就給申請TruncatedSVD.fit_transform():截斷SVD給值誤差數組太大

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

那你的數據有多大? –

+0

77946X45906類型爲numpy.float64的稀疏矩陣,包含1062178個存儲元素。 – Harshit

+0

然後請發佈完整的回溯。很難看到錯誤來自哪裏。 –

回答

2

我敢肯定,問題是:

tsv = TruncatedSVD(n_components=10000... 

你在你的SVD有10000個組件。如果有一個m×n的數據矩陣,則SVD將具有維數爲m×n_components和n_components×n的矩陣,即使數據稀疏,這些矩陣也將是密集的。那些矩陣可能太大了。

我複製了你的代碼,並將它運行在Kaggle Hashtag數據上(我認爲這是它的原型),並且在300個組件上,python使用的是1GB。在10000時,你會使用約30倍。

順便說一句,你在這裏做的是潛在的語義分析,而且這不可能從這麼多的組件中受益。在50-300的範圍內應該捕捉所有重要的事情。

0

當您使用32位python時,您可能會收到此錯誤。嘗試切換到64位。另一種用於稀疏矩陣降維的方法是使用RandomizedPCA,它是使用隨機SVD的PCA。

+1

我的ubuntu是32位的,我不認爲它會支持64位python。將嘗試RandomizedPCA – Harshit

+1

你可能會接受答案,如果有幫助;) –

+0

隨機PCA也給陣列太大,實際上我的稀疏矩陣超過50000列和由TfidfVectorizer返回類似的行。 – Harshit