tsne

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

Описание

пример

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

пример

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

пример

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

Примеры

свернуть все

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

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

Figure contains an axes. The axes contains 3 objects of type line. These objects represent setosa, versicolor, virginica.

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

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

Figure contains 4 axes. Axes 1 with title Mahalanobis contains 3 objects of type line. These objects represent setosa, versicolor, virginica. Axes 2 with title Cosine contains 3 objects of type line. These objects represent setosa, versicolor, virginica. Axes 3 with title Chebychev contains 3 objects of type line. These objects represent setosa, versicolor, virginica. Axes 4 with title Euclidean contains 3 objects of type line. These objects represent setosa, versicolor, virginica.

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

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))

Figure contains an axes. The axes contains 3 objects of type line. These objects represent setosa, versicolor, virginica.

Найдите как 2-D, так и 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.124191, and 3-D embedding has loss 0.0990884.

Как и ожидалось, внедрение 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 contains an axes. The axes with title 2-D Embedding contains 3 objects of type line. These objects represent setosa, versicolor, virginica.

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)

Figure contains an axes. The axes with title 3-D Embedding contains an object of type scatter.

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

свернуть все

Точки данных, заданные как n-by- 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'. The 'exact' алгоритм оптимизирует расхождение Kullback-Leibler распределений между исходным пространством и встроенным пространством. The 'barneshut' алгоритм выполняет приблизительную оптимизацию, которая быстрее и использует меньше памяти, когда количество строк данных велико.

Примечание

Для 'barneshut' алгоритм, tsne использование knnsearch найти ближайших соседей.

Пример: 'exact'

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

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

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

  • 'cityblock' - Расстояние между городскими блоками.

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

  • 'minkowski' - расстояние Минковского с показателем 2. Это то же самое, что и евклидово расстояние.

  • 'mahalanobis' - расстояние Махаланобиса, вычисленное с помощью положительно определенной ковариационной матрицы cov(X,'omitrows').

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

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

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

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

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

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

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

Пример: 'mahalanobis'

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

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

Если значение расхождения Кулбэка-Лейблера увеличивается на ранней стадии оптимизации, попробуйте уменьшить преувеличение. См. раздел «Настройки 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. В алгоритме Барнса-Хата, tsne использует min(3*Perplexity,N-1) как количество ближайших соседей. См. раздел «Настройки tsne».

Пример: 10

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

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

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

Пример: true

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

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

свернуть все

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

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

Скорость обучения для процесса оптимизации, заданная как положительная скалярная величина. Обычно задайте значения из 100 через 1000.

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

Пример: 1000

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

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

Пример: 20

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

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

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

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

  • 'TolFun' - Критерий остановки для оптимизации. Оптимизация выходит, когда норма градиента расхождения Кулбэка-Лейблера меньше 'TolFun'. По умолчанию: 1e-10.

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

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

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

Пример: 0.1

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

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

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

Пример: 2

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

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

свернуть все

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

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

Подробнее о

свернуть все

Настраиваемая функция расстояния

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

function D2 = distfun(ZI,ZJ)

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

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

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

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

Совет

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

Алгоритмы

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

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

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

Введенный в R2017a