图像数据的scikitlearn PCA

2024-03-28 09:18:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在一个图像数据集上执行PCA,每个图像的大小为224x224x3,每个图像有100.000个。在

我希望将这些图像投影到一个1000维的空间中(或者在它周围的某个地方)。在

我在我的笔记本电脑(16gb内存,i7,没有GPU)上做这个,并且已经设置了svd_solver='randomined'。在

然而,合身需要永远。是数据集和图像尺寸太大了,还是我可以使用一些技巧?在

谢谢!在

编辑:

代码如下:

pca = PCA(n_components=1000, svd_solver='randomized')
pca.fit(X)
Z = pca.transform(X)

X是一个100000 X 150528矩阵,其行表示平坦图像。在


Tags: 数据内存图像gpu地方空间笔记本电脑投影
3条回答

尝试用PCA的iterated_power参数进行实验

你可以试着

svd_solver="svd_solver"

训练应该快得多。 您也可以尝试使用:

^{pr2}$

哪个更具可扩展性 最后的解决方案可能是将图像转换为黑白图像,将维数减少3,如果您的任务不是颜色感知的(例如光学字符识别),这可能是一个很好的步骤

如果你认为你需要1000个主成分,你应该重新考虑你的降维选择。如果你有那么多,那么你就不再具有可解释性,所以你可以使用其他更灵活的降维算法(例如变分AUTCENCOLDER、t-sne、内核PCA)。主成分分析的一个主要优点是主成分的可解释性。在

如果您有相同地方的视频流,那么您应该可以使用<;10个组件(尽管主组件跟踪可能更好)。此外,如果您的图像数据集不包含类似的ish图像,那么PCA可能不是正确的选择。在

另外,对于图像,非负矩阵分解(NMF)可能更适合。对于NMF,可以执行随机梯度优化,对每个梯度步进的像素和图像进行二次采样。在

然而,如果你仍然坚持执行PCA,那么我认为Facebook提供的随机解算器是你最好的选择。运行pip install fbpca并运行以下代码

from fbpca import pca

# load data into X
U, s, Vh = pca(X, 1000)

如果不使用一些矩阵结构,例如稀疏性或块组合(你的数据集不太可能有这种结构),就不可能获得比这更快的速度。在

另外,如果您需要帮助来选择正确数量的主要组件,我建议使用以下代码

^{pr2}$

当然,上面的代码不支持交叉验证,您应该使用交叉验证来选择正确数量的组件。在

相关问题 更多 >