我有一个数据帧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数组的行是否可以按预期的方式进行重塑和绘制。
任何想法将不胜感激!
亲切的问候!
答案 0 :(得分:1)
Sklearn的文档指出,未指定n_components
参数时保留的组件数为min(n_samples, n_features)
。
现在,转到您的示例:
在您的第一个示例中,数据样本1797
的数量小于维度64
的数量,因此它保持了整个维度(因为您没有指定组件的数量)。但是,在第二个示例中,数据样本的数量远远少于要素的数量,因此,sklearns的PCA将维数减少为n_samples
。