2013-05-21 109 views
3

我得到不同的結果時Randomized PCA與疏與密矩陣:不同的結果使用sklearn RandomizedPCA時疏與密矩陣

import numpy as np 
import scipy.sparse as scsp 
from sklearn.decomposition import RandomizedPCA 

x = np.matrix([[1,2,3,2,0,0,0,0], 
       [2,3,1,0,0,0,0,3], 
       [1,0,0,0,2,3,2,0], 
       [3,0,0,0,4,5,6,0], 
       [0,0,4,0,0,5,6,7], 
       [0,6,4,5,6,0,0,0], 
       [7,0,5,0,7,9,0,0]]) 

csr_x = scsp.csr_matrix(x) 

s_pca = RandomizedPCA(n_components=2) 
s_pca_scores = s_pca.fit_transform(csr_x) 
s_pca_weights = s_pca.explained_variance_ratio_ 

d_pca = RandomizedPCA(n_components=2) 
d_pca_scores = s_pca.fit_transform(x) 
d_pca_weights = s_pca.explained_variance_ratio_ 

print 'sparse matrix scores {}'.format(s_pca_scores) 
print 'dense matrix scores {}'.format(d_pca_scores) 
print 'sparse matrix weights {}'.format(s_pca_weights) 
print 'dense matrix weights {}'.format(d_pca_weights) 

結果:

sparse matrix scores [[ 1.90912166 2.37266113] 
[ 1.98826835 0.67329466] 
[ 3.71153199 -1.00492408] 
[ 7.76361811 -2.60901625] 
[ 7.39263662 -5.8950472 ] 
[ 5.58268666 7.97259172] 
[ 13.19312194 1.30282165]] 
dense matrix scores [[-4.23432815 0.43110596] 
[-3.87576857 -1.36999888] 
[-0.05168291 -1.02612363] 
[ 3.66039297 -1.38544473] 
[ 1.48948352 -7.0723618 ] 
[-4.97601287 5.49128164] 
[ 7.98791603 4.93154146]] 
sparse matrix weights [ 0.74988508 0.25011492] 
dense matrix weights [ 0.55596761 0.44403239] 

密集的版本給出的結果正常的PCA,但矩陣稀疏時會發生什麼?爲什麼結果不同?

回答

7

對於稀疏數據,RandomizedPCA不會集中數據(平均去除),因爲它可能會炸燬內存使用量。這可能解釋了你所觀察到的。

我同意這個「功能」是記錄不全。請隨時在github上報告問題並跟蹤並改進文檔。

編輯:我們修正了scikit-learn中的差異0.15:對於稀疏數據,不推薦使用RandomizedPCA。取而代之的是使用TruncatedSVD,它可以在不嘗試集中數據的情況下執行與PCA相同的操作。

+0

我覺得這不是貶低做內存使用,感謝那,但貶值不會影響權重(本徵值),貶低隻影響分數。但是,我的特徵值有很大的不同,所以一定還有其他的事情發生。 – Akavall