MATLAB中具有马拉哈尼氏距离的TSNE算法的错误

时间:2018-10-30 07:35:00

标签: matlab

我有以下代码在matlab中使用TSNE特征约简算法来绘制数据

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');

但是,通过运行它,我遇到了以下问题:

  

马哈拉诺比斯度量标准的协方差矩阵必须对称且   正定。

     

tsne中的错误(第323行)           tempDistMat = pdist(X,distance);

     

绘图功能错误(第7行)Y =   tsne(meas,'Algorithm','exact','Distance','mahalanobis');

在其他距离处,绘图可以正确进行,我的代码或数据可能会发生什么?

可以找到我的数据HERE

1 个答案:

答案 0 :(得分:2)

问题确实确实与Mahalanobis距离有关。

根据tsne documentation,关于distances的段落:

  

'mahalanobis'-马氏距离,使用正定协方差矩阵nancov(X)计算。

您的矩阵meas似乎不满足此要求。您可以使用chol函数进行确认。正如documentation所说:

  

[R,p] = chol(A)对于正定A(...)p为零。 如果A不是正定的,则​​p是正整数

我尝试了您的数据:

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

它返回了p = 389,所以nancov(meas)不是正定的。

它适用于其他距离,因为它们没有这种要求。