Удивительное поведение данных в более высоких измерениях

Удивительные особенности данных в высших измерениях

Путешествие в удивительный мир высокомерных данных: благословения и вызовы

Фото: Guillermo Ferla, Unsplash

Ричард Фейнман, выдающийся физик, однажды сказал: «Могу смело сказать, что никто не понимает квантовую механику». В своем интервью под названием «Весело представить с Ричардом Фейнманом» он затронул странное поведение вещей на уровне атомных и субатомных частиц, отметив, как они часто противоречат нашему здравому смыслу. Интересно, что мы можем заметить подобное поведение на уровне данных с более высокой размерностью. Это не совсем как квантовая механика, но в этом есть схожий элемент удивления и красоты – сочетание с некоторыми/многими проблемами – при переходе от низких к высоким измерениям.

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

Данные с высокой размерностью, или данные в более высоких измерениях, в контексте анализа данных и машинного обучения, обычно относятся к наборам данных, имеющим большое количество переменных, признаков или атрибутов. Каждый из них представляет собой отдельную «измеримую величину» в наших данных.

Для начала рассмотрим некоторые примеры, которые подчеркивают различия, возникающие при переходе от низкоразмерных пространств к пространствам более высокой размерности.

Концентрация объема в пространствах более высокой размерности

Сначала рассмотрим концепцию концентрации объема в пространствах более высокой размерности. Предположим, что мы генерируем случайные точки внутри гиперкуба, стороны которого варьируются от 0 до 1. Какова вероятность того, что эти точки попадут в среднюю область этого гиперкуба при увеличении его размерности?

Фото от автора

На изображении выше предположим, что x – это маленькое значение, например, 0.1. Мы пытаемся определить, как вероятность случайного попадания точки в эту среднюю область (не на грани) меняется с увеличением размерности.

  1. Одномерное пространство (линия)

Представьте себе отрезок прямой от 0 до 1. Средняя часть находится между 0.1 и 0.9. Вероятность того, что случайная точка попадет сюда, просто равна длине этой средней части по отношению ко всей длине, которая составляет 0.8.

2. Двумерное пространство (квадрат)

Теперь представьте себе квадрат, каждая сторона которого варьируется от 0 до 1. Средняя область – это меньший квадрат с каждой стороной от 0.1 до 0.9. Вычисление вероятности включает сравнение площади этого меньшего квадрата со всей площадью, что дает нам вероятность 0.64.

3. Трехмерное пространство (куб)

Для куба с каждой стороной 1, средняя область – это меньший куб с каждой стороной от 0.1 до 0.9. Здесь вероятность – это объем этого меньшего куба, деленный на общий объем, что приводит к 0.512.

4. Более высокие размерности (гиперкуб)

В гиперкубе с n измерениями «объем» средней области сужается по мере увеличения размерности. Например, в 4D вероятность составляет 0.4096, в 5D – 0.32768, а в 10D она падает примерно до 0.10737.

Обобщение этой идеи начинается с рассмотрения грани как маленького расстояния x, как показано на изображении выше. Для линии вероятность того, что точка попадет в среднюю область, равна 1–2x. Для квадрата – (1–2x)*(1–2x), так как точка должна попасть в среднюю область по обоим измерениям.

Этот шаблон продолжается в n измерениях, где вероятность попадания в среднюю область равна (1–2x)^n, становясь очень малой в более высоких измерениях.

Обратите внимание, что здесь мы упрощаем, рассматривая длину каждой стороны равной 1.

Вписывание гиперсферы в гиперкуб

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

Что такое гиперкуб вообще?

Представьте себе квадрат. Теперь раздуйте его в куб. Вот и переход от 2D к 3D. Теперь сделайте прыжок в четвертое измерение и дальше — вот там появляются гиперкубы. Гиперкуб в основном – это куб, расширенный в более высокие измерения. Это фигура с равными сторонами, и в нашей симуляции мы рассматриваем гиперкубы с длиной стороны равной 2. Формула для его объема? просто 2^n(2 в степени n) для n-мерного гиперкуба.

А гиперсфера?

Гиперсфера – это многомерный аналог сферы, возникает, когда вы расширяете 2D окружность в 3D (образуя сферу), а затем продолжаете расширяться в более высокие измерения. Зацепка? Объем гиперсферы не так просто вычислить. Он включает число π (да, знаменитое 3.14159…) и гамма-функцию, которая похожа на факториал на стероидах. Вкратце, объем гиперсферы с радиусом 1 в n-мерном пространстве:

Гамма-функция Γ(n) расширяет факториальную функцию до вещественных и комплексных чисел. Для положительных целых чисел n, Γ(n)=(n−1)!, а для нецелых значений вычисляется численно.

Для вычисления этого отношения с использованием Python, мы можем использовать следующий код:

import math
import matplotlib.pyplot as plt

def hypersphere_volume(dim):
    """ Calculate the volume of a hypersphere with radius 1 in 'dim' dimensions. """
    return math.pi ** (dim / 2) / math.gamma(dim / 2 + 1)

def hypercube_volume(dim):
    """ Calculate the volume of a hypercube with side length 2 in 'dim' dimensions. """
    return 2 ** dim

# Количество размерностей для рассмотрения
max_dim = 20

# Списки для хранения объемов и значений размерностей
dimensions = range(1, max_dim + 1)
sphere_volumes = [hypersphere_volume(dim) for dim in dimensions]
cube_volumes = [hypercube_volume(dim) for dim in dimensions]
ratios = [sphere_volumes[i] / cube_volumes[i] for i in range(max_dim)]

