首页 > 解决方案 > 3D numpy 数组上的 PCA 实现

问题描述

我有一个 size 的功能集2240*5*16。2240 是样本数,5 表示通道数,16 表示提取的统计特征数,例如均值、方差等。现在,我想申请PCA. 但是,PCA适用于二维阵列。我应用了以下代码:

from sklearn.decomposition import PCA
pca = PCA(n_components=5)
pca.fit(features)

我收到以下错误。

ValueError: Found array with dim 3. Estimator expected <= 2.

它不支持axis争论。由于它仅适用于 2D,我如何在我的机箱 (3D) 上使用它?有什么建议,如果我想将尺寸从 减小2240*5*162240*5*5,好吗?

标签: pythonarraysnumpyscikit-learnpca

解决方案


我只会遍历每个通道并分别进行 PCA。

import numpy as np
from sklearn.decomposition import PCA

X = np.random.rand(1000, 5, 10)

X_transform = np.zeros((X.shape[0], 5, 5))
for i in range(X.shape[1]):

    pca = PCA(n_components=5)
    f  = pca.fit_transform(X[:, i, :])

    X_transform[:, i, :] = f

print((X_transform.shape))

推荐阅读