tsne

t-Distributed Стохастическое Соседнее Встраивание

Синтаксис

Y = tsne(X)
Y = tsne(X,Name,Value)
[Y,loss] = tsne(___)

Описание

пример

Y = tsne(X) возвращает матрицу двумерных вложений высоко-размерных строк X.

пример

Y = tsne(X,Name,Value) изменяет вложения с помощью опций, заданных одним или несколькими аргументами пары "имя-значение".

пример

[Y,loss] = tsne(___), для любых входных параметров, также возвращает расхождение Kullback-Leibler между совместными распределениями, которые моделируют данные X и встраивание Y.

Примеры

свернуть все

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

load fisheriris
rng default % for reproducibility
Y = tsne(meas);
gscatter(Y(:,1),Y(:,2),species)

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

load fisheriris

rng('default') % for reproducibility
Y = tsne(meas,'Algorithm','exact','Distance','mahalanobis');
subplot(2,2,1)
gscatter(Y(:,1),Y(:,2),species)
title('Mahalanobis')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','cosine');
subplot(2,2,2)
gscatter(Y(:,1),Y(:,2),species)
title('Cosine')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','chebychev');
subplot(2,2,3)
gscatter(Y(:,1),Y(:,2),species)
title('Chebychev')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','euclidean');
subplot(2,2,4)
gscatter(Y(:,1),Y(:,2),species)
title('Euclidean')

В этом случае косинус, Чебычев и Евклидовы метрики расстояния дают довольно хорошее разделение кластеров. Но метрика расстояния Mahalanobis не дает хорошее разделение.

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

Например, измените несколько случайных записей в ирисовых данных Фишера к NaN.

load fisheriris
rng default % for reproducibility
meas(rand(size(meas)) < 0.05) = NaN;

Встройте четырехмерные данные в две размерности с помощью tsne.

Y = tsne(meas,'Algorithm','exact');
Warning: Rows with NaN missing values in X or 'InitialY' values are removed.

Определите, сколько строк было устранено из встраивания.

length(species)-length(Y)
ans = 22

Подготовьтесь строить результат путем определения местоположения строк meas, которые не имеют никаких значений NaN.

goodrows = not(any(isnan(meas),2));

Постройте результаты с помощью только строки species, которые соответствуют строкам meas без значений NaN.

gscatter(Y(:,1),Y(:,2),species(goodrows))

Найдите и 2D и 3-D вложения ирисовых данных Фишера и сравните потерю для каждого встраивания. Вероятно, что потеря ниже для 3-D встраивания, потому что это встраивание имеет больше свободы совпадать с исходными данными.

load fisheriris
rng default % for reproducibility
[Y,loss] = tsne(meas,'Algorithm','exact');
rng default % for fair comparison
[Y2,loss2] = tsne(meas,'Algorithm','exact','NumDimensions',3);
fprintf('2-D embedding has loss %g, and 3-D embedding has loss %g.\n',loss,loss2)
2-D embedding has loss 0.122669, and 3-D embedding has loss 0.0967385.

Как ожидалось 3-D встраивание имеет более низкую потерю.

Просмотрите вложения. Используйте цвета RGB [1 0 0], [0 1 0] и [0 0 1].

Для 3-D графика преобразуйте разновидности в числовые значения с помощью команды categorical, затем преобразуйте числовые значения в цвета RGB с помощью функции sparse можно следующим образом. Если v является вектором положительных целых чисел 1, 2, или 3, соответствуя данным о разновидностях, то команда

sparse(1:numel(v),v,ones(size(v)))

разреженная матрица, строки которой являются цветами RGB разновидностей.

gscatter(Y(:,1),Y(:,2),species,eye(3))
title('2-D Embedding')

figure
v = double(categorical(species));
c = full(sparse(1:numel(v),v,ones(size(v)),numel(v),3));
scatter3(Y2(:,1),Y2(:,2),Y2(:,3),15,c,'filled')
title('3-D Embedding')
view(-50,8)

Входные параметры

свернуть все

Точки данных, заданные как n-by-m матрица, где каждой строкой является один m - размерная точка.

tsne удаляет строки X, которые содержат любые значения NaN прежде, чем создать встраивание. Смотрите Результаты Графика с Входными данными NaN.

