Sklearn PCA:PC 的正确维度
Posted
技术标签:
【中文标题】Sklearn PCA:PC 的正确维度【英文标题】:Sklearn PCA: Correct Dimensionality of PCs 【发布时间】:2019-07-26 19:12:25 【问题描述】:我有一个数据框df
,其中包含一个名为“事件”的列,其中有一个 24x24x40 的 numpy 数组。我想:
但是,PCA 生成的特征向量具有“条目数”的维度,而不是“数据中的维度数”。
为了说明我的问题,我演示了一个运行良好的最小示例:
示例 1
from sklearn import datasets, decomposition
digits = datasets.load_digits()
X = digits.data
pca = decomposition.PCA()
X_pca = pca.fit_transform(X)
print (X.shape)
Result: (1797, 64)
print (X_pca.shape)
Result: (1797, 64)
每种情况下都有 1797 个条目,特征向量的维数为 64。
现在进入我的例子:
示例 2
from sklearn import datasets, decomposition
import pandas as pd
hdf=pd.HDFStore('./afile.h5')
df=hdf.select('batch0')
print(df['event'][0].shape)
Result: (1, 24, 24, 40)
print(df['event'][0].shape.flatten())
Result: (23040,)
for index, row in df.iterrows():
entry = df['event'][index].flatten()
_list.append(entry)
X = np.asarray(_list)
pca = decomposition.PCA()
X_pca=pca.fit_transform(X)
print (X.shape)
Result: (201, 23040)
print (X_pca.shape)
Result:(201, 201)
这有数据数量的维度,201个条目!
我不熟悉数据框,因此可能是我错误地迭代了数据框。但是,我检查了示例 2 中 X
中生成的 numpy 数组的行是否可以按预期重新整形和绘制。
任何想法将不胜感激!
亲切的问候!
【问题讨论】:
【参考方案1】:Sklearn 的文档指出,当您不指定 n_components
参数时,保留的组件数量为 min(n_samples, n_features)
。
现在,转到您的示例:
在您的第一个示例中,数据样本的数量1797
小于维度数量64
,因此它保留了整个维度(因为您没有指定组件的数量)。但是,在您的第二个示例中,数据样本的数量远远少于特征数量,因此,sklearns 的 PCA 将维度数量减少到 n_samples
。
【讨论】:
谢谢 - 这确实是我的问题。以上是关于Sklearn PCA:PC 的正确维度的主要内容,如果未能解决你的问题,请参考以下文章
为啥 sklearn 的训练/测试拆分加上 PCA 会使我的标签不正确?
PCA碎石图PCA+正确的维度个数增量PCA(IncrementalPCA)随机PCA(Randomized PCA)KernelPCA