【问题标题】:Dimension reduction Using PCA while preserving variance in percentage使用 PCA 降维,同时保留百分比变化
【发布时间】:2016-09-17 14:08:12
【问题描述】:

我正在尝试使用 PCA 减少 MNIST 数据集的维度。诀窍是,我必须在减小维度的同时保留一定百分比的方差(比如 80%)。我正在使用 Scikit 学习。我正在做 pca.get_variance ratio 但它为我提供了具有不同点位置的相同值,例如 9.7 或 .97 或 .097。我也尝试过 pca.get_variance() 但我认为这不是答案。我的问题是如何确保我已经减少具有一定方差百分比保留的维度?

【问题讨论】:

    标签: python-3.x machine-learning scikit-learn pca


    【解决方案1】:

    如果您应用 PCA 而不传递 n_components 参数,则 PCA 对象的 explained_variance_ratio_ 属性将为您提供所需的信息。该属性表示与相应特征向量相关的总方差的分数。这是直接从当前稳定的PCA 文档中复制的示例:

    >>> import numpy as np
    >>> from sklearn.decomposition import PCA
    >>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
    >>> pca = PCA(n_components=2)
    >>> pca.fit(X)
    PCA(copy=True, n_components=2, whiten=False)
    >>> print(pca.explained_variance_ratio_) 
    [ 0.99244...  0.00755...]
    

    在您的情况下,如果您将np.cumsum 应用于explained_variance_ratio_ 属性,那么您需要保留的主成分数量对应于np.cumsum(pca.explained_variance_ratio_) 中大于或等于0.8 的第一个元素的位置.

    【讨论】:

    • 这让事情变得有点清楚......但是我必须做些什么来根据作为参数给出的特定百分比来保持方差,比如保留 50%、60% 等?我想这与调整 PCA 中的 n_component 有关。
    • 您可以在不指定 n_components 的情况下运行 LDA 以确定需要保留的数量,然后使用达到所需差异水平所需的组件数量重新运行 LDA。或者,您可以通过从数据中减去平均值并与 LDA 生成的特征向量子集进行矩阵相乘来自己进行转换。后者效率更高,但需要更多代码。
    猜你喜欢
    • 2017-10-02
    • 2018-08-27
    • 1970-01-01
    • 2017-08-05
    • 2013-03-06
    • 2016-02-04
    • 1970-01-01
    • 2013-12-31
    • 2020-10-27
    相关资源
    最近更新 更多