Вот часто, когда слышишь про математику в ML, звучат только байесовские методы, производные, интерполяции, а еще иногда тензоры... Но математический аппарат в машинном обучении может уходить глубоко в корни даже, как кажется, совершенно фундаментальных и абстрактных направлений этой науки.
Сегодня мы немного коснемся TDA, топологического анализа данных. Постараемся писать просто. Чтобы даже самому неопытному студенту было понятно. Цель статьи заинтересовать, ведь TDA - авангардная штука. Но начать нужно с самой базы: "Зачем и для чего, да и что такое... эта ваша топология?"
Топология занимается исследованием свойств пространств, сохраняющихся при непрерывных деформациях. Первым здесь представляется теория "гравитации", искажения пространства-времени... В отличие от геометрии, где важны размеры и формы, топология концентрируется на свойствах, устойчивых к изменениям без разрывов и склеек.
Чтобы понять, что это означает, можно представить резиновый лист, который можно сгибать, растягивать, сжимать, но нельзя рвать или склеивать — те свойства, которые сохраняются при таких изменениях, и интересуют топологов. Классический пример.
Важное понятие здесь — "непрерывность". Если два объекта можно трансформировать один в другой через непрерывные деформации, они называются топологически эквивалентными. Это просто. Пластилиновый шарик эквивалентен пластилиновому кубику.
Топологическое пространство — это основное понятие в топологии, которое расширяет интуитивное понимание пространства. И в этом сложность топологии. Это структура, в которой определены понятия "близости" или "соседства" точек, хотя эта близость может отличаться от привычной евклидовой геометрии.
Например, на сфере или на торе понятие соседства точек будет отличаться от того, что мы видим в плоском пространстве. Более того, в топологическом пространстве можно говорить о таких понятиях, как открытые и замкнутые множества.
Открытые множества — это те, в которых каждая точка окружена другими точками этого множества, а замкнутые множества включают свои границы. Абстрактный уровень, безусловно...
Сложность здесь в том, что нам трудно представить шар как пространство — мы лишь можем представить шар в трехмерном пространстве. И это ключевое различие и то, почему этот уровень математики находится, скорее, в формулах. Которых мы постараемся избегать.
Гомотопия — это понятие, которое описывает деформацию одного объекта в другой. Говоря строго, два объекта гомотопичны, если один может быть непрерывно преобразован в другой. Представим, что у нас есть петля на плоскости — если мы можем стянуть её в одну точку без разрывов и узлов, то такая петля гомотопична точке.
В более сложных случаях, как, например, на торе (бублик), петля, огибающая отверстие, уже не может быть стянута в точку, и это принципиально важное различие между пространствами с разной топологической структурой. Гомотопия помогает нам классифицировать объекты и пространства по их "деформируемости".
Гомология — это более абстрактный способ изучения топологических пространств, который связывает алгебру с топологией. Она позволяет изучать "дыры" в пространстве разных размерностей.
Гомологические группы — это алгебраические структуры, которые описывают количество и размерность таких дыр.
Например, в двумерной сфере нет дыр ни в центре, ни на поверхности, а в торе есть одна "дыра" по центру и одна, образованная отверстием.
Таким образом, гомология позволяет свести топологические задачи к алгебраическим, делая возможным вычисление топологических инвариантов — характеристик, не зависящих от формы объекта.
С развитием вычислительной техники топология нашла своё место в анализе данных. Применение топологии к данным базируется на том, что топологические методы могут выявлять скрытые структуры в многомерных или сложных наборах данных, а.к.а пространствах, которые традиционные аналитические методы могут просто не уловить.
Мы кратко пробежимся по основным принципам и методологиям анализа данных, пока что без кодерских нюансов и приколов...
Топологический анализ данных (TDA) противостоят традиционным статистическим и геометрическим подходам. Все сводится к выявлению компонент связности, дыр или пустоты, и их устойчивости по мере изменения масштаба или разрешения данных.
Например, персистентная гомология (т.е изучение разрывов при масштабировании пространств, наших многомерных данных) - фундаментальный методом TDA и служит для анализа топологических инвариантов (многоликих реализаций) на разных масштабах.
Как изменяются топологические структуры, такие как компоненты связности, циклы и пустоты, при постепенном увеличении масштаба? – вот главный вопрос.
Конечно, мы говорим об вычислительной топологии, поэтому нам нужны инструменты, чтобы говорить на языке дискретной геометрии, точек и отрезков...
Поэтому проверка производится через фильтрацию данных, где создается последовательность симплициальных комплексов — абстрактных/дискретных объектов, представляющих связи между точками данных. Это условно.
Например, несколько треугольников могут соединяться, чтобы образовать многоугольник или даже более сложные фигуры. Мы абстрагируем выделенное пространство или совокупность данных через понятные, отдельные и исчислимые объекты, которые можно посчитать.
Если возник вопрос: "Так данные уже дискретны и исчислимы, зачем что-то переводить?" – ответ таков, что топология — работа со множествами без дискретизации.
Поэтому, чтобы свести данные и топологию нужно обратиться к вычислительной топологии, которая позволяет работать с этими дискретными данными, оставаясь внутри топологической логики.
В каждый момент времени симплициальный комплекс имеет определённые топологические характеристики, но по мере изменения масштаба одни структуры появляются, а другие исчезают.
Эти "события" фиксируются в так называемых персистентных диаграммах, где на оси откладывается время появления и исчезновения топологических инвариантов. Грубо говоря, мы просто отслеживаем событийность, некие артефакты при постепенном увеличении масштаба наших данных.
Диаграмма визуализирует жизненный цикл каждого инварианта, позволяя отличить значимые (персистентные) структуры от шумовых (временных).
Таким образом, персистентная гомология помогает выявить наиболее устойчивые топологические характеристики данных, которые сохраняются на разных масштабах и, следовательно, являются наиболее информативными.
Персистентные диаграммы можно визуализировать с помощью баркодов — это такие совокупности отрезков, каждый из которых обозначает интервал времени существования той или иной топологической структуры.
Более длинные отрезки указывают на более персистентные и значимые топологические инварианты, в то время как короткие отрезки можно интерпретировать как шумовые флуктуации в данных.
Баркоды дают наглядное представление о том, какие топологические структуры доминируют на различных уровнях разрешения, и помогают исследователям глубже понять внутреннюю организацию данных.
Визуализация персистентных диаграмм через баркоды — это мощный инструмент, поскольку он позволяет легко интерпретировать сложные многомерные структуры данных, сводя их к простым и интуитивным визуальным образам.
Но это все круто, но как нам прозрачно и ясно и, конечно же, косвенно вычислять
Теорема о замыкании, которая также применяется в TDA, описывает важную топологическую характеристику данных, связанную с плотностью и компактификацией пространств.
В контексте анализа данных теорема помогает определить, какие части данных образуют замкнутые множества, а какие остаются открытыми. Это важно для понимания того, насколько структурированы данные и насколько их топологическая форма подвержена изменениям.
Теорема о замыкании играет ключевую роль в выявлении границ кластеров и компонентов связности, что позволяет более точно интерпретировать топологические свойства наборов данных.
Метод Mapper — ещё один значимый инструмент TDA, который служит для снижения размерности данных, сохраняя при этом топологические и геометрические свойства исходного пространства.
Mapper создает упрощённую топологическую модель данных, разбивая их на кластеры и отображая их как граф, где узлы представляют кластеры, а ребра — связи между ними. Этот метод полезен для визуализации и понимания структуры сложных наборов данных, поскольку он позволяет увидеть взаимосвязи между различными кластерами, их внутренние связи и дыры.
Для вычисления персистентная гомологии или топологической кластеризации, применяются понятные алгоритмы. Мы уже обозначили, что для решения задач с топологией нам нужны симплициальные комплексы.
Симплициальные комплексы строятся для различных масштабов (уровней фильтрации), что позволяет исследовать данные на разных уровнях детализации. Далее, гомологические группы вычисляются для каждого масштаба, что помогает выявить устойчивые топологические структуры.
Один из популярных алгоритмов — это алгоритм построения Вьеторис-Рипс комплексов, который начинается с создания симплексов (групп точек данных, которые можно рассматривать как обобщения треугольников на более высокие размерности) и продолжается через их фильтрацию.
По мере увеличения масштаба симплексы добавляются в комплекс, и топологические структуры, связности или циклы, начинают появляться.
Алгоритм фиксирует моменты появления и исчезновения этих структур, которые затем интерпретируются через персистентные диаграммы.
Данный подход широко используется для анализа данных в условиях многомерности, так как он устойчив к шуму и может быть адаптирован для данных с высокой размерностью.
Работают с этим алгоритмом, например, GUDHI, Dionysus и Ripser, предоставляют удобные инструменты для реализации этих алгоритмов.
Пример кода с использованием GUDHI может выглядеть следующим образом:
import gudhi as gd
# Создание простого симплициального комплекса
rips_complex = gd.RipsComplex(points=data_points, max_edge_length=2.0)
simplex_tree = rips_complex.create_simplex_tree(max_dimension=2)
# Вычисление персистентной гомологии
simplex_tree.compute_persistence()
# Получение персистентных баркодов
diag = simplex_tree.persistence()
gd.plot_persistence_barcode(diag)
Здесь мы сначала создаём симплициальный комплекс, основанный на данных data_points, затем вычисляем его персистентную гомологию и визуализируем баркоды, которые показывают жизненные циклы топологических инвариантов на разных уровнях фильтрации.
Dionysus — это ещё одна библиотека, которая предоставляет гибкие инструменты для вычисления персистентной гомологии.
В отличие от GUDHI, Dionysus фокусируется на алгоритмах, связанных с фильтрацией данных и управлением симплициальными комплексами. Она поддерживает работу с большими данными и многомерными пространствами, предоставляя возможности для настройки алгоритмов под конкретные задачи.
Ripser — это специализированная библиотека для быстрой и эффективной реализации вычислений персистентной гомологии. Для мобилок:)
Для ускорения вычислений в контексте больших данных часто применяются методы оптимизации, такие как сокращение размера симплициальных комплексов и использование специальных структур данных: KD-деревья и сеточные методы.
Например, для того чтобы избежать вычисления симплексов для всех возможных комбинаций точек, можно использовать методы выборки или приближённые алгоритмы для фильтрации данных.
KD-деревья позволяют эффективно искать ближайших соседей, что важно для построения рипсовых комплексов.
Это особенно актуально для высокоразмерных данных, где даже небольшие оптимизации могут существенно сократить время вычислений.
Кроме того, применяются параллельные вычисления и распределённые системы, что позволяет обрабатывать очень большие наборы данных, разбивая их на части и выполняя вычисления параллельно.
Например, библиотека Ripser поддерживает оптимизацию по времени и памяти за счёт отказа от хранения всех симплексов в памяти одновременно, что позволяет обрабатывать наборы данных, которые не поместились бы в память при обычном подходе.
Для примера мы будем использовать набор данных о ценах акций за определённый период. Мы применим метод персистентной гомологии, чтобы выявить устойчивые топологические структуры в данных.
В начале программы происходит импорт необходимых библиотек для работы с финансовыми данными и их последующего анализа.
Мы загружаем исторические данные о ценах акций компании из CSV-файла, при этом используем библиотеку pandas для обработки данных.
Мы указываем, что колонка с датами будет использоваться как индекс, и выбираем только столбец, содержащий информацию о ценах закрытия акций.
После этого данные приводятся к месячным значениям с использованием функции resample, которая усредняет значения за каждый месяц. Пропуски в данных убираются с помощью метода dropna, чтобы избежать ошибок в дальнейшем анализе.
import pandas as pd
import numpy as np
import gudhi as gd
import matplotlib.pyplot as plt
# Загрузка данных о ценах акций
# Например, используем данные о ценах акций компании Apple за последние 5 лет
data = pd.read_csv('AAPL.csv', parse_dates=['Date'], index_col='Date')
data = data[['Close']] # Используем только столбец с ценами закрытия
data = data.resample('M').mean() # Приводим данные к месячным интервалам
data.dropna(inplace=True) # Убираем пропуски
Теперь мы приведём данные к формату, подходящему для построения симплициальных комплексов.
Для этого можно использовать метод «сдвига» для создания последовательности временных окон. Мы будем использовать окна фиксированной длины для формирования точек в многомерном пространстве.
Задаётся размер окна, например, 12 месяцев, и для каждого окна формируется массив значений цен закрытия акций. Это позволяет преобразовать временные ряды в наборы точек в многомерном пространстве.
Такой подход полезен, потому что топологический анализ работает с многомерными данными, а использование окон позволяет извлечь информацию о динамике цен в различные периоды.
# Определяем длину окна
window_size = 12 # 12 месяцев
data_windows = []
for i in range(len(data) - window_size):
window = data['Close'].iloc[i:i + window_size].values
data_windows.append(window)
data_windows = np.array(data_windows) # Преобразуем в массив NumPy
На следующем этапе мы используем библиотеку GUDHI для создания рипсового комплекса на основе полученных точек. Рипсовый комплекс создаётся с помощью функции RipsComplex, которая использует расстояния между точками для построения симплициальных комплексов.
Параметр max_edge_length задаёт максимальное расстояние между точками, при котором они считаются связанными, а параметр max_dimension указывает, что мы будем рассматривать симплексы до второй размерности, то есть отрезки, треугольники и другие простейшие многомерные структуры.
# Создаем рипсовый комплекс
rips_complex = gd.RipsComplex(points=data_windows, max_edge_length=5.0) # max_edge_length можно подбирать
simplex_tree = rips_complex.create_simplex_tree(max_dimension=2) # Рассматриваем до 2D симплексов
Теперь мы вычислим персистентную гомологию для полученного симплициального комплекса и визуализируем результаты.
# Вычисляем персистентную гомологию
persistence = simplex_tree.persistence()
# Визуализируем персистентные диаграммы
gd.plot_persistence_diagram(persistence)
plt.title("Persistent Diagram")
plt.show()
# Визуализируем баркоды
gd.plot_persistence_barcode(persistence)
plt.title("Persistence Barcode")
plt.show()
После выполнения приведённого выше кода мы получаем персистентные диаграммы и баркоды, которые визуализируют устойчивые топологические структуры в данных о ценах акций.
Персистентные диаграммы показывают, какие топологические инварианты были обнаружены на разных уровнях фильтрации. Каждый отрезок в баркоде представляет собой интервал времени, в течение которого определённая топологическая структура существовала.
Если, например, мы видим длинные отрезки в баркоде, это может указывать на устойчивые тренды или паттерны в данных о ценах акций.
Если такие паттерны появляются на разных временных масштабах, это может сигнализировать о наличии фундаментальных факторов, влияющих на динамику цен.
В ходе топологического анализа мы можем выявить важные структуры, такие как стабильные ценовые тренды, циклы и аномалии.
Например, если мы наблюдаем, что определённые тренды сохраняются в течение длительного времени (что видно по длинным отрезкам на персистентной диаграмме), это может указывать на фундаментальные факторы, влияющие на рынок, такие как изменения в спросе или предложении, экономические события или изменения в компании.
Аномалии, которые могут быть представлены короткими отрезками, могут свидетельствовать о волатильности рынка или краткосрочных колебаниях цен, вызванных спекуляциями.
В биоинформатике TDA помогает анализировать биологические данные, которые обычно имеют сложную и высокоразмерную природу.
Например, белковые структуры, ДНК или данные транскриптомики могут быть представлены как многомерные объекты. Используя методы персистентной гомологии, можно изучать, как изменяются топологические характеристики этих объектов по мере изменения фильтрации, что позволяет выявить устойчивые структуры, такие как петли или пустоты.
В геномике топологический анализ помогает исследовать взаимоотношения между генами, которые могут иметь сложную сетевую природу, например, гены, ответственные за определённые биологические процессы, могут образовывать устойчивые топологические структуры.
При анализе изображений топологический анализ помогает распознавать сложные формы и паттерны в данных.
Представьте изображение как набор точек в многомерном пространстве, каждая из которых характеризуется не только своими координатами, но и цветом, текстурой и другими признаками. TDA помогает выделить основные топологические свойства: контуры объектов, их границы, а также устойчивые структуры, которые сохраняются при изменении масштаба или шумов в изображении.
Персистентная гомология позволяет оценивать, как долго существуют определённые паттерны в изображении при изменении фильтрации, что помогает улучшать алгоритмы распознавания изображений или классификации объектов.
Например, в медицинская диагностика, TDA помогает точно выделить границы между разными типами тканей или патологическими образованиями.
Финансовые данные также обладают сложной многомерной природой. Цены на акции, валютные курсы, объёмы торгов — всё это временные ряды, которые можно анализировать с помощью топологических методов.
Используя TDA, можно выявлять скрытые тренды, циклы или аномалии в динамике цен, которые могут оставаться незамеченными при использовании традиционных методов.
Топологический анализ, например, позволяет выявить устойчивые ценовые паттерны, которые могут свидетельствовать о долгосрочных трендах на рынке, а также аномальные структуры, которые могут указывать на волатильность или внезапные изменения цен.
Персистентная гомология помогает анализировать, как изменяются эти паттерны в зависимости от временного масштаба, что может быть полезно при разработке торговых стратегий или управлении рисками.
Да и куда без ресерча?
Нейронные сети имеют сложную топологическую структуру, особенно в контексте глубокого обучения, где модель может содержать множество скрытых слоев и параметров.
С помощью методов TDA можно изучать топологические свойства данных, которые проходят через сеть, анализировать, как нейронные активации формируют сложные структуры на различных уровнях абстракции.
Например, в задачах классификации изображений персистентная гомологию можно использовать для анализа выходных слоёв нейронной сети, чтобы понять, как сеть интерпретирует входные данные, а также выявить ошибки или пробелы в обобщении модели...
“Topological Data Analysis for Machine Learning: A Survey”
“Topological Deep Learning: A Review of an Emerging Paradigm”
«Explaining the Power of Topological Data Analysis in Graph Machine Learning»
Статья исследует роль TDA в анализе графов, демонстрируя, как альфа‑комплексы и фильтрации, могут улучшить понимание формы и связности данных в графовых структурах. Это полезно для анализа социальных сетей и сети взаимодействия белков.
«A Topological Machine Learning Pipeline for Classifying Disease Subtypes»
В статье показано, как топологический анализ данных может применяться в биоинформатике для классификации подтипов заболеваний через исследование персистентности топологических особенностей в биологических данных.
«Towards Efficient Machine Learning with Persistence Diagrams»
Исследование сосредоточено на оптимизации использования диаграмм персистентности, ключевого инструмента в TDA, для улучшения алгоритмов машинного обучения.