0

次のコードで Sklearn PCA を使用して、5000-D データを 32-D に削減しようとしています。

from sklearn.decomposition import PCA
import numpy as np 

arr = np.random.randint(1,10,(10,5000)).astype(float)
pca = PCA(n_components=32)
newData = pca.fit_transform(arr)
print newData.shape

上記のコードで、形状 (10,10) (10 次元の 10 サンプル) の newData を取得しました。PCA について私が理解しているのは、形状 (10,32) の newData になるはずですが、ここではそうではないということです。入力データ (arr) を 50 サンプルに変更すると、期待どおりの形状 (50,32) の newData が得られました。その値が指定された n_components (この場合は 32) より小さい場合、sklearn は自動的に n_components を min(num_samples,num_dimension) に設定するようです。

これの目的は何ですか?

4

1 に答える 1

2

要求したすべてのコンポーネントを計算するのに十分なデータがありません。

または、別の言い方をすれば、それらは任意であり、関連する分散は 0 に等しくなります。これは、特徴共分散行列のランクが最大で 10 であるためです (32 個のコンポーネントを取得するには、ランク 32 が必要です)。

したがって、scikit-learn はそれらを返しません。

于 2016-01-29T12:39:41.420 に答える