Вопрос или проблема
Отказ от ответственности: Я начинающий в машинном обучении.
Я работаю над визуализацией многомерных данных (текст как векторы tdidf) в 2D-пространство. Моя цель – маркировать/модифицировать эти точки данных и пересчитывать их позиции после модификации, обновляя 2D-график. Логика уже работает, но каждая итеративная визуализация сильно отличается от предыдущей, хотя изменяется только 1 из 28.000 признаков в 1 точке данных.
Некоторые детали о проекте:
- около 1000 текстовых документов/точек данных
- около 28.000 признаков вектора tfidf в каждом
- необходимо быстро вычислять (скажем, < 3с) из-за интерактивного характера
Вот 2 изображения для иллюстрации проблемы:
Я пробовал несколько алгоритмов уменьшения размерности, включая MDS, PCA, t-SNE, UMAP, LSI и автоэнкодер. Лучшие результаты по времени вычисления и визуальному представлению я получил с UMAP, поэтому в основном использовал его.
Пробегая по некоторым научным работам, я нашел эту с похожей проблемой (малое изменение в высоком измерении приводит к большому изменению в 2D):
https://ieeexplore.ieee.org/document/7539329
Вкратце, они используют t-SNE для инициализации каждого итеративного шага с результатом первого шага.
Во-первых: Как я бы мог это осуществить в коде? Это связано с random_state
в t-SNE?
Во-вторых: Можно ли применить эту стратегию к другим алгоритмам, таким как UMAP? t-SNE занимает гораздо больше времени и не подходит для интерактивного использования.
Или существует какое-то лучшее решение, о котором я не подумал для этой проблемы?
Вы можете инициализировать встраивание UMAP с помощью пользовательского набора начальных позиций, поэтому вы можете инициализировать шаг 2 с помощью встраивания с шага 1 (со случайными позициями для новых точек).
Чтобы уменьшить изменение позиций, важно знать, как работает t-SNE.
t-SNE — это проекция из многомерного пространства в более низкое, обычно 2D или 3D.
Для упрощения возьмем 2D-пространство низкой размерности.
Это 2D-пространство низкой размерности развивается с каждой итерацией, пока не будет найден баланс, который как можно лучше представляет многомерное пространство.
Пространство низкой размерности — это пространство вероятности с только относительным значением расстояния между точками.
Следовательно, если зафиксировать некоторые ключевые точки, такие как центры тяжести каждого кластера из первого результата, и использовать их положение в новой 2D-карте низкой размерности t-SNE, новые данные должны организоваться в соответствии с этими фиксированными точками.
Вам необходимо на каждом новом взаимодействии изменять положение ключевых точек, чтобы удерживать их фиксированными. Остальные точки должны постепенно изменять положение относительно этих ключевых точек, и в конце вы получите сопоставимые результаты.
Ответ или решение
Как уменьшить изменения позиций после понижения размерности?
Введение
При визуализации данных высокой размерности, таких как текстовые данные представленные векторами tf-idf, одной из распространённых проблем является значительное изменение позиций точек после минимальных изменений в данных. Давайте рассмотрим, как минимизировать эти изменения, обеспечивая тем самым более стабильную визуализацию данных.
Контекст и необходимость
-
Ключевые параметры проекта:
- Около 1000 текстовых документов.
- Каждый документ представлен вектором tf-idf с 28,000 признаков.
- Визуализация в 2D-пространстве должна выполняться быстро (менее 3 секунд) для интерактивного использования.
-
Проблема:
- Изменение одной из 28,000 функций в данной точке приводит к значительным изменениям на 2D-плоскости, что нежелательно для пользователей, требующих стабильной визуализации.
Общие решения
-
Использование таргетированной инициализации:
- Одним из подходов является инициирование второго шага визуализации с результатами первого шага. Это позволяет сохранить коммивентность и структуру данных между итерациями.
-
Алгоритм UMAP:
- UMAP (Uniform Manifold Approximation and Projection) позволяет инициализировать встраивание с определённым набором начальных позиций. Вы можете использовать результаты первого шага в качестве начальных точек для второго.
- В библиотеке umap-learn в Python можно использовать параметр
init
для управления инициализацией.
-
Фиксация ключевых точек:
- Вы можете рассмотреть вариант сохранения положения некоторых ключевых точек, таких как центры кластеров, и использовать их для контроля новых нарисованных элементов.
- Другие точки будут корректироваться относительно этих фиксированных позиций, обеспечивая более аналогичные результаты.
Практическая реализация
-
Инициализация в UMAP:
import umap import numpy as np # Инициализация модели UMAP umap_model = umap.UMAP() # Первоначальная редукция размерности embedding1 = umap_model.fit_transform(data) # Использование вложения из первого этапа как инициализации umap_model2 = umap.UMAP(init=embedding1) embedding2 = umap_model2.fit_transform(modified_data)
-
Перенос подходов на t-SNE:
- Хотя t-SNE не имеет явной поддержки начальной инициализации, использование аналогичного подхода через фиксацию центра тяжести кластера может помочь уменьшить перемещения.
Заключение и оптимизация
Для уменьшения изменений позиций после понижения размерности важно оптимизировать инициализацию и учитывать теоретическую основу каждого алгоритма. Подходы к сохранению ключевых позиций и применению алгоритмов как t-SNE и UMAP с кастомной инициализацией являются практическими решениями, которые могут повысить качество визуализации без значительных изменений параметров работы системы. Методическая работа над этими аспектами обеспечит вам более стабильное и предсказуемое поведение визуализации данных в интерактивных системах.