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
-by- m
матрицаТочки данных, заданные как 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)
'Algorithm'
— tsne
алгоритм'barneshut'
(по умолчанию) | 'exact'
tsne
алгоритм, заданный как 'barneshut'
или 'exact'
. The 'exact'
алгоритм оптимизирует расхождение Kullback-Leibler распределений между исходным пространством и встроенным пространством. The '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'
- Размерность выходного 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
. В алгоритме Барнса-Хата, 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
-by- NumDimensions
действительная матрицаНачальные встроенные точки, заданные как n
-by- 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'
entry, затем выходные функции выполняются после каждого NumPrint
итераций.
Пример: 20
Типы данных: single
| double
'Options'
- Опции оптимизации'MaxIter'
, 'OutputFcn'
, и 'TolFun'
Опции оптимизации, заданные как структура, содержащая поля 'MaxIter'
, 'OutputFcn'
, и 'TolFun'
. Создание 'Options'
использование statset
или struct
.
'MaxIter'
- Положительное целое число, задающее максимальное количество итераций оптимизации. По умолчанию: 1000
.
'OutputFcn'
- Указатель на функцию или cell-массив указателей на функцию, задающих одну или несколько функций для вызова после каждого NumPrint
итерации оптимизации. Для получения дополнительной информации о синтаксисе смотрите т-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
-by- NumDimensions
матрицаВстроенные точки, возвращенные как n
-by- NumDimensions
матрица. Каждая строка представляет одну встроенную точку. n
количество строк данных X
которые не содержат никаких NaN
записи. Смотрите Результаты Графика с входными данными NaN.
loss
- расхождение Куллбэка-ЛейблераРасхождение Куллбэка-Лейблера между смоделированным входным и выходным распределениями, возвращаемое как неотрицательная скаляра. Для получения дополнительной информации смотрите Алгоритм 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.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.