Ошибка с алгоритмом TSNE с расстоянием Малахана в MATLAB - PullRequest
0 голосов
/ 30 октября 2018

У меня есть следующий код для построения моих данных с использованием алгоритма сокращения возможностей TSNE в matlab

data=dlmread('features.txt');

meas=data(:,2:end);
species=data(:,1);

rng('default'); % for reproducibility
Y = tsne(meas,'Algorithm','exact','Distance','mahalanobis');
gscatter(Y(:,1),Y(:,2),species);
title('Mahalanobis');

Однако при его запуске у меня возникает следующая проблема:

Ковариационная матрица для метрики Махаланобиса должна быть симметричной и положительно определен.

Ошибка в цне (строка 323) tempDistMat = pdist (X, расстояние);

Ошибка в plotafeatures (строка 7) Y = tsne (тез, 'Алгоритм', 'точный', 'Расстояние', 'Махаланобиса');

При других расстояниях график отображается правильно, что, возможно, происходит с моим кодом или данными?

Мои данные можно найти ЗДЕСЬ

1 Ответ

0 голосов
/ 30 октября 2018

Проблема действительно связана с расстоянием Mahalanobis.

Согласно документации tsne , параграф о расстояниях :

'махаланобис' - расстояние Махаланобиса, вычисленное с использованием положительно определенной ковариационной матрицы nancov (X) .

Кажется, ваша матрица meas не удовлетворяет этому требованию. Вы можете подтвердить это с помощью функции chol. Как говорится в документации ,

[R, p] = chol (A) для положительно определенного A (...) p равно нулю. Если A не является положительно определенным, то p является положительным целым числом .

Я пробовал с вашими данными:

data=dlmread('features.txt');
meas=data(:,2:end);
[~, p] = chol(nancov(meas))

Он вернул p = 389, поэтому nancov(meas) не является положительно определенным.

Это работает с другими расстояниями, потому что они не имеют такого рода требования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...