首页 > 解决方案 > Sklearn PCA:PC 的正确维度

问题描述

我有一个数据框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 个条目!

我不熟悉数据框,因此可能是我错误地遍历了数据框。但是,我检查了X示例 2 中生成的 numpy 数组的行是否可以按预期重新整形和绘制。

任何想法将不胜感激!

亲切的问候!

标签: pandasdataframescikit-learnpca

解决方案


Sklearn 的文档指出,不指定n_components参数时保留的组件数为min(n_samples, n_features).

现在,转到您的示例:

在您的第一个示例中,数据样本1797的数量小于维度的数量64,因此它保持整个维度(因为您没有指定组件的数量)。但是,在您的第二个示例中,数据样本的数量远远少于特征数量,因此,sklearns 的 PCA 将维度数量减少到n_samples.


推荐阅读