2016-04-14 11 views
0

Ich habe eine hochdimensionale Wort-Bi-Gramm-Frequenzmatrix (1100 x 100658, dtype = int). Als Spaltennamen setze ich die Wort-Bi-Gramme (wie 'der-', 'und-der', ...) mit myPandaDataFrame.columns = Wort-Bi-Gramme als Zeilenindex ich für verwenden Beispiel die Fähigkeit (hoch, mittel, niedrig) myPandaDataFrame.columns.set_index ([ 'pROFICIENCY'], Inplace = True, Tropfen = True)Sklearn und PCA. Warum ist max n_row == max n_components?

dann mache ich

from sklearn.decomposition import PCA 
x = 500 
pcax = PCA(n_components=x) 
pcax.fit(myPandaDataFrame) 
PCA(copy=True, n_components=x, whiten=False) 
existing_2dx = pcax.transform(myPandaDataFrame) 
existing_df_2dx = pandas.DataFrame(existing_2dx) 
existing_df_2dx.index = myPandaDataFrame.index 
existing_df_2dx.columns = ['PC{0}'.format(i) for i in range(x)] 

Mein erstes Problem , wo ich denke, dass es falsch ist, ist, dass ich nur eine maximale Anzahl von 1100 Komponenten einstellen kann. Das ist die Anzahl der vorhandenen Zeilen. Ich bin sehr neu in PCA und habe einige Beispiele ausprobiert, aber es scheint, als könnte ich es nicht richtig für meine Matrix bekommen. Seht jemand, wo ich einen Fehler mache oder kann jemand auf ein Tutorial/Beispiel verweisen, das meinem Problem ähnlich ist. Ich wäre sehr glücklich :)

Mit freundlichen Grüßen

+0

Sie können vielleicht mehr Hilfe in http://datascience.stackexchange.com/ – Thanos

+0

bekommen Danke, ich werde das versuchen. – user6131832

+0

hat eine der Antworten geholfen? – Stefan

Antwort

0

Sie nicht mehr Komponenten als die Anzahl der Dimensionen (Rang) des Raumes Spannweiten Ihrer Matrix haben können, was wiederum wäre nicht größer als die Minimum der Anzahl der Zeilen oder Spalten (oder weniger, wenn die Matrix nicht den vollen Rang hat).

Siehe unten stehende Beispiel: mit einer Matrix der Größe 500 x 10000, Sie für 1000 Komponenten fragen können und werden wieder 500 erhalten, auf dem Sie dann Ihre Matrix projizieren kann, eine 500 x 500 Matrix Rückkehr:

df = pd.DataFrame(data=np.random.random(size=(500, 10000))) 

RangeIndex: 500 entries, 0 to 499 
Columns: 10000 entries, 0 to 9999 
dtypes: float64(10000) 
memory usage: 38.1 MB 

x = 1000 
pca = PCA(n_components=x) 
pca.fit(df) 
pca.explained_variance_ratio_.shape 

(500,) 

existing_2dx = pca.transform(df) 
existing_2dx.shape 

(500, 500) 
0

PCA zerlegt die empirische Datenkovarianzmatrix in Eigenwerte und Vektoren. Diese Matrix hat den Rang min(n_lines, n_columns). Nach dieser Zahl werden die Eigenwerte zu 0, so dass Ihre Daten vollständig durch die Anzahl der Komponenten bis dahin erklärt werden. Diese Anzahl an Komponenten spiegelt Ihre Daten perfekt wieder. Um irgendeine Art von Dimensionsreduktion durchzuführen, müssen Sie weniger Komponenten auswählen.