我正在尝试使用以下代码使用 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)的新数据,但这里的情况并非如此。将输入数据 (arr) 更改为有 50 个样本,我得到了形状 (50,32) 的 newData,这是我所期望的。似乎 sklearn 会自动将n_components设置为 min(num_samples,num_dimension) 如果该值小于给定的n_components(在本例中为 32)。
谁能告诉我这样做的目的是什么?
根本没有足够的数据来计算您要求的所有组件。
或者,换一种说法:它们是任意的,它们的关联方差等于 0,因为特征协方差矩阵的秩最多为 10(您需要秩 32 才能获得 32 个分量)。
所以scikit-learn只是不返回它们。