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.

  • Interpolation mit Delaunay Triangulation
  • Lösen von Koeffizienten von Datensätzen mit curve_fit von scipy.optimize
  • Wie man eine Bildgröße in der Bildverarbeitung reduziert (scipy / numpy / python)
  • Ändern der Struktur des numpy Arrays, das den gegebenen Wert erzwingt
  • Finden der Korrespondenz von Daten aus einem Datensatz in der anderen
  • Interpolation basierend auf einem Array-Wert
  • Struktur der Eingänge zur Scipy-Funktion minimieren
  • Wie erweitere ich ein Array an Ort und Stelle in Numpy?
  • Plot Normalverteilung mit Matplotlib
  • Schnelle Tensorrotation mit NumPy
  • Finde die meisten entfernten Punkte in der Konturkurve
  • Python ist die beste Programmiersprache der Welt.