Verschiedene Ergebnisse bei der Verwendung von sklearn RandomizedPCA mit spärlichen und dichten Matrizen

Ich bekomme unterschiedliche Ergebnisse, wenn Randomized PCA mit spärlichen und dichten Matrizen:

 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) 

Ergebnis:

 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] 

Die dichte Version gibt die Ergebnisse mit normalem PCA, aber was ist los, wenn die Matrix spärlich ist? Warum sind die Ergebnisse anders?

One Solution collect form web for “Verschiedene Ergebnisse bei der Verwendung von sklearn RandomizedPCA mit spärlichen und dichten Matrizen”

Im Falle der spärlichen Daten RandomizedPCA die RandomizedPCA nicht die Daten (mittlere Entfernung), da sie die Speicherverwendung aufblasen könnte. Das erklärt wohl, was man beobachtet.

Ich stimme zu, dass dieses "Merkmal" schlecht dokumentiert ist. Fühlen Sie bitte sich frei, ein Problem auf github zu berichten, um es zu verfolgen und das doc zu verbessern.

Edit : Wir haben diese Diskrepanz in scikit-learn 0.15: RandomizedPCA ist nicht für spärliche Daten veraltet. Verwenden Sie stattdessen TruncatedSVD, das genauso wie PCA macht, ohne zu versuchen, die Daten zu zentrieren.

  • Python: schnelleres lokales Maximum in 2-d Matrix
  • Wie man nichtlineare komplexe Wurzel finden in Python
  • Wie man eine einzelne colobar addiert, die die Daten von 2 verschiedenen subplot zeigt
  • Running scipy's oneway in einem Skript
  • Platziere mehrere gaussians zu den daten in python
  • Scipy.optimize.curvefit () - Array darf keine infs oder NaNs enthalten
  • Wie man Streamlinien, wenn ich kenne u und v Komponenten der Geschwindigkeit (numpy 2d Arrays), mit einem Plotprogramm in Python?
  • Wie man empirische cdf in matplotlib in Python plotten?
  • Isolieren Sie die größten / kleinsten markierten Patches aus dem numpy Array
  • Mit scipy spärlichen Matrizen, um System von Gleichungen zu lösen
  • Protokollieren Sie normale Zufallsvariablen mit Scipy
  • Python ist die beste Programmiersprache der Welt.