我尝试在一个图像数据集上执行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矩阵,其行表示平坦图像。在
尝试用PCA的
iterated_power
参数进行实验你可以试着
训练应该快得多。 您也可以尝试使用:
^{pr2}$哪个更具可扩展性 最后的解决方案可能是将图像转换为黑白图像,将维数减少3,如果您的任务不是颜色感知的(例如光学字符识别),这可能是一个很好的步骤
如果你认为你需要1000个主成分,你应该重新考虑你的降维选择。如果你有那么多,那么你就不再具有可解释性,所以你可以使用其他更灵活的降维算法(例如变分AUTCENCOLDER、t-sne、内核PCA)。主成分分析的一个主要优点是主成分的可解释性。在
如果您有相同地方的视频流,那么您应该可以使用<;10个组件(尽管主组件跟踪可能更好)。此外,如果您的图像数据集不包含类似的ish图像,那么PCA可能不是正确的选择。在
另外,对于图像,非负矩阵分解(NMF)可能更适合。对于NMF,可以执行随机梯度优化,对每个梯度步进的像素和图像进行二次采样。在
然而,如果你仍然坚持执行PCA,那么我认为Facebook提供的随机解算器是你最好的选择。运行
pip install fbpca
并运行以下代码如果不使用一些矩阵结构,例如稀疏性或块组合(你的数据集不太可能有这种结构),就不可能获得比这更快的速度。在
另外,如果您需要帮助来选择正确数量的主要组件,我建议使用以下代码
^{pr2}$当然,上面的代码不支持交叉验证,您应该使用交叉验证来选择正确数量的组件。在
相关问题 更多 >
编程相关推荐