我有一个12x202矩阵(有202个特性的12个实例)。我想要计算每12个实例之间的mahalanobis距离,但似乎列的数量不能比实例(行)数大得多。(计算12x11矩阵的距离没有问题,但使用linkage(X,'ward','mahalanobis');、mahal(X,X);或pdist2(X,X,'mahalanobis');,超过11个特性在MATLAB中会造成错误)
发布于 2016-08-25 08:17:58
如果您查看matlab文档的mahal函数,它会说:
X和Y必须有相同的列数,但可以有不同的行数。X必须有比列更多的行。
我不太擅长统计,所以我不知道为什么这个条件是重要的,但我认为这是出于效率的原因,还有12种措施太少,所以考虑更多的措施。
您可以自己计算mahalabonis距离,在同一个文档中很容易得到formaula,并且给出一个更好地计算mahalabanois距离的例子:
马氏距离又称二次距离。它测量两组对象的分离。假设我们有两个具有均值的群,Mahalanobis距离是由以下所给出的
不同的群体也是如此,而不是同样的群体。
在任何情况下,您都可以使用这个:
function MD = my_MahalanobisDistance(X, Y)
[nX, mX] = size(X);
[nY, mY] = size(Y);
n = nX + nY;
if(mX ~= mY)
disp('Columns in X must be same as in Y')
else
xDiff = mean(X) - mean(Y);
cX = my_covariance(X);
cY = my_covariance(Y);
pC = nX/n*cX + nY/n*cY;
MD = sqrt(xDiff * inv(pC) * xDiff');
end对于协方差:
function C = my_covariance(X)
[n,m] = size(X);
Xc = X -repmat(mean(X),n,1);
C = Xc'* Xc/n;我希望这能帮到你
https://stackoverflow.com/questions/39135987
复制相似问题