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