Типы данных: single | double

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: Y = tsne(X,'Algorithm','Exact','NumPCAComponents',50)

Управление алгоритмом

свернуть все

Алгоритм tsne, заданный как 'barneshut' или 'exact'. Алгоритм 'exact' оптимизирует расхождение Kullback-Leibler дистрибутивов между исходным пробелом и встроенным пробелом. Алгоритм 'barneshut' выполняет аппроксимированную оптимизацию, которая быстрее и использует меньше памяти, когда количество строк данных является большим.

Примечание

Для алгоритма 'barneshut' tsne использует knnsearch, чтобы найти самых близких соседей.

Пример: 'exact'

Метрика расстояния, заданная одним из следующих. Для определений метрик расстояния смотрите pdist.

  • 'euclidean' — Евклидово расстояние.

  • 'seuclidean' — Стандартизированное Евклидово расстояние. Каждое координатное различие между строками в X и матрице запроса масштабируется путем деления на соответствующий элемент стандартного отклонения, вычисленного из   S = nanstd(X).

  • 'cityblock' — Расстояние городского квартала.

  • 'chebychev' — Расстояние Чебычева, которое является максимальным координатным различием.

  • 'minkowski' — Расстояние Минковскего с экспонентой 2. Это совпадает с Евклидовым расстоянием.

  • 'mahalanobis' — Расстояние Mahalanobis, вычисленное использование положительной определенной ковариационной матрицы nancov(X).

  • 'cosine' — 1 минус косинус включенного угла между наблюдениями (обработанный как векторы).

  • Корреляция Один минус демонстрационная линейная корреляция между наблюдениями (обработанный как последовательности значений).

  • 'spearman' — Один минус порядковая корреляция демонстрационного Копьеносца между наблюдениями (обработанный как последовательности значений).

  • 'hamming' — Расстояние Хемминга, которое является процентом координат, которые отличаются.

  • 'jaccard' — Один минус коэффициент Jaccard, который является процентом ненулевых координат, которые отличаются.

  • пользовательская функция расстояния — функция расстояния, заданная с помощью @ (например, @distfun). Для получения дополнительной информации см. Определения.

Во всех случаях использование tsne придало попарным расстояниям квадратную форму, чтобы вычислить Гауссово ядро в совместном распределении X.

Пример: 'mahalanobis'

Размер естественных кластеров в данных, заданных как скалярное значение 1 или больше.

Большое преувеличение заставляет tsne изучить большие объединенные вероятности Y и создает относительно больше пространства между кластерами в Y. tsne использует преувеличение в первых 99 итерациях оптимизации.

Если значение увеличений расхождения Kullback-Leibler на ранней стадии оптимизации, попытайтесь уменьшать преувеличение. См. tsne Настройки.

Пример: 10

Типы данных: single | double

Размерность вывода Y, заданного как положительное целое число. Обычно установите NumDimensions на 2 или 3.

Пример 3

Типы данных: single | double

Сокращение размерности PCA, заданное как неотрицательное целое число. Прежде чем tsne встраивает высоко-размерные данные, он сначала уменьшает размерность данных к NumPCAComponents с помощью функции pca. Когда NumPCAComponents является 0, tsne не использует PCA.

Пример: 50

Типы данных: single | double

Эффективное количество локальных соседей каждой точки, заданной как положительная скалярная величина. См. t-SNE Алгоритм.

Большее недоумение заставляет tsne использовать больше точек в качестве самых близких соседей. Используйте большее значение Perplexity для большого набора данных. Типичные значения Perplexity от 5 до 50. В алгоритме Barnes-хижины tsne использует min(3*Perplexity,N-1) в качестве количества самых близких соседей. См. tsne Настройки.

Пример: 10

Типы данных: single | double

Нормируйте входные данные, заданные как false или true. Когда true, центры tsne и шкалы X путем деления столбцов на их стандартные отклонения.

Когда функции в X будут в различных шкалах, установите 'Standardize' на true. Сделайте это, потому что процесс обучения основан на самых близких соседях, таким образом, функции с крупными масштабами могут заменить вклад функций с мелкими масштабами.

Пример: true

Типы данных: логический

Управление оптимизацией

свернуть все

Начальная буква встроила точки, заданные как n-by-NumDimensions действительная матрица, где n является количеством строк X. Алгоритм оптимизации tsne использует эти точки в качестве начальных значений.

