t-Distributed Стохастическое Соседнее Встраивание
Y = tsne(X)
Y = tsne(X,Name,Value)
[Y,loss]
= tsne(___)
изменяет вложения с помощью опций, заданных одним или несколькими аргументами пары "имя-значение".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.122669, and 3-D embedding has loss 0.0967385.
Как ожидалось 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
-by-m
матрицаТочки данных, заданные как n
-by-m
матрица, где каждой строкой является один m
- размерная точка.
tsne
удаляет строки X
, которые содержат любые значения NaN
прежде, чем создать встраивание. Смотрите Результаты Графика с Входными данными NaN.
Типы данных: single | double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (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 = nanstd(X)
'cityblock'
— Расстояние городского квартала.
'chebychev'
— Расстояние Чебычева, которое является максимальным координатным различием.
'minkowski'
— Расстояние Минковскего с экспонентой 2. Это совпадает с Евклидовым расстоянием.
'mahalanobis'
— Расстояние Mahalanobis, вычисленное использование положительной определенной ковариационной матрицы nancov(X)
.
'cosine'
— 1 минус косинус включенного угла между наблюдениями (обработанный как векторы).
Корреляция
Один минус демонстрационная линейная корреляция между наблюдениями (обработанный как последовательности значений).
'spearman'
— Один минус порядковая корреляция демонстрационного Копьеносца между наблюдениями (обработанный как последовательности значений).
'hamming'
— Расстояние Хемминга, которое является процентом координат, которые отличаются.
'jaccard'
— Один минус коэффициент Jaccard, который является процентом ненулевых координат, которые отличаются.
пользовательская функция расстояния — функция расстояния, заданная с помощью @
(например, @distfun
). Для получения дополнительной информации см. Определения.
Во всех случаях использование tsne
придало попарным расстояниям квадратную форму, чтобы вычислить Гауссово ядро в совместном распределении X
.
Пример: 'mahalanobis'
'Exaggeration'
— Размер естественных кластеров в данных4
(значение по умолчанию) | скалярное значение 1
или большеРазмер естественных кластеров в данных, заданных как скалярное значение 1
или больше.
Большое преувеличение заставляет tsne
изучить большие объединенные вероятности Y
и создает относительно больше пространства между кластерами в Y
. tsne
использует преувеличение в первых 99 итерациях оптимизации.
Если значение увеличений расхождения Kullback-Leibler на ранней стадии оптимизации, попытайтесь уменьшать преувеличение. См. tsne Настройки.
Пример: 10
Типы данных: single | double
'NumDimensions'
— Размерность вывода Y
2
(значение по умолчанию) | положительное целое числоРазмерность вывода 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
. В алгоритме 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
-by-NumDimensions
действительная матрицаНачальная буква встроила точки, заданные как n
-by-NumDimensions
действительная матрица, где n
является количеством строк X
. Алгоритм оптимизации tsne
использует эти точки в качестве начальных значений.
Типы данных: single | double
'LearnRate'
— Темп обучения для процесса оптимизации500
(значение по умолчанию) | положительная скалярная величинаТемп обучения для процесса оптимизации, заданного как положительная скалярная величина. Как правило, установите значения от 100
до 1000
.
Когда LearnRate
является слишком маленьким, tsne
может сходиться к плохому локальному минимуму. Когда LearnRate
является слишком большим, оптимизация может первоначально иметь увеличение расхождения Kullback-Leibler, а не уменьшение. См. tsne Настройки.
Пример: 1000
Типы данных: single | double
'NumPrint'
— Итеративная частота отображения20
(значение по умолчанию) | положительное целое числоИтеративная частота отображения, заданная как положительное целое число. Когда парой "имя-значение" Verbose
не является 0
, tsne
возвращает итеративное отображение после каждого NumPrint
итерации. Если пара "имя-значение" Options
содержит непустую запись 'OutputFcn'
, то выходные функции выполняются после каждого NumPrint
итерации.
Пример: 20
Типы данных: single | double
Опции
Опции оптимизации'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.5
(значение по умолчанию) | скаляр от 0 до 1Параметр компромисса Barnes-хижины, заданный как скаляр от 0 до 1. Более высокие значения дают более быструю, но менее точную оптимизацию. Применяется только, когда Algorithm
является 'barneshut'
.
Пример: 0.1
Типы данных: single | double
'Verbose'
— Итеративное отображение0
(значение по умолчанию) | 1
| 2
Итеративное отображение, заданное как 0
, 1
или 2
. Когда Verbose
не является 0
, tsne
распечатывает сводную таблицу расхождения Kullback-Leibler и норму его градиента каждый NumPrint
итерации.
Когда Verbose
является 2
, tsne
также распечатывает отклонения Гауссовых ядер. tsne
использует эти ядра в своем вычислении объединенной вероятности X
. Если вы видите значительные различия в шкалах минимальных и максимальных отклонений, можно иногда получать более подходящие результаты путем перемасштабирования X
.
Пример 2
Типы данных: single | double
Y
Встроенные точкиn
-by-NumDimensions
матрицаВстроенные точки, возвращенные как n
-by-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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.