t-Распределенное внедрение стохастического соседа
изменяет вложения с помощью параметров, заданных одним или несколькими аргументами пары имя-значение.Y = tsne(X,Name,Value)
Набор данных радужки Фишера имеет четырёхмерные измерения ирисов, и соответствующую классификацию на виды. Визуализация этих данных путем уменьшения размера с помощью 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')

В этом случае метрики косинуса, Чебычева и евклидова расстояния дают достаточно хорошее разделение кластеров. Но метрика расстояния Махаланобиса не даёт хорошего разделения.
NaN Входные данные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))

Найдите как 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 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)

X - Точки данныхnоколо-m матрицаТочки данных, указанные как 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)'Algorithm' — tsne алгоритм'barneshut' (по умолчанию) | 'exact'tsne алгоритм, указанный как 'barneshut' или 'exact'. 'exact' алгоритм оптимизирует расхождение Kullback-Leibler распределений между исходным пространством и встроенным пространством. 'barneshut' алгоритм выполняет приблизительную оптимизацию, которая является более быстрой и использует меньше памяти, когда число строк данных велико.
Примечание
Для 'barneshut' алгоритм, tsne использование knnsearch найти ближайших соседей.
Пример: 'exact'
'Distance' - Метрика расстояния'euclidean' (по умолчанию) | 'seuclidean' | 'cityblock' | 'chebychev' | 'minkowski' | 'mahalanobis' | 'cosine' | 'correlation' | 'spearman' | 'hamming' | 'jaccard' | дескриптор функцииМетрика расстояния, заданная одним из следующих параметров. Определения метрик расстояния см. в разделе 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'
'Exaggeration' - Размер природных кластеров в данных4 (по умолчанию) | скалярное значение 1 или большеРазмер естественных кластеров в данных, указанный как скалярное значение 1 или больше.
Большое преувеличение делает tsne узнать больше совместных вероятностей Y и создает относительно больше пространства между кластерами в Y. tsne использует преувеличение в первых 99 итерациях оптимизации.
Если значение расхождения Куллбэка-Лейблера увеличивается на ранней стадии оптимизации, попробуйте уменьшить преувеличение. См. раздел Настройки tsne.
Пример: 10
Типы данных: single | double
'NumDimensions' - Размер выходного сигнала Y2 (по умолчанию) | положительное целое числоРазмер выходного сигнала Y, указано как положительное целое число. Как правило, установка NumDimensions кому 2 или 3.
Пример: 3
Типы данных: single | double
'NumPCAComponents' - уменьшение размеров PCA0 (по умолчанию) | неотрицательное целое числоУменьшение размера PCA, указанное как неотрицательное целое число. Прежде tsne встраивает высокоразмерные данные, сначала уменьшает размерность данных до NumPCAComponents с использованием pca функция. Когда NumPCAComponents является 0, tsne не использует PCA.
Пример: 50
Типы данных: single | double
'Perplexity' - Фактическое количество локальных соседей каждой точки30 (по умолчанию) | положительный скалярЭффективное число локальных соседей каждой точки, указанное как положительный скаляр. См. Алгоритм t-SNE.
Большие причины недоумений tsne для использования большего количества точек в качестве ближайших соседей. Использовать большее значение Perplexity для большого набора данных. Типичный Perplexity значения - от 5 кому 50. В алгоритме Барнса-Хата tsne использование min(3*Perplexity,N-1) как число ближайших соседей. См. раздел Настройки tsne.
Пример: 10
Типы данных: single | double
'Standardize' - Нормализация входных данныхfalse (по умолчанию) | trueНормализовать входные данные, указанные как false или true. Когда true, tsne центры и масштабы X делением столбцов на их стандартные отклонения.
Когда элементы в X находятся в разных масштабах, набор 'Standardize' кому true. Это происходит потому, что процесс обучения основан на ближайших соседях, поэтому элементы с большими масштабами могут переопределять вклад элементов с маленькими масштабами.
Пример: true
Типы данных: logical
'InitialY' - Исходные закладные точки1e-4*randn(N,NumDimensions) (по умолчанию) | nоколо-NumDimensions реальная матрицаИсходные внедренные точки, указанные как nоколо-NumDimensions вещественная матрица, где n - количество строк X. tsne алгоритм оптимизации использует эти точки в качестве начальных значений.
Типы данных: single | double
'LearnRate' - Коэффициент обучения для процесса оптимизации500 (по умолчанию) | положительный скалярСкорость обучения для процесса оптимизации, заданная как положительный скаляр. Как правило, задайте значения из 100 через 1000.
Когда LearnRate слишком мал, tsne может сходиться к нижнему местному минимуму. Когда LearnRate слишком велик, оптимизация может изначально иметь увеличение дивергенции Куллбэка-Лейблера, а не уменьшение. См. раздел Настройки tsne.
Пример: 1000
Типы данных: single | double
'NumPrint' - Итеративная частота отображения20 (по умолчанию) | положительное целое числоИтеративная частота отображения, заданная как положительное целое число. Когда Verbose пара имя-значение не 0, tsne возвращает итеративное отображение после каждого NumPrint итерации. Если Options пара имя-значение содержит непустую 'OutputFcn' ввод, затем выполнение функций вывода после каждого NumPrint итерации.
Пример: 20
Типы данных: single | double
'Options' - Варианты оптимизации'MaxIter', 'OutputFcn', и 'TolFun'Опции оптимизации, указанные как структура, содержащая поля 'MaxIter', 'OutputFcn', и 'TolFun'. Создать 'Options' использование statset или struct.
'MaxIter' - положительное целое число, указывающее максимальное число итераций оптимизации. По умолчанию: 1000.
'OutputFcn' - Дескриптор функции или массив ячеек дескрипторов функции, задающих одну или несколько функций для вызова после каждой NumPrint итерации оптимизации. Дополнительные сведения о синтаксисе см. в разделе Функция вывода t-SNE. По умолчанию: [].
'TolFun' - Критерий остановки для оптимизации. Оптимизация выходит, когда норма градиента дивергенции Куллбэка-Лейблера меньше 'TolFun'. По умолчанию: 1e-10.
Пример: options = statset('MaxIter',500)
Типы данных: struct
'Theta' - Параметр компромисса Барнс-Хут0.5 (по умолчанию) | скаляр от 0 до 1Параметр компромисса Барнс-Хут, заданный как скаляр от 0 до 1. Более высокие значения обеспечивают более быструю, но менее точную оптимизацию. Применяется только тогда, когда Algorithm является 'barneshut'.
Пример: 0.1
Типы данных: single | double
'Verbose' - Итеративный дисплей0 (по умолчанию) | 1 | 2Итеративное отображение, указанное как 0, 1, или 2. Когда Verbose не является 0, tsne печатает сводную таблицу расхождения Куллбэка-Лейблера и норму его градиента каждый NumPrint итерации.
Когда Verbose является 2, tsne также печатает дисперсии гауссовых ядер. tsne использует эти ядра при вычислении совместной вероятности X. Если вы видите большую разницу в шкалах минимального и максимального отклонений, иногда вы можете получить более подходящие результаты путем масштабирования X.
Пример: 2
Типы данных: single | double
Y - Встроенные точкиnоколо-NumDimensions матрицаВстроенные точки, возвращенные как nоколо-NumDimensions матрица. Каждая строка представляет одну встроенную точку. n - количество строк данных X которые не содержат NaN записей. См. раздел Результаты графика с помощью входных данных NaN.
loss - Расхождение Куллбэк-ЛейблерДивергенция Куллбэка - Лейблера между смоделированными входным и выходным распределениями, возвращаемая как неотрицательный скаляр. Для получения дополнительной информации см. Алгоритм 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.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.