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) 的 newData(10 个 10 维样本)。我对 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 回答