Уменьшите размерность вектора 4096 → менее 2000 для Postgres.

Я использую Postgresql с pgvector для поиска сходства между изображениями. Вектор должен иметь до 2000 измерений, чтобы Postgres/pgvector мог его индексировать.

Я создаю вектор изображения с помощью Python и VGG16/VGG19. В результате я получаю вектор с 4096 признаками/размерами. Мне нужно уменьшить его до менее 2000 измерений с помощью Python.

Как я могу этого добиться?

1 ответ

Я предлагаю вам использовать анализ главных компонентов (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). Только так вы сможете убедиться, что преобразование новых данных равно преобразованию существующих данных.

Другие вопросы по тегам