2

を使用して PCA のさまざまな形状を取得していsklearnます。 ドキュメントが言うように、私の変換が同じ次元の配列にならないのはなぜですか?

fit_transform(X, y=None)
Fit the model with X and apply the dimensionality reduction on X.
Parameters: 
X : array-like, shape (n_samples, n_features)
Training data, where n_samples is the number of samples and n_features is the number of features.
Returns:    
X_new : array-like, shape (n_samples, n_components)

(150, 4)私が 4 台の PC を作成している iris データセットでこれを確認してください。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn import decomposition
import seaborn as sns; sns.set_style("whitegrid", {'axes.grid' : False})

%matplotlib inline
np.random.seed(0)

# Iris dataset
DF_data = pd.DataFrame(load_iris().data, 
                       index = ["iris_%d" % i for i in range(load_iris().data.shape[0])],
                       columns = load_iris().feature_names)

Se_targets = pd.Series(load_iris().target, 
                       index = ["iris_%d" % i for i in range(load_iris().data.shape[0])], 
                       name = "Species")

# Scaling mean = 0, var = 1
DF_standard = pd.DataFrame(StandardScaler().fit_transform(DF_data), 
                           index = DF_data.index,
                           columns = DF_data.columns)

# Sklearn for Principal Componenet Analysis

# Dims
m = DF_standard.shape[1]
K = m

# PCA (How I tend to set it up)
M_PCA = decomposition.PCA()
A_components = M_PCA.fit_transform(DF_standard)
#DF_standard.shape, A_components.shape
#((150, 4), (150, 4))

しかし、実際のデータセットで同じ正確なアプローチを使用すると、(76, 1989)代わり76 samplesに配列1989 attributes/dimensionsが得られます(76, 76)(76, 1989)

DF_centered = normalize(DF_mydata, method="center", axis=0)
m = DF_centered.shape[1]
# print(m)
# 1989
M_PCA = decomposition.PCA(n_components=m)
A_components = M_PCA.fit_transform(DF_centered)
DF_centered.shape, A_components.shape
# ((76, 1989), (76, 76))

normalizemeanは、各次元からを減算する、私が作成した単なるラッパーです。

4

1 に答える 1

6

(注: この回答は、Cross Validatedに関する私の回答を基にしています。次元数が n 以上の場合、なぜ n データ ポイントに対して n-1 主成分しかないのですか? )

PCA (最も一般的に実行される) は、次の方法で新しい座標系を作成します。

  1. 原点をデータの重心にシフトし、
  2. 軸を縮めたり伸ばしたりして長さを等しくします。
  3. 軸を新しい向きに回転します。

(詳細については、この優れた CV スレッドを参照してください:主成分分析、固有ベクトル、および固有値の意味を理解する。) ただし、ステップ3は非常に特殊な方法で軸を回転させます。新しい X1 (現在は「PC1」、つまり最初の主成分と呼ばれています) は、データの変動が最大になる方向を向いています。第 2 主成分は、第 1 主成分に直交する変動量が次に大きい方向に向いています。残りの主成分も同様に形成されます。

これを念頭に置いて、簡単な例を見てみましょう ( @amoeba のコメントで提案されています)。以下は、3 次元空間に 2 つの点があるデータ マトリックスです。

X = [ 1 1 1 
      2 2 2 ]

これらの点を (疑似) 3 次元散布図で見てみましょう。

ここに画像の説明を入力

それでは、上記の手順に従ってみましょう。(1) 新しい座標系の原点は (1.5,1.5,1.5) になります。(2) 軸は既に等しい。(3) 最初の主成分は、以前は (0,0,0) だったものから元は (3,3,3) に斜めに進みます。これは、これらのデータの最大の変動の方向です。ここで、2 番目の主成分は 1 番目の主成分と直交し、残りの変動が最大になる方向に向かう必要があります。しかし、それはどの方向ですか?(0,0,3) から (3,3,0) まで、または (0,3,0) から (3,0,3) まで、または何か他のものですか? 残りの変動がないため、これ以上の主成分はありません。

N=2 データの場合、(最大で) N-1=1 主成分を適合させることができます。

于 2016-07-11T00:33:58.473 に答える