Sklearn PCA:PC 的正确维数
Sklearn PCA: Correct Dimensionality of PCs
我有一个数据框,df
,其中包含一个名为 'event' 的列,其中有一个 24x24x40 的 numpy 数组。我想:
- 提取这个numpy数组;
- 将其展平为 1x23040 向量;
- 将此条目添加为新的 numpy 数组或数据帧中的列;
- 对生成的矩阵执行 PCA。
但是,PCA 生成维度为 'the number of entries' 的特征向量,而不是 'number of dimensions in the data'。
为了说明我的问题,我演示了一个运行良好的最小示例:
示例 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 数组的行是否可以按预期重塑和绘制。
如有任何想法,我们将不胜感激!
亲切的问候!
Sklearn 的文档指出当您不指定 n_components
参数时保留的组件数是 min(n_samples, n_features)
.
现在,转到您的示例:
在你的第一个例子中,数据样本的数量 1797
小于维度的数量 64
,因此它保持了整个维度(因为你没有指定组件的数量) .但是,在您的第二个示例中,数据样本的数量远远少于特征的数量,因此,sklearns 的 PCA 将维数减少到 n_samples
。
我有一个数据框,df
,其中包含一个名为 'event' 的列,其中有一个 24x24x40 的 numpy 数组。我想:
- 提取这个numpy数组;
- 将其展平为 1x23040 向量;
- 将此条目添加为新的 numpy 数组或数据帧中的列;
- 对生成的矩阵执行 PCA。
但是,PCA 生成维度为 'the number of entries' 的特征向量,而不是 'number of dimensions in the data'。
为了说明我的问题,我演示了一个运行良好的最小示例:
示例 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 数组的行是否可以按预期重塑和绘制。
如有任何想法,我们将不胜感激!
亲切的问候!
Sklearn 的文档指出当您不指定 n_components
参数时保留的组件数是 min(n_samples, n_features)
.
现在,转到您的示例:
在你的第一个例子中,数据样本的数量 1797
小于维度的数量 64
,因此它保持了整个维度(因为你没有指定组件的数量) .但是,在您的第二个示例中,数据样本的数量远远少于特征的数量,因此,sklearns 的 PCA 将维数减少到 n_samples
。