我有以下代码在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
答案 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)
不是正定的。
它适用于其他距离,因为它们没有这种要求。