Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么Sklearn PCA需要比新功能(n_组件)更多的样本?_Python_Python 3.x_Scikit Learn_Pca - Fatal编程技术网

Python 为什么Sklearn PCA需要比新功能(n_组件)更多的样本?

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](无需堆

当使用这样的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](无需堆叠虚拟阵列)?

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

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


Scikit learn会引发错误,而不是默默地执行任何操作。这可以防止用户射中自己的脚。样本数少于特征数可能表明数据有问题,或者对所涉及的方法有误解。

那么你是说,如果我将虚拟样本(>13)叠加到原始样本(1)中以获得组件(比如14)那么这将包含无用噪声的组件?@lcukerd我的意思是,如果scikit学习实现接受
n_components>n_samples
,您将获得无用噪声(或者可能是零组件)。如果您“伪造”其他数据,您可能会达到相同的效果。具体发生的情况取决于您使用的虚拟样本。
n_components == min(n_samples, n_features)