2016-11-28 2 views
1

Ich habe Movielens dataset, die ich PCA darauf anwenden möchte, aber sklearn PCA Funktion Dosis scheint es nicht richtig zu tun.
Ich habe 718 * 8913 Matrix, die Zeilen, die die Benutzer anzuzeigen, und Spalten-Filme zeigen hier ist mein Python-Code:gelten sklearn PCA auf movelens Datensatz

laden Filmnamen und Filmbewertungen

movies = pd.read_csv('movies.csv') 
ratings = pd.read_csv('ratings.csv') 
ratings.drop(['timestamp'], axis=1, inplace=True) 
def replace_name(x): 
    return movies[movies['movieId']==x].title.values[0] 
ratings.movieId = ratings.movieId.map(replace_name) 
M = ratings.pivot_table(index=['userId'], columns=['movieId'], values='rating') 
df1 = M.replace(np.nan, 0, regex=True) 

Standardisieren

X_std = StandardScaler().fit_transform(df1) 

Bewerben PCA

pca = PCA() 
result = pca.fit_transform(X_std) 
print result.shape 
plt.plot(np.cumsum(pca.explained_variance_ratio_)) 
plt.xlabel('number of components') 
plt.ylabel('cumulative explained variance') 
plt.show() 

Ich habe keine Komponentennummer festgelegt, so erwarte ich, dass PCA 718 * 8913 Matrix in neuer Dimension zurückgibt, aber pca Ergebnisgröße ist 718 * 718 und pca.explained_variance_ratio_ Größe ist 718, und die Summe aller Mitglieder ist 1, aber wie das ist möglich!!!
Ich habe 8913 Funktionen und es gibt nur 718 und Summe der Varianz von ihnen ist gleich 1 kann jeder erklären, was hier falsch ist?
mein Plot Bild Ergebnis: enter image description here Wie Sie im obigen Bild sehen können, enthält es nur 718 Komponente und Summe davon ist 1, aber ich habe 8913 Funktionen, wo sie hin?

-Test mit kleinerem Beispiel

Ich versuche sogar mit scikit lernen PCA Beispiel, die in der Dokumentation Seite von PKA gefunden werden können Here is the Link ich das Beispiel ändern und erhöhe nur die Anzahl der Funktionen

import numpy as np 
from sklearn.decomposition import PCA 
import pandas as pd 
X = np.array([[-1, -1,3,4,-1, -1,3,4], [-2, -1,5,-1, -1,3,4,2], [-3, -2,1,-1, -1,3,4,1], 
[1, 1,4,-1, -1,3,4,2], [2, 1,0,-1, -1,3,4,2], [3, 2,10,-1, -1,3,4,10]]) 
ipca = PCA(n_components = 7) 
print (X.shape) 
ipca.fit(X) 
result = ipca.transform(X) 
print (result.shape); 

und in Dieses Beispiel haben wir 6 Probe und 8 Feauters Ich setze n_components auf 7 aber die Ergebnisgröße ist 6 * 6.
denke ich, wenn die Anzahl der Merkmale größer als die Anzahl der Proben ist die maximale Anzahl von Komponenten

Antwort

1

Siehe documentation auf PCA scikit lernen PKA wird wieder Anzahl der Proben gleich ist. Weil Sie keinen n_components Parameter an PCA() übergeben haben, verwendet sklearn min(n_samples, n_features) als Wert von n_components, weshalb Sie einen reduzierten Funktionssatz erhalten, der gleich n_samples ist.

Ich glaube, Ihre Varianz gleich 1 ist, weil Sie nicht die n_components, aus der Dokumentation festgelegt haben:

Wenn n_components nicht gesetzt ist, dann werden alle Komponenten gespeichert und die Summe von erklärt Varianzen gleich bis 1,0.

+0

ich mit n_components müde alle n_components größer als 718 dose't Arbeit und senden Sie es schließlich 718 Komponenten –

+0

Die Antwort scheint, dass im Grunde, um anzuzeigen, kann die maximale Anzahl von Dimensionen PCA reduzieren min ist (N_SAMPLES, n_features) : http://stackoverflow.com/questions/22557883/scikit-learn-pca-dimension-reduction-data-lot-of-features-and-few-samples?rq=1 –

Verwandte Themen