Типы данных: single | double

Темп обучения для процесса оптимизации, заданного как положительная скалярная величина. Как правило, установите значения от 100 до 1000.

Когда LearnRate является слишком маленьким, tsne может сходиться к плохому локальному минимуму. Когда LearnRate является слишком большим, оптимизация может первоначально иметь увеличение расхождения Kullback-Leibler, а не уменьшение. См. tsne Настройки.

Пример: 1000

Типы данных: single | double

Итеративная частота отображения, заданная как положительное целое число. Когда парой "имя-значение" Verbose не является 0, tsne возвращает итеративное отображение после каждого NumPrint итерации. Если пара "имя-значение" Options содержит непустую запись 'OutputFcn', то выходные функции выполняются после каждого NumPrint итерации.

Пример: 20

Типы данных: single | double

Опции оптимизации, заданные как структура, содержащая поля 'MaxIter', 'OutputFcn' и 'TolFun'. Создайте 'Options' с помощью statset или struct.

  • 'MaxIter' — Положительное целое число, задающее максимальное количество итераций оптимизации. Значение по умолчанию: 1000.

  • 'OutputFcn' Указатель на функцию или cell-массив указателей на функцию, задающий одну или несколько функций, чтобы вызвать после каждой оптимизации NumPrint итерации. Для получения дополнительной информации синтаксиса см. t-SNE Выходную функцию. Значение по умолчанию: [].

  • 'TolFun' — Остановка критерия оптимизации. Оптимизация выходит, когда норма градиента расхождения Kullback-Leibler является меньше, чем 'TolFun'. Значение по умолчанию: 1e-10.

Пример: options = statset('MaxIter',500)

Типы данных: struct

Параметр компромисса Barnes-хижины, заданный как скаляр от 0 до 1. Более высокие значения дают более быструю, но менее точную оптимизацию. Применяется только, когда Algorithm является 'barneshut'.

Пример: 0.1

Типы данных: single | double

Итеративное отображение, заданное как 0, 1 или 2. Когда Verbose не является 0, tsne распечатывает сводную таблицу расхождения Kullback-Leibler и норму его градиента каждый NumPrint итерации.

Когда Verbose является 2, tsne также распечатывает отклонения Гауссовых ядер. tsne использует эти ядра в своем вычислении объединенной вероятности X. Если вы видите значительные различия в шкалах минимальных и максимальных отклонений, можно иногда получать более подходящие результаты путем перемасштабирования X.

Пример 2

Типы данных: single | double

Выходные аргументы

свернуть все

Встроенные точки, возвращенные как n-by-NumDimensions матрица. Каждая строка представляет тот встроенная точка. n является количеством строк данных X, которые не содержат записей NaN. Смотрите Результаты Графика с Входными данными NaN.

Расхождение Kullback-Leibler между смоделированными дистрибутивами ввода и вывода, возвращенными как неотрицательный скаляр. Для получения дополнительной информации см. t-SNE Алгоритм.

Больше о

свернуть все

Пользовательская функция расстояния

Синтаксис пользовательской функции расстояния следующие.

function D2 = distfun(ZI,ZJ)

tsne передает ZI и ZJ к вашей функции, и ваша функция вычисляет расстояние.

  • ZI является 1 n вектором, содержащим одну строку от X или Y.

  • ZJ является m-by-n матрица, содержащая несколько строк X или Y.

Ваша функция возвращает D2, который является m-by-1 вектор расстояний. j th элемент D2 является расстоянием между наблюдениями ZI и ZJ(j,:).

Совет

Если ваши данные не разреженны, то обычно встроенные функции расстояния быстрее, чем указатель на функцию.

Алгоритмы

tsne создает набор встроенных точек в низком мерном пространстве, относительные общие черты которого подражают тем из исходных высоко-размерных точек. Встроенные точки показывают кластеризацию в исходных данных.

Примерно, алгоритм моделирует исходные точки как прибывающий из Распределения Гаусса и встроенных точек как прибывающий из распределения t Студента. Алгоритм пытается минимизировать расхождение Kullback-Leibler между этими двумя дистрибутивами путем перемещения встроенных точек.

Для получения дополнительной информации см. t-SNE.

Введенный в R2017a