gpt4 book ai didi

python - IncrementalPCA 和partial_fit - 组件数量

转载 作者:行者123 更新时间:2023-11-30 08:58:47 29 4
gpt4 key购买 nike

我使用 python 和大约 4000 张 watch 图像(例如: watch_1watch_2 )。图像为 RGB,分辨率为 450x450。我的目标是找到其中最相似的 watch 。因此我使用 IncrementalPCApartial_fit scikit_learn 来使用我的 26GB RAM 处理这些大数据(另请参阅: SO_Link_1SO_Link_2 )。我的源代码如下:

import cv2
import numpy as np
import os
from glob import glob
from sklearn.decomposition import IncrementalPCA
from sklearn import neighbors
from sklearn import preprocessing


data = []

# Read images from file #
for filename in glob('Watches/*.jpg'):

img = cv2.imread(filename)
height, width = img.shape[:2]
img = np.array(img)

# Check that all my images are of the same resolution
if height == 450 and width == 450:

# Reshape each image so that it is stored in one line
img = np.concatenate(img, axis=0)
img = np.concatenate(img, axis=0)
data.append(img)

# Normalise data #
data = np.array(data)
Norm = preprocessing.Normalizer()
Norm.fit(data)
data = Norm.transform(data)

# IncrementalPCA model #
ipca = IncrementalPCA(n_components=6)

length = len(data)
chunk_size = 4
pca_data = np.zeros(shape=(length, ipca.n_components))

for i in range(0, length // chunk_size):
ipca.partial_fit(data[i*chunk_size : (i+1)*chunk_size])
pca_data[i * chunk_size: (i + 1) * chunk_size] = ipca.transform(data[i*chunk_size : (i+1)*chunk_size])

# K-Nearest neighbours #
knn = neighbors.NearestNeighbors(n_neighbors=4, algorithm='ball_tree', metric='minkowski').fit(data)
distances, indices = knn.kneighbors(data)
print(indices)

但是,当我从 40 个 watch 图像开始运行此程序时,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,但出于某种原因 ipcai = 0 以及当 i = 1 更改为 6 时,将 chunk_size = 4 视为组件数量。

为什么会发生这种情况?

我该如何解决这个问题?

最佳答案

这似乎遵循 PCA 背后的数学原理,因为它对于 n_components > n_samples 来说是病态的。

您可能有兴趣阅读this (错误消息的介绍)和 some discussion behind it .

尝试增加批量大小/ block 大小(或降低 n_components)。

(总的来说,我对这种方法也有些怀疑。我希望您使用批处理 PCA 在一些小型示例数据集上测试了它。您的 watch 似乎没有在几何方面进行预处理:裁剪;也许是历史-/颜色标准化。)

关于python - IncrementalPCA 和partial_fit - 组件数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48929072/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com