2016-11-28 18 views
1

私はmoviens datasetをPCAに適用したいのですが、sklearn PCA機能がうまくいかないようです。
私は行がユーザーと列がここに映画 を示す指示718 * 8913マトリックスは、私のPythonコードがあります: movielensデータセットでsklearn PCAを適用

X_std = StandardScaler().fit_transform(df1) 

適用を標準化

ロードムービーの名前と映画の評価

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) 

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() 

PCAは新しい次元で718 * 8913行列を返しますが、pca結果のサイズは718 * 718、pca.explained_variance_ratio_のサイズは718で、そのすべてのメンバーの合計は1ですが、PCAがどのようにコンポーネント番号を設定したのでしょうか?可能!!!
私は8913の特徴を持っていて、それは718だけ返し、それらの分散の合計は1に等しいです。
私のプロット画像の結果: enter image description here あなたは上の画像で分かるように、それは718コンポーネントを含んでいて、それの合計は1ですが、私は8913の機能をどこに持っていますか?小さい例で

テスト

私も、私は例を変更し、ちょうど機能

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); 

と中の数を増やすPCA Here is the Linkのドキュメントページで見つけることができPCAの例を学ぶscikitてみてくださいこの例では、6サンプルと8 feautersを持っています。n_componentsを7に設定しましたが、結果のサイズは6 * 6です。
私は多くの特徴は、サンプルの数よりも大きいとき、PCAが返されます学ぶscikitコンポーネントの最大数は、サンプル

答えて

1

の数と同じだと思うがPCAにdocumentationを参照してください。 n_componentsパラメータをPCA()に渡さなかったため、sklearnはn_componentsの値としてmin(n_samples, n_features)を使用します。そのため、n_samplesに等しい縮小フィーチャセットが得られます。説明分散の は等しいn_componentsが設定されていない場合

は、すべてのコンポーネントが格納されており、合計:

私はあなたがドキュメントから、n_componentsを設定しなかったので、あなたの分散が1に等しいと考えています1.0まで。

+0

すべてのn_components 718 dose'tの仕事よりも大きく、それが最終的には718個の部品 –

+0

答えはここに根本的にそれを示すように見えるが返さn_componentsと私は疲れて、次元の最大数はPCAはminする減らすことができます(n_samples、n_features) :http://stackoverflow.com/questions/22557883/scikit-learn-pca-dimension-reduction-data-lot-of-features-and-few-samples?rq=1 –

関連する問題