Введение

Ниже представлены реализации t-SNE на различных языках, доступные для скачивания. некоторые из этих реализаций были разработаны мной и некоторыми другими участниками. Для качественного метода t-SNE доступны реализации в Matlab, C++, CUDA, Python, Torch, R, Julia и JavaScript. дополнительно мы предлагаем реализацию параметрического t-SNE в Matlab (описанную здесь). Наконец, мы предлагаем Barnes-Hut реализацию t-SNE (описанную здесь), которая является самой быстрой реализацией t-SNE на сегодняшний день, и которая намного лучше масштабируется до больших наборов данных.

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

ПРИМЕЧАНИЕ: t-SNE теперь встроена в Matlab и в SPSS!

Реализация Matlab (руководство пользователя) Все платформы

Внедрение CUDA (авторы: Дэвид, Рошан и Форрест; см. документ) Все платформы

Реализация на питоне Все платформы

Осуществление (Даниэль Сальвадор) Все платформы

Реализация факела Все платформы

Реализация Джулии (автор Лейф Йонссон) Все платформы

Java-реализация (автор Лейф Йонссон) Все платформы

R реализация (Джастин) Все платформы

Реализация JavaScript (Андрей; онлайн-демонстрация) Все платформы

Параметрическое t-SNE (устарело; см. здесь) Все платформы

Barnes-Hut t-SNE (C++, Matlab, Python, Torch, и R обертки; см. здесь) Все платформы / Github

Файл MNIST Dataset Matlab

Примеры

Некоторые результаты наших экспериментов с t-SNE доступны для скачивания ниже. В пределах графиков набора данных Netflix и, следовательно, набора слов, размерность кодируется с помощью цветовой кодировки (похожие слова/видео приблизительны и имеют эквивалентный цвет). Большинство “ошибок” в встраиваемых данных (например, в 20 новостных группах) происходит буквально благодаря “ошибкам” в свойствах, к которым была применена t-SNE. Во многих из этих примеров вложения имеют ошибку 1-NN, которая похожа на ошибку первых высокоразмерных функций.

Набор данных MNIST (в 2D) JPG

Набор данных MNIST (в 3D) MOV

Набор данных по оливковым граням (в 2D) JPG

Набор данных COIL-20 (в 2D) JPG

Набор данных Netflix (в 3D) по УКР-функциям России JPG

Набор данных (в 3D) о семантических возможностях Андрея в JPG.

20 Набор данных новостных групп (в 2D) на диске Саймона с функциями JPG

Набор данных Reuters (в 2D) ориентир t-SNE с использованием семантического хэширования JPG

Набор данных NIPS (в формате 2D) по данным о соавторстве (1988-2003 гг.) JPG

NORB набор данных (в 2D) от Vinod JPG

Слова (в формате 2D) Джозефа об особенностях, изученных Ронаном и Джейсоном Папуа-Новой Гвинеи.

CalTech-101 на SIFT сумка слов функции JPG

S&P 500 от Стива об информации о ежедневной доходности акций компании PNG

Интерактивная карта научных журналов по данным Нис-Яна и Лудо с использованием VOSviewer Java 1.6.

Связь между советами Всемирного экономического форума Связь

ImageNet от Андрея на конволюционной сети Caffe функции Link

Визуализации нескольких карт Ссылка

Аллен Мозг Ссылка на данные

Вы можете щелкнуть правой кнопкой мыши на картинках и выбрать “Показать картинку в новой вкладке”, чтобы установить большую версию каждой из картинок.

Вам даже могут быть любопытны эти посты в блоге, описывающие приложения t-SNE Андрея Карпати, Пола Минейро, Александра Фаббиша, Джастина Дональдсона, Генри Тана и Сириллы Россант.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Я не могу выяснить формат файла для бинарных реализаций t-SNE?

Формат описан в руководстве пользователя. более того, вы можете захотеть взглянуть на код обертки Matlab или Python: это код, который записывает файл данных и читает файл результатов, который будет достаточно легко портирован на другие языки. Обратите внимание, что формат файла двоичный (так что не пытайтесь писать или читать текст!), который не содержит пробелов, разделителей, новых строк или чего-либо еще.

Как я могу оценить стандарт визуализаций, построенных t-SNE?

Желательно просто проверить их! Обратите внимание, что t-SNE не сохраняет расстояния, но вероятности, поэтому измерять некоторую погрешность между евклидовыми расстояниями в highD и lowD бесполезно. Однако, если вы используете эквивалентные данные и недоумение, вы сравните расхождения Kullback-Leibler, о которых сообщает t-SNE. Это совершенно нормально, если вы пробежите t-SNE десять раз, и выберете ответ с расходимостью KL в самом низу.

Как мне установить недоумение в t-SNE?

