Comments 12
Для решения проблем воспроизводимости t-SNE и UMAP нужно использовать параметрические версии этих алгоритмов. Вот пример (https://pubs.rsc.org/en/content/articlelanding/2019/ra/c8ra10182e) как это можно использовать, например, в химии. Основная идея, вы вместо прямой оптимизации координат точек в пространстве низкой размерности, как это происходит в t-SNE, обучайте нейросеть (обычный стек dense слоев) лоссом от t-SNE. Эта нейросеть на вход принимает ваше пространство высокой размерности, а выход размерности 2 или 3, то есть координаты в пространстве низкой размерности.
Теперь, если к вам пришли новые данные, вы скармливаете их нейросети, и получаете детерминированные проекции для новых данных. Так, можно например строить карты химического пространства.
Возможно, стоило бы отметить какая максимальная размерность может быть получена на выходе. PCA и UMAP ее не ограничивают, а t-SNE (по крайней мере в scikit) ограничен лишь 3-мя... Для наборов данных с высокой истинной размерностью, это может быть критичным. Например, если использовать алгоритмы снижения размерности для последующего применения ML, а не просто визуализации.
Действительно, по умолчанию в sklearn включается быстрая модификация t-SNE ("barnes_hut"), которая работает только для маленького количества измерений. Однако, можно заменить её на стандартную и получить сколько угодно измерений на выходе, если сменить параметр method на "exact", в духе
big_TSNE = TSNE(
n_components=10,
method="exact"
)
Удивительно, это же те самые Barnes и Hut, которые занимались моделированием поведения галактик. Как, оказывается, недалеко от астрономии до ML.
Было интересно как вообще можно интерпретировать результаты работы снижения размерности в визуализации данных? Например, с цифрами все относительно понятно, цифр 10, получили 10 кластеров. Допустим у меня два набора данных изображений (микроскопии). Что можно понять из визуализации этих двух наборов данных? Как их можно сравнить по полученным в итоге картинкам?
Спасибо за отличную статью, было очень интересно.
Вопрос про число кластеров (чем-то похож на вопрос выше). Число кластеров ведь задаётся каким-то параметром, а не определяется алгоритмом напрямую?
В оригинальной статье про t-SNE было указано практическое ограничение около 10 тысяч точек.
Как обстоят дела с этим делом сейчас? Какой порядок современные алгоритмы и железо могут переварить? Десятки миллионов точек потянет? Имею в виду мощности, доступные энтузиасту, то есть примерно одна RTX 4090.
Главные отличия PCA от UMAP и t-SNE