首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有m<<n的矩阵的Mahalanobis距离

具有m<<n的矩阵的Mahalanobis距离
EN

Stack Overflow用户
提问于 2016-08-25 02:55:45
回答 1查看 403关注 0票数 1

我有一个12x202矩阵(有202个特性的12个实例)。我想要计算每12个实例之间的mahalanobis距离,但似乎列的数量不能比实例(行)数大得多。(计算12x11矩阵的距离没有问题,但使用linkage(X,'ward','mahalanobis');mahal(X,X);pdist2(X,X,'mahalanobis');,超过11个特性在MATLAB中会造成错误)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-25 08:17:58

如果您查看matlab文档的mahal函数,它会说:

X和Y必须有相同的列数,但可以有不同的行数。X必须有比列更多的行。

我不太擅长统计,所以我不知道为什么这个条件是重要的,但我认为这是出于效率的原因,还有12种措施太少,所以考虑更多的措施。

您可以自己计算mahalabonis距离,在同一个文档中很容易得到formaula,并且给出一个更好地计算mahalabanois距离的例子:

马氏距离又称二次距离。它测量两组对象的分离。假设我们有两个具有均值的群,Mahalanobis距离是由以下所给出的

不同的群体也是如此,而不是同样的群体。

在任何情况下,您都可以使用这个:

代码语言:javascript
复制
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

对于协方差:

代码语言:javascript
复制
function C = my_covariance(X) 
[n,m] = size(X); 
Xc = X -repmat(mean(X),n,1); 
C = Xc'* Xc/n;

我希望这能帮到你

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39135987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档