3D numpy 数组上的 PCA 实现

Posted

技术标签:

【中文标题】3D numpy 数组上的 PCA 实现【英文标题】:PCA implementation on 3D numpy array 【发布时间】:2021-04-25 04:18:24 【问题描述】:

我有一个大小为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*16 减小到2240*5*5,有什么建议吗?

【问题讨论】:

如果我明白了,选择还不够吗?类似pca.fit(features[:,:,0]) 您需要了解 PCA 的工作原理,以及适合您的数据的转换方式。一旦你弄清楚了,SO 就是获得帮助以实际进行转换的正确位置。这里不适合解释数学工具是如何派生的或应该如何使用的。 @non87。非常感谢您的回答。不,这样不行,尺寸仍然是 3D,产生同样的错误。 @MadPhysicist,非常感谢您的回答。恕我直言,我知道如何使用 PCA。我不认为我问错了什么。如果我有 2D 数据,那将是一种简单直接的方法。在这里,我不想将其转换为二维数组。我的问题很简单,我怎样才能将特征维度从 16 减少到 5。再次感谢 :) @MuhammadShahzad。您是唯一真正了解您的数据含义以及如何将其转换为适合您想要的 PCA 格式的人。可以通过多种方式将特征维度从 16 减少到 5,因此选择哪种方式取决于您。一旦你决定了你想做什么,它就变成了一个可以回答的编程问题。 【参考方案1】:

我会遍历每个通道并分别进行 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))

【讨论】:

以上是关于3D numpy 数组上的 PCA 实现的主要内容,如果未能解决你的问题,请参考以下文章

基于 2D 数组的 3D numpy 切片的平均值

为numpy 3D数组加速卷积循环?

重新调整 3d numpy 数组中的值

获取 3D numpy 数组中沿轴的连续非 nans 值总和的最大值

Sklearn PCA:PC 的正确维度

numpy 3D 图像数组到 2D