python - 为什么 Sklearn PCA 需要比新功能(n_components)更多的样本?

标签 python python-3.x scikit-learn pca

像这样使用 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](无需堆叠虚拟数组)?

最佳答案

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

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

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

关于python - 为什么 Sklearn PCA 需要比新功能(n_components)更多的样本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51040075/

相关文章:

python - 多个过滤器 Python Data.frame

python - 从 Pandas 系列中获取值(value)

python - 解析引号和转义字符 CSV 文件

python - 将字符串字符串转换为数据框中的列表

python - metrics.r2_score 和acccuracy_score 之间有什么区别

python - 使用 Python 将 Web 日志文件作为 CSV 文件处理

python - Python 3 中 float 的精确累积和

python - 导入 : command not found with python 3. 5

Python 3.6 : detect highest/lowest values from calculated averages from user input

scikit-learn - 在 svm.scv() 中同时使用 "class_weight"和 "c"参数会发生什么?