为什么 Sklearn PCA 需要比新特征(n_components)更多的样本?

问题描述 投票:0回答:1

像这样使用 Sklearn PCA 算法时

x_orig = np.random.choice([0,1],(4,25),replace = True)
pca = PCA(n_components=15)
pca.fit_transform(x_orig).shape

我得到输出

(4, 4)

我期望(想要)它是:

(4,15)

我明白为什么会这样。在 sklearn 的文档中(here)它说(假设它们的“==”是赋值运算符):

n_components == min(n_samples, n_features)

但是他们为什么要这样做呢? 另外,如何直接将形状为 [1,25] 的输入转换为 [1,10](无需堆叠虚拟数组)?

python python-3.x scikit-learn pca
1个回答
6
投票

每个主成分是数据在数据协方差矩阵的特征向量上的投影。如果样本 n 少于特征,则协方差矩阵只有 n 非零特征值。因此,只有 n 特征向量/分量有意义。

原则上,可以有比样本更多的成分,但多余的成分将是无用的噪音。

Scikit-learn 会引发错误,而不是默默地做任意的事情。这可以防止用户搬起石头砸自己的脚。样本少于特征可能表明数据存在问题,或者对所涉及的方法存在误解。

© www.soinside.com 2019 - 2024. All rights reserved.