Почему уменьшение размерности улучшает неконтролируемую кластеризацию киноплакатов?

Я пишу статью, в которой я пытаюсь группировать постеры фильмов на основе их визуальных особенностей. Цель состоит в том, чтобы объединить постеры фильмов, которые выглядят одинаково.

Чтобы получить количественное описание того, как "выглядят" плакаты, я выделил 25088 функций для всех плакатов, используя предварительно обученный VGG16 CNN. Эти функции хранятся в матрице с размерами (# постеры фильмов, 25088).

Основываясь на извлеченных функциях, я хочу:

  1. Создайте группы / группы похожих постеров фильма, которые можно извлечь из сценария рекомендации.
  2. Получите список из n наиболее похожих плакатов с данным плакатом (например, n наиболее похожих плакатов с плакатом Мадагаскара).

Алгоритм кластеризации, который я буду использовать, - это K-means, и я оценил качество кластеризации, используя коэффициент Silhouette.

Я пробовал следующее:

  • Кластеризация с использованием необработанных признаков с помощью K-средних (с использованием косинусного сходства)
  • Выполнение PCA (10 компонентов) перед кластеризацией
  • Делать NMF (10 компонентов) перед кластеризацией
  • Вычисление матрицы сходства позволяет получить список из n наиболее похожих постеров фильма.

Я пытаюсь найти лучшее и самое простое решение. Поэтому у меня два вопроса:

  1. Использование PCA и NMF приводит к более высокому коэффициенту силуэта (соответственно 0,2 и 0,35) по сравнению с 0,01 по необработанным данным. Это потому, что большая часть дисперсии отбрасывается через PCA и NMF? Я обеспокоен тем, что это так, поскольку коэффициент силуэта повышается, поскольку я уменьшаю количество компонентов как в PCA, так и в NMF.
  2. Чтобы получить список из n наиболее похожих постеров, я рассчитал матрицу сходства, из которой я печатаю фильмы с наибольшим косинусным сходством с данным фильмом. Есть ли способ сделать это без расчета матрицы сходства? Мне кажется, что это должно быть возможно с использованием информации в выходных матрицах из PCA и NMF.

1 ответ

Вы не должны сравнивать Силуэт, рассчитанный на разных данных.

Но вы можете вычислять Silhouette с использованием исходных данных каждый раз и использовать только метки кластеров, найденные в проецируемых данных. Но это, вероятно, будет одинаково плохо из-за проклятия размерности.

Почему косинус? Это чрезмерно, у вас должен быть хороший аргумент для его использования.

PCA пытается сохранить дисперсию, а не углы. Так что косинус и PCA применимы в разных ситуациях.