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: 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
ich mit n_components müde alle n_components größer als 718 dose't Arbeit und senden Sie es schließlich 718 Komponenten –
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 –