Sklearn PCA自动设置n_components

时间:2016-01-29 11:02:00

标签: scikit-learn pca dimensionality-reduction

我正在尝试使用以下代码的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

使用上面的代码我获得了newData of shape(10,10)(10个10维样本)。我对PCA的理解是它应该产生newData of shape(10,32),但这不是这里的情况。 将输入数据(arr)更改为50个样本,我得到了newData of shape(50,32),这正是我的预期。 如果该值小于给定的n_components(在这种情况下为32),sklearn似乎会自动将n_components设置为min(num_samples,num_dimension)。

有人能告诉我这是什么目的吗?

1 个答案:

答案 0 :(得分:2)

根本没有足够的数据来计算您要求的所有组件。

或者,换句话说:它们是任意的,它们的关联方差等于0,因为特征协方差矩阵的排名最多为10(你需要排名32才能得到32个组件)。

所以scikit-learn只是没有归还它们。