Как уменьшить изменения положения после снижения размерности?

Вопрос или проблема

Отказ от ответственности: Я начинающий в машинном обучении.

Я работаю над визуализацией многомерных данных (текст как векторы tdidf) в 2D-пространство. Моя цель – маркировать/модифицировать эти точки данных и пересчитывать их позиции после модификации, обновляя 2D-график. Логика уже работает, но каждая итеративная визуализация сильно отличается от предыдущей, хотя изменяется только 1 из 28.000 признаков в 1 точке данных.

Некоторые детали о проекте:

  • около 1000 текстовых документов/точек данных
  • около 28.000 признаков вектора tfidf в каждом
  • необходимо быстро вычислять (скажем, < 3с) из-за интерактивного характера

Вот 2 изображения для иллюстрации проблемы:

Шаг 1:
Step 1

Шаг 2:
Step2

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

Общие решения

  1. Использование таргетированной инициализации:

    • Одним из подходов является инициирование второго шага визуализации с результатами первого шага. Это позволяет сохранить коммивентность и структуру данных между итерациями.
  2. Алгоритм UMAP:

    • UMAP (Uniform Manifold Approximation and Projection) позволяет инициализировать встраивание с определённым набором начальных позиций. Вы можете использовать результаты первого шага в качестве начальных точек для второго.
    • В библиотеке umap-learn в Python можно использовать параметр init для управления инициализацией.
  3. Фиксация ключевых точек:

    • Вы можете рассмотреть вариант сохранения положения некоторых ключевых точек, таких как центры кластеров, и использовать их для контроля новых нарисованных элементов.
    • Другие точки будут корректироваться относительно этих фиксированных позиций, обеспечивая более аналогичные результаты.

Практическая реализация

  1. Инициализация в 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)
  2. Перенос подходов на t-SNE:

    • Хотя t-SNE не имеет явной поддержки начальной инициализации, использование аналогичного подхода через фиксацию центра тяжести кластера может помочь уменьшить перемещения.

Заключение и оптимизация

Для уменьшения изменений позиций после понижения размерности важно оптимизировать инициализацию и учитывать теоретическую основу каждого алгоритма. Подходы к сохранению ключевых позиций и применению алгоритмов как t-SNE и UMAP с кастомной инициализацией являются практическими решениями, которые могут повысить качество визуализации без значительных изменений параметров работы системы. Методическая работа над этими аспектами обеспечит вам более стабильное и предсказуемое поведение визуализации данных в интерактивных системах.

Оцените материал
Добавить комментарий

Капча загружается...