Об этом проекте

UMAP (Uniform Manifold Approximation and Projection) — метод снижения размерности для визуализации и общего нелинейного встраивания, реализованный в Python-пакете umap-learn. Он спроектирован как transformer, совместимый со scikit-learn, поэтому может использоваться как прямая замена t-SNE в существующих пайплайнах. Метод основан на трёх допущениях: данные равномерно распределены на римановом многообразии, риманова метрика локально постоянна, а многообразие локально связно. Эти допущения используются для построения нечёткого топологического представления, а встраивание находится путём поиска низкоразмерной проекции с наиболее близкой эквивалентной структурой. Математика описана в статье на ArXiv 1802.03426, а более широкое введение дано в статье Nature Reviews Methods Primers. Установка доступна через conda-forge (conda install -c conda-forge umap-learn) или PyPI (pip install umap-learn). Пакет зависит от scikit-learn, numpy, scipy, numba, tqdm и pynndescent. Дополнительные возможности включают построение графиков (matplotlib, datashader, holoviews), Parametric UMAP (TensorFlow) и оптимизации CPU tbb на x86. Базовое использование повторяет scikit-learn: import umap from sklearn.datasets import load_digits digits = load_digits() embedding = umap.UMAP().fit_transform(digits.data) Ключевые параметры включают n_neighbors, который управляет тем, насколько сохраняется локальная или глобальная структура (обычно 5–50, разумное значение по умолчанию 10–15), min_dist, который управляет плотностью расположения точек (0.001–0.5, разумное значение по умолчанию 0.1), и metric, который выбирает функцию расстояния во входном пространстве. Поддерживается ввод разреженных матриц. Задокументированные преимущества включают скорость на больших и высокоразмерных наборах данных, масштабирование по размерности встраивания для общей предобработки, сохранение части глобальной структуры, поддержку неметрических расстояний, таких как косинусное и корреляционное, возможность добавлять новые точки в существующее встраивание через transform, а также supervised или semi-supervised снижение размерности путём передачи меток как y. Экспериментальные возможности включают обратное преобразование, неевклидовы встраивания, такие как гиперболические, встраивания с неопределённостью и предварительную поддержку dataframe. Пакет также предоставляет densMAP, включаемый параметром densmap=True, который расширяет UMAP для сохранения информации о локальной плотности. densMAP добавляет такие параметры, как dens_frac, dens_lambda, dens_var_shift и output_dens, и рекомендует большие значения n_neighbors (например, 30). Parametric UMAP обучает нейронную сеть изучать преобразование на основе UMAP, обеспечивая более быстрый вывод на новых данных, более устойчивые обратные преобразования, варианты автоэнкодеров и semi-supervised классификацию. Подпакет umap.plot предлагает базовое и интерактивное построение графиков с всплывающими подсказками и диагностическими опциями. Для ускорения на GPU в README указан torchdr — реализация на основе PyTorch, которая ускоряет вычисление kNN, построение аффинности и оптимизацию встраивания на GPU. Документация размещена на Read the Docs и включает FAQ. Проект распространяется под 3-clause BSD лицензией и приветствует вклад. README просит пользователей цитировать программную статью JOSS, статью на ArXiv и, где применимо, ссылки на densMAP, Parametric UMAP и Nature Primer.