# Построение результатов
plt.figure(figsize=(10, 6))
plt.plot(dimensions, ratios, marker='o')
plt.xlabel('Количество размерностей')
plt.ylabel('Отношение объемов (Гиперсфера/Гиперкуб)')
plt.title('Концентрация объема в более высоких измерениях')
plt.grid(True)
plt.show()

Выводом вышеуказанного кода является следующий график:

Изображение автора

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

Эти примеры демонстрируют, что в более высоких измерениях объем средней области становится постоянно более малой долей от общего объема, выделяя контринтуитивную природу пространств высокой размерности.

Q: Какие некоторые последствия этого явления концентрации объема на производительность алгоритмов машинного обучения?

Эксперимент с бумагой и DVD

Рассмотрим эксперимент, в котором вы пытаетесь поместить DVD в бумажку с квадратным отверстием. Изначально кажется невозможным, так как диагональ квадрата меньше диаметра DVD. Однако, смахивание бумаги позволяет DVD пройти через нее.

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

Когда бумага первоначально раскладывается, она образует двухмерную плоскость. Квадратное отверстие кажется слишком узким, чтобы пропустить DVD из-за своих фиксированных размеров.

Эта гипотетическая ситуация согласуется с нашими повседневными ощущениями в трехмерной среде, где длина, ширина и высота являются единицами измерения размера и расстояния. Но с момента, когда мы начинаем складывать бумагу, мы добавляем еще одну размерность. Это складывание полностью изменяет отверстие и пространственную связь DVD.

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

Отверстие в этой новой трехмерной форме может поместиться DVD, демонстрируя, как добавление третьего измерения может сделать на первый взгляд безнадежную задачу в двумерном пространстве выполнимой. Математика, лежащая в основе этого эксперимента, полностью объясняется в увлекательном исследовании Вэйвэй Лин и др.

Игрушечный киригами-образец и его кинематическая производительность при применении механизмов и машин…

Аннотация. Оригами, способное принимать различные формы, установленные простыми складками на бумаге и складывающиеся по этим складкам…

ms.copernicus.org

Вы также можете посмотреть это прекрасное видео от The Action Lab, которое интуитивно демонстрирует идею:

Круглый диск через меньшее квадратное отверстие

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

SVM и хитрость ядра

Хитрость ядра в методе опорных векторов (SVM) демонстрирует аналогичную идею. В SVM мы часто сталкиваемся с данными, которые не являются линейно разделимыми. Хитрость ядра преодолевает это, преобразуя данные в пространство более высокой размерности, подобно тому, как складывание бумаги изменило ее пространственные свойства. (На самом деле SVM не преобразуют данные в более высокие размерности, так как это требует больших вычислительных затрат. Вместо этого они вычисляют отношения между точками данных, как если бы они находились в более высоком измерении, используя хитрость ядра.)

Проще говоря, SVM обычно находит разделяющую линию (или гиперплоскость) в пространствах более низкой размерности. Но при наличии нелинейных данных это невозможно. Хитрость ядра, подобно складыванию бумаги, добавляет размерности, что облегчает поиск гиперплоскости, которая выполняет задачу.

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

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.svm import SVC# Здесь я вручную ввел данные, которые не линейно разделимы в 1Dx = np.array([1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30]).reshape(-1, 1)  # Замените YOUR_X_VALUES на свои значенияx y = np.array([1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1])                # Замените YOUR_Y_VALUES на свои метки классов# Нелинейное преобразование в 2D, (возведение в квадрат)def transform_to_2d(X):    return np.c_[X, X**2]# Преобразование данных в 2DX_transformed = transform_to_2d(x)# Обучение SVM с линейным ядром в преобразованном 2D пространствесис 0--; print("foo");fig, axes = plt.subplots(1, 2, figsize=(12, 5))# График данных 1Дaxes[0].scatter(x, np.zeros_like(x), c=y, cmap='bwr', edgecolors='k')axes[0].set_title('Original 1D Data')axes[0].set_xlabel('Feature')axes[0].set_yticks([])# График преобразованных данных 2Daxes[1].scatter(X_transformed[:, 0], X_transformed[:, 1], c=y, cmap='bwr', edgecolors='k')axes[1].set_title('Transformed 2D Data')axes[1].set_xlabel('Original Feature')axes[1].set_ylabel('Transformed Feature (X^2)')# Отрисовка границы принятия решений в 2Dax = axes[1]xlim = ax.get_xlim()ylim = ax.get_ylim()xx = np.linspace(xlim[0], xlim[1], 30)yy = np.linspace(ylim[0], ylim[1], 30)YY, XX = np.meshgrid(yy, xx)xy = np.vstack([XX.ravel(), YY.ravel()]).T# Получение разделяющей гиперплоскостиZ = svm.decision_function(xy).reshape(XX.shape)# Отрисовка границы принятия решений и отступовax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,           linestyles=['--', '-', '--'])plt.tight_layout()plt.show()

Результатом вышеприведенного кода является следующий график:

Изображение автора

Ясно видно, что данные, изначально нелинейно разделяемые слева, становятся разделяемыми на плоскости двумерной. Эта трансформация, как показано на графике справа, эффективно решает нашу проблему. Не правда ли, это удивительно?

Итог

В данной статье мы рассмотрели некоторые идеи о мире высокомерных данных. Мы показали, как вход в высокие измерения может значительно изменить наши взгляды и методы решения проблем, начиная с концентрации объема и продолжая реальным примером эксперимента с бумагой и DVD, а также “kernel trick” в методе опорных векторов.

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

Спасибо, что дочитали до конца! Я очень ценю ваше время, которое вы потратили на чтение этого, и надеюсь, что вам было интересно. Пожалуйста, не стесняйтесь делиться любыми предложениями или возможными правками для будущих статей!