exponenta event banner

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около-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' - расстояние Махаланобиса, вычисленное с использованием положительной определенной ковариационной матрицы 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около-NumDimensions вещественная матрица, где n - количество строк X. tsne алгоритм оптимизации использует эти точки в качестве начальных значений.

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

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

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

Пример: 1000

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

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

Пример: 20

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

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

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

  • 'OutputFcn' - Дескриптор функции или массив ячеек дескрипторов функции, задающих одну или несколько функций для вызова после каждой NumPrint итерации оптимизации. Дополнительные сведения о синтаксисе см. в разделе Функция вывода t-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около-NumDimensions матрица. Каждая строка представляет одну встроенную точку. n - количество строк данных X которые не содержат NaN записей. См. раздел Результаты графика с помощью входных данных NaN.

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

Подробнее

свернуть все

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

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

function D2 = distfun(ZI,ZJ)

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

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

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

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

Совет

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

Алгоритмы

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

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

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

Представлен в R2017a