Python 为什么Sklearn PCA需要比新功能(n_组件)更多的样本?
当使用这样的SKPCA算法时Python 为什么Sklearn PCA需要比新功能(n_组件)更多的样本?,python,python-3.x,scikit-learn,pca,Python,Python 3.x,Scikit Learn,Pca,当使用这样的SKPCA算法时 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()的文档中,它说(假设它们的'=='是赋值运算符): 但他们为什么要这样做? 此外,如何将形状为[1,25]的输入直接转换为[1,10](无需堆
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()的文档中,它说(假设它们的'=='是赋值运算符):
但他们为什么要这样做?
此外,如何将形状为[1,25]的输入直接转换为[1,10](无需堆叠虚拟阵列)?每个主分量是数据在数据协方差矩阵的特征向量上的投影。如果样本数少于特征数n,协方差矩阵只有n个非零特征值。因此,只有n个特征向量/分量有意义 原则上,可能有比样品更多的成分,但多余的成分将是无用的噪音
Scikit learn会引发错误,而不是默默地执行任何操作。这可以防止用户射中自己的脚。样本数少于特征数可能表明数据有问题,或者对所涉及的方法有误解。那么你是说,如果我将虚拟样本(>13)叠加到原始样本(1)中以获得组件(比如14)那么这将包含无用噪声的组件?@lcukerd我的意思是,如果scikit学习实现接受
n_components>n_samples
,您将获得无用噪声(或者可能是零组件)。如果您“伪造”其他数据,您可能会达到相同的效果。具体发生的情况取决于您使用的虚拟样本。
n_components == min(n_samples, n_features)