Производительность t-SNE довольно устойчива при различных настройках недоумения. наиболее подходящее значение зависит от плотности ваших данных. Слабо говоря, можно сказать, что больший / более плотный набор данных требует большей растерянности. Типичные значения для диапазона недоумения от 5 до 50.

Что вообще такое недоумение?

Недоумение может быть мерой для информации, которая определяется как 2 к объекту энтропии Шеннона. Туманность хорошего кубика с k гранями адекватна k. В t-SNE недоумение также можно рассматривать как ручку, которая задает количество эффективных ближайших соседей. это сравнимо с количеством ближайших соседей k, которое используется во многих многогранных учениках.

Каждый раз, когда я запускаю t-SNE, я покупаю (слегка) разный результат?

В отличие, например, от PCA, t-SNE имеет невыпуклую объективную функцию. целевая функция минимизируется с помощью градиентной оптимизации спуска, инициируемой случайным образом. В результате, возможно, что разные прогоны предлагают разные решения. Обратите внимание на то, что можно запускать t-SNE несколько раз (с эквивалентными данными и параметрами) и выбрать визуализацию с базовым значением целевой функции в качестве конечной визуализации.

Когда я запускаю t-SNE, я покупаю странный “шар” с равномерно распределенными точками?

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

Когда я запускаю t-SNE, она сообщает о действительно низкой ошибке, но результаты выглядят дерьмово?

Предположительно, ваши данные содержат очень большие числа, что приводит к тому, что бинарный поиск нужной недоуменности не работает. В начале оптимизации t-SNE сообщает минимальное, среднее и максимальное значение для сигмы 1. часто это символ того, что что-то пошло не так! Просто разделите данные или расстояния на огромное количество и проверьте еще раз.

Я перепробовал все, что Вы сказали, но t-SNE, кажется, все еще не очень хорошо работает?

Может быть, в ваших данных есть что-то странное. В качестве проверки здравого смысла, попробуйте запустить PCA на ваших данных, чтобы уменьшить их до 2-х измерений. Если это также даст плохие результаты, то, возможно, в ваших данных не очень хорошая структура в первую очередь. Если PCA работает хорошо, а t-SNE нет, я уверен, что Вы, вероятно, сделали что-то не так. Просто проверьте свой код еще раз, пока не найдете ошибку! Если ничего не работает, с радостью бросьте мне строчку.

Могу ли я использовать парную евклидовую матрицу расстояний в качестве входа в t-SNE?

Да, можно! Загрузите реализацию Matlab и используйте парную евклидовую матрицу расстояний в качестве входа в функцию tsne_d.m.

Могу ли я использовать парную матрицу подобия в качестве входа в t-SNE?

Да, можно! В качестве примера, мы успешно применили t-SNE на наборе данных по ассоциациям слов. Загрузите реализацию Matlab, подтвердите, что диагональ матрицы парного сходства содержит только нули, симметризуйте матрицу парного сходства, и нормализуйте ее, чтобы суммировать хотя бы одну . теперь вы будете использовать результат в качестве входа в функцию tsne_p.m.

Могу ли я использовать t-SNE для встраивания данных более чем в два измерения?

Ну, да, но есть одна загвоздка. Ключевая особенность t-SNE в том, что она решает проблему перетаскивания. Степень, до которой возникает эта проблема, зависит от соотношения между размерностью собственных данных и, следовательно, размерностью встраиваемых данных. Таким образом, если вы встраиваете, скажем, в тридцать измерений, то проблема переполненности будет менее серьезной, чем если бы вы встраивали ее в два измерения. В результате, часто бывает лучше, если вы увеличиваете степень свободы t-распределения при встраивании в тридцатимерность (или если вы пытаетесь встраивать по существу очень низкоразмерные данные, например, Swiss roll). Более подробная информация об этом описана в статье AI-STATS.

Почему t-SNE не работает также как LLE или Isomap на данных Swiss roll?

При внедрении данных Swiss roll проблема скученности не возникает. Поэтому для успешного встраивания данных швейцарского ролла необходимо использовать более легкую t-дистрибуцию (см. выше). Но, откровенно говоря… кого волнуют швейцарские роллы, если Вы можете красиво встраивать сложные данные из реального мира?

Как только у меня будет карта t-SNE, как я смогу вставить в нее входящие тестовые точки?

t-SNE изучает непараметрическую карту, что говорит о том, что она не изучает определенную функцию, которая отображает данные из входного пространства на карту. Таким образом, невозможно встроить тестовые точки в существующую карту (хотя вы повторно запустите t-SNE в полном наборе данных). Возможным подходом для влияния на это является тренировка многомерного регрессора для предсказания местоположения карты из входного файла . В качестве альтернативы, вы также заставите такой регрессор свести к минимуму потери t-SNE напрямую, что я и сделал во время этой статьи.