Почему уменьшение размерности улучшает неконтролируемую кластеризацию киноплакатов?
Я пишу статью, в которой я пытаюсь группировать постеры фильмов на основе их визуальных особенностей. Цель состоит в том, чтобы объединить постеры фильмов, которые выглядят одинаково.
Чтобы получить количественное описание того, как "выглядят" плакаты, я выделил 25088 функций для всех плакатов, используя предварительно обученный VGG16 CNN. Эти функции хранятся в матрице с размерами (# постеры фильмов, 25088).
Основываясь на извлеченных функциях, я хочу:
- Создайте группы / группы похожих постеров фильма, которые можно извлечь из сценария рекомендации.
- Получите список из n наиболее похожих плакатов с данным плакатом (например, n наиболее похожих плакатов с плакатом Мадагаскара).
Алгоритм кластеризации, который я буду использовать, - это K-means, и я оценил качество кластеризации, используя коэффициент Silhouette.
Я пробовал следующее:
- Кластеризация с использованием необработанных признаков с помощью K-средних (с использованием косинусного сходства)
- Выполнение PCA (10 компонентов) перед кластеризацией
- Делать NMF (10 компонентов) перед кластеризацией
- Вычисление матрицы сходства позволяет получить список из n наиболее похожих постеров фильма.
Я пытаюсь найти лучшее и самое простое решение. Поэтому у меня два вопроса:
- Использование PCA и NMF приводит к более высокому коэффициенту силуэта (соответственно 0,2 и 0,35) по сравнению с 0,01 по необработанным данным. Это потому, что большая часть дисперсии отбрасывается через PCA и NMF? Я обеспокоен тем, что это так, поскольку коэффициент силуэта повышается, поскольку я уменьшаю количество компонентов как в PCA, так и в NMF.
- Чтобы получить список из n наиболее похожих постеров, я рассчитал матрицу сходства, из которой я печатаю фильмы с наибольшим косинусным сходством с данным фильмом. Есть ли способ сделать это без расчета матрицы сходства? Мне кажется, что это должно быть возможно с использованием информации в выходных матрицах из PCA и NMF.
1 ответ
Вы не должны сравнивать Силуэт, рассчитанный на разных данных.
Но вы можете вычислять Silhouette с использованием исходных данных каждый раз и использовать только метки кластеров, найденные в проецируемых данных. Но это, вероятно, будет одинаково плохо из-за проклятия размерности.
Почему косинус? Это чрезмерно, у вас должен быть хороший аргумент для его использования.
PCA пытается сохранить дисперсию, а не углы. Так что косинус и PCA применимы в разных ситуациях.