我使用Python处理大约4000张手表图片(例如:watch_1, watch_2)。这些图片是RGB格式,分辨率为450×450。我的目标是找出其中最相似的几块手表。为此,我使用了scikit_learn
中的IncrementalPCA
和partial_fit
来处理这些大数据,我的电脑内存为26GB(另见:SO_Link_1, SO_Link_2)。我的源代码如下:
然而,当我开始运行这个程序处理40张手表图片时,在i = 1
时得到了以下错误:
ValueError: Number of input features has changed from 4 to 6 between calls to partial_fit! Try setting n_components to a fixed value.
然而,显然我在编写ipca = IncrementalPCA(n_components=6)
时已经将n_components
设置为6,但不知为何ipca
在i = 0
时认为chunk_size = 4
是组件数量,而在i = 1
时又变为6。
为什么会发生这种情况?
我该如何解决这个问题?
回答:
这似乎符合PCA背后的数学原理,因为当n_components > n_samples
时,它将变得病态条件。
尝试增加批量大小/块大小(或降低n_components)。
(总的来说,我对这种方法也有些怀疑。我希望你已经在一些小型示例数据集上使用批量PCA进行了测试。看起来你的手表图片在几何方面没有进行预处理:裁剪;可能还需要进行直方图/颜色归一化。)