scikit-learn - sklearn PCA 组件数_
问题描述
使用 sklearn 的 PCA:
m = np.random.randn(10, 5)
mod = PCA()
mod.fit_transform(m)
mod.components_
将有 5 个组件,这对我来说很有意义,因为数据中有 5 个特征。
但是,如果m = np.random.randn(10, 20)
mod.components_
将包含 10 个组件
假设中的行mod.components_
对应于特征的数量,那么第二个示例中不应该有 20 个组件吗?数据中的组件不应该与特征一样多吗?
解决方案
来自 scikit-learn PCA
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)
所以在第一种情况下min(10,5)=5
,输出形状是(5,5),在第二种情况下min(10,20)=10
,输出形状是(10,20)
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)
功能与组件:
假设您有一个数据集,包含 3 个名为(Age、Sex、Risk_Factor)的列和 500 行。在这里,特征的数量是 3 而不是 500。实例/观察/组件的数量是 500。每行如何可能是一个独特的特征,而在这里,Age、Sex 或 Risk_Factor 是独特的特征。希望一切都清楚。