Scikit learn SKPCA组件数_

Scikit learn SKPCA组件数_,scikit-learn,pca,Scikit Learn,Pca,使用sklearn的PCA: m = np.random.randn(10, 5) mod = PCA() mod.fit_transform(m) mod.components\u将有5个组件,这对我来说很有意义,因为数据中有5个功能 但是如果m=np.random.randn(10,20) 模块组件将包含10个组件 假设mod.components.中的行对应于功能的数量,那么第二个示例中不应该有20个组件吗?数据中的组件不应该和功能一样多吗?来自scikit learn 因此,在第一种情

使用sklearn的PCA:

m = np.random.randn(10, 5)
mod = PCA()
mod.fit_transform(m)
mod.components\u
将有5个组件,这对我来说很有意义,因为数据中有5个功能

但是如果
m=np.random.randn(10,20)
模块组件
将包含10个组件

假设
mod.components.
中的行对应于功能的数量,那么第二个示例中不应该有20个组件吗?数据中的组件不应该和功能一样多吗?

来自scikit learn

因此,在第一种情况下,
min(10,5)=5
,输出形状是(5,5),在第二种情况下,
min(10,20)=10
,输出形状是
(10,20)

功能与组件:

假设您有一个数据集,包含3列(年龄、性别、风险系数)和500行。在这里,功能的数量是3而不是500。实例/观察/组件的数量为500。如何可能每一行都是一个独特的特征,而在这里,年龄、性别或风险因素是唯一的特征。
希望一切都清楚。

谢谢@ashraful。我想问题是为什么组件的数量设置为
n\u components=min(n\u样本,n\u特征)
?为什么不是
n\u组件=n\u功能
?我一直认为应该有尽可能多的组件和特性…我同意在你的3列示例中有3个特性,所以应该有3个组件。但假设你有5列(年龄、性别、危险因素、身高、体重),只有4个观察值。为什么组件的数量不是5?你有4个组件/观察值,但你想要组件5。如何找到不在数据集中的额外观测值?因此,将其作为min(n_样本,n_特征)以避免冲突。希望现在一切都清楚了。
n_components : int, None or string
Number of components to keep. if n_components is not set all components are kept:    
n_components == min(n_samples, n_features)
from sklearn.decomposition  import *
import numpy as np
m = np.random.randn(10, 5)
mod = PCA()
mod.fit_transform(m)
print(mod.components_.shape) # (5, 5)


m = np.random.randn(10, 20)
mod = PCA()
mod.fit_transform(m)
print(mod.components_.shape) # (10, 20)