Проблема с кластеризацией: не могу найти подходящие параметры для HDBSCAN.Python

Программы на Python
Anonymous
Проблема с кластеризацией: не могу найти подходящие параметры для HDBSCAN.

Сообщение Anonymous »


Я создал модель факела, которая показывает, похожи ли два обрезанных изображения лиц в аниме или нет (обученная с использованием косинусного сходства и потери контрастности на парах лиц). Я получаю представления из своей модели для каждого изображения в тестовом наборе данных:

def Calculate_embeddings(модель, загрузчик): модель.eval() вложения = [] с torch.no_grad(): для пакетного_idx изображения в перечислении (загрузчик): изображения = images.to(устройство) пакетные_эмбеддинги = модель (изображения) embeddings.extend(batch_embeddings.cpu().numpy()) print('STEP %d/%d, Размер пакета: %d' % (batch_idx + 1, len(loader), images.size(0)), end='\t\r') вернуть np.array(вложения) embeddings = Calculate_embeddings (модель, кластеризация_загрузчик) Затем я их нормализую и выполняю кластеризацию:

из sklearn.preprocessing нормализовать импорт импорт hdbscan normal_embeddings = нормализовать(вложения, норма='l2') кластеризатор = hdbscan.HDBSCAN(min_cluster_size=6, min_samples=6) кластеры =usterer.fit_predict(norm_embeddings) Вот представление TSNE того, что я хочу получить (правильные кластеры на основе моего набора данных):
Изображение


Вот что я получаю:
Изображение


Будет хорошо, если будет несколько кластеров шума, но не 14226. Мой набор данных содержит 18969 обрезанных лиц. Можете ли вы предложить параметры для HDBSCAN? Я пытался увеличить min_saples, но получился один огромный кластер и еще один поменьше. Или, может быть, мне следует использовать другие кластеризаторы? Я пробовал использовать DBSCAN, но он дал еще худшие результаты, чем HDBSCAN. Или моя модель недостаточно обучена?

Вернуться в «Python»