微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我需要在主成分分析中指明要保留的成分数量?

如何解决为什么我需要在主成分分析中指明要保留的成分数量?

我发现要使用 pca 必须在开始时指明要保留的组件数量,例如在下一个代码中:

# Initialize
model = pca(n_components=3,normalize=True)

是否有任何仅表示方差并让算法给我最重要的组件的方法

解决方法

您不一定需要提前指定组件的数量。您可以提取所有分量并仅保留解释累积方差的给定部分的分量。请参阅下面的代码以获取示例。

import numpy as np
from sklearn.decomposition import PCA
from sklearn.datasets import make_spd_matrix
from sklearn.preprocessing import StandardScaler

# generate the data
np.random.seed(100)

N = 1000  # number of samples
K = 10    # number of features

mean = np.zeros(K)
cov = make_spd_matrix(K)
X = np.random.multivariate_normal(mean,cov,N)
print(X.shape)
# (1000,10)

# rescale the data
scaler = StandardScaler()
X = scaler.fit_transform(X)

# perform the PCA
pca = PCA(n_components=None)
pca.fit(X)

# extract the smallest number of components which
# explain at least p% (e.g. 80%) of the variance
p = 0.80
n_components = 1 + np.argmax(np.cumsum(pca.explained_variance_ratio_) >= p)
print(n_components)
# 6

# extract the values of the selected components
Z = pca.transform(X)[:,:n_components]
print(Z.shape)
# (1000,6)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。