【问题标题】:sklearn PCA number of components_sklearn PCA 组件数_
【发布时间】:2020-12-22 05:36:15
【问题描述】:

使用 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


    【解决方案1】:

    来自 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 是独特的特征。 希望一切都清楚。

    【讨论】:

    • 谢谢@ashraful。我想问题是为什么组件的数量设置为n_components=min(n_samples, n_features)?为什么不是n_components=n_features?我一直认为,组件应该和功能一样多……
    • 我同意在您的 3 列示例中有 3 个功能,因此应该有 3 个组件。但是,假设您有 5 列(年龄、性别、风险因素、身高、体重)并且只有 4 个观察值。为什么组件的数量不是 5?
    • 您有 4 个分量/观察值,但您想要 5 个分量。如何找到不在数据集中的额外观察值?因此将其作为 min(n_samples, n_features) 以避免冲突。希望现在一切都清楚了。
    猜你喜欢
    • 2014-04-03
    • 2021-03-24
    • 2017-07-19
    • 2015-09-27
    • 2019-04-03
    • 1970-01-01
    • 2018-08-18
    • 2018-09-11
    • 2018-09-13
    相关资源
    最近更新 更多