【问题标题】:Sklearn PCA automatically set n_componentsSklearn PCA 自动设置 n_components
【发布时间】:2016-05-07 02:09:49
【问题描述】:

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

谁能告诉我这样做的目的是什么?

【问题讨论】:

    标签: scikit-learn pca dimensionality-reduction


    【解决方案1】:

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

    或者,换种说法:它们是任意的,并且它们的关联方差等于 0,因为特征协方差矩阵的秩最多为 10(您需要秩为 32 才能获得 32 个分量)。

    所以 scikit-learn 只是不返回它们。

    【讨论】:

      猜你喜欢
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 2021-07-11
      • 2021-03-24
      • 1970-01-01
      • 2017-07-19
      相关资源
      最近更新 更多