postgresql 减少向量维数4096 -> Postgres的小于2000

9cbw7uwe  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(159)

我使用PostgreSQL和pgvector来搜索图像之间的相似性。向量应该有多达2000个维度,以便Postgres/pgvector可以索引它。
我正在用Python和VGG 16/VGG 19创建图像的矢量。结果,我得到了一个包含4096个特征/维度的向量。我需要使用Python将其减少到小于2000维。
我如何才能做到这一点?

uhry853o

uhry853o1#

我建议您使用Principal Component Analysis(PCA)来减少源向量的维度。
您可以修改此代码(这里使用随机虚拟数据来说明):

from sklearn.decomposition import PCA
import numpy as np

vectors_4096 = np.array([np.random.normal(size=4096) for x in range(5000)])
display(vectors_4096.shape)
>>> (5000, 4096)

# instantiate PCA 
# for n_components choose number of dims that you want to reduce to
pca = PCA(n_components=2000)

# fit PCA model and transform data:
vectors_pca = pca.fit_transform(vectors_4096)
display(vectors_pca.shape)
>>> (5000, 2000)

请注意,您必须在语料库上拟合PCA模型一次,然后仅将拟合模型的transform()函数用于新的、未见过的数据(例如,数据)。一些新的嵌入,您可能希望将其摄取到PostgreSQL数据库中)。只有这样,您才能确保新数据的数据转换等于转换后的现有数据。

相关问题