tsne

стохастическое вложение соседей с t-распределением

Описание

пример

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.1255, and 3-D embedding has loss 0.0980872.

Как ожидалось 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- m матрица, где каждой строкой является один m- размерная точка.

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

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

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

Задайте дополнительные разделенные запятой пары Name,Value аргументы. 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 = std(X,'omitnan').

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

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

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

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

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

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

  • '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- 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- 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