马氏距离是否等同于 PCA 旋转数据上的欧几里得距离?

机器算法验证 r 主成分分析 距离 多元正态分布 回转
2022-03-07 12:56:08

我一直相信(见这里这里)马氏距离与 PCA 旋转数据上的欧几里得距离相同。换句话说,采用多元正态数据X, 所有的马氏距离x来自任何给定的点(比如0) 应该与条目的欧几里得距离相同Xrot0, 在哪里Xrot是数据和 PCA 旋转矩阵的乘积。

1. 这是真的吗?

我下面的代码向我暗示它不是。特别是,看起来围绕 PCA-欧几里得距离的马氏距离方差随着 PCA-欧几里得距离的大小而增加。这是一个编码错误,还是宇宙的一个特征?它是否与对某事的估计不精确有关?得到平方的东西?

N=1000
cr = runif(1,min=-1,max=1)
A = matrix(c(1,cr,cr,1),2)
e<-mvrnorm(n = N,rep(0,2),A)
mx = apply(e, 2, mean)
sx = apply(e, 2, sd)
e = t(apply(e,1,function(X){(X-mx)/sx}))
plot(e[,1],e[,2])
dum<-rep(0,2)
md = mahalanobis(e,dum,cov(e))

pc = prcomp(e,center=F,scale=F)
d<-as.matrix(dist(rbind(dum,pc$x),method='euclidean',diag=F))
d<-d[1,2:ncol(d)]
plot(d,md^.5)
abline(0,1)

2. 如果上面的答案是正确的,可以用 PCA 旋转的欧几里得距离代替马氏距离p>n?

如果没有,是否有类似的度量标准可以捕获多元距离,按相关性进行缩放,并且存在哪些分布结果以允许计算观察概率?

编辑 我已经运行了一些模拟来研究 MD 和 SED 在 n 和 p 梯度上缩放/旋转数据的等效性。正如我之前提到的,我对观察的概率感兴趣。我希望找到一种很好的方法来让观察成为多元正态分布的一部分的概率,但是我已经得到了n<p估计分布的数据。请参阅下面的代码。看起来 PCA 缩放/旋转的 SED 是MD 的轻微偏差估计量,具有相当数量的方差似乎停止增加p=N.

f = function(N=1000,n,p){
  a = runif(p^2,-1,1)
  a = matrix(a,p)
  S = t(a)%*%a
  x = mvrnorm(N,rep(0,p),S)
  mx = apply(x, 2, mean)
  sx = apply(x, 2, sd)
  x = t(apply(x,1,function(X){(X-mx)/sx}))
  Ss = solve(cov(x))
  x = x[sample(1:N,n,replace=F),]
  md = mahalanobis(x,rep(0,p),Ss,inverted=T)
  prMD<-pchisq(md,df = p) 
  pc = prcomp(x,center=F,scale=F)
  d<-mahalanobis(scale(pc$x),rep(0,ncol(pc$x)),diag(rep(1,ncol(pc$x))))
  prPCA<-pchisq(d,df = min(p,n))#N is the number of PCs where N<P 
  return(data.frame(prbias = as.numeric(mean(prMD - prPCA)), prvariance = as.numeric(mean((prMD - prPCA)^2))))
}

grid = data.frame(n=100,p=2:200)
grid$prvariance <-grid$prbias <-NA

for (i in 1:nrow(grid)){
    o = f(n=grid[i,]$n,p=grid[i,]$p)
    grid[i,3:4]<-o
}

par(mfrow=c(1,2))
with(grid, plot(p,prbias))
abline(v=100)
m = lm(prbias~p,data=grid)
abline(m,col='red',lty=2)
with(grid, plot(p,prvariance))
abline(v=100)

在此处输入图像描述

两个问题: 1. 对我在这些模拟中的发现有何批评?2. 谁能将我的发现形式化为偏差和方差的分析表达式作为 n 和 p 的函数?我会接受这样做的答案。

2个回答

Mahalanobis 距离等效于 PCA 转换数据上的欧几里得距离(不仅仅是 PCA 旋转!),其中“PCA 转换”的意思是(i)首先旋转变得不相关,(ii)然后缩放成为标准化. 这就是@ttnphns 在上面的评论中所说的以及@DmitryLaptev 和@whuber 的意思,并在您链接到的答案中明确写了(),所以我鼓励您重新阅读他们的答案并确保这一点变得清晰。

这意味着您可以通过替换底部第四行中的pc$xwith来使您的代码正常工作。scale(pc$x)

关于你的第二个问题,与n<p,协方差矩阵是奇异的,因此马氏距离是不确定的。确实,考虑一下 PCA 转换数据中的欧几里得距离;什么时候n<p,协方差矩阵的一些特征值为零,相应的 PC 的方差为零(所有数据点都投影为零)。因此,不可能对这些 PC 进行标准化,因为不可能除以零。Mahalanobis 距离不能定义为“在这些方向上”。

可以做的是只关注数据实际所在的子空间,并在该子空间中定义马氏距离。这相当于进行 PCA 并仅保留非零组件,我认为这是您在问题 #2 中所建议的。所以这个问题的答案是肯定的。我不确定这在实践中有多有用,因为这个距离可能非常不稳定(已知接近零的特征值精度非常差,但会在马氏公式中反转,可能会产生严重错误) .

当协方差矩阵是对角线时,马氏距离是按比例缩放的欧几里得距离。在 PCA 中,分量之间的协方差矩阵是对角的。缩放的欧几里得距离是变量按标准差缩放的欧几里得距离。顺便说一句,参见距离百科全书第303 页,这是一本非常有用的书。

您似乎正在尝试在 PCA 的因子子集上使用欧几里得距离。您可能使用 PCA 降低了维度。您可以这样做,但是会引入一些错误,该错误与您的 PCA 组件解释的方差比例“成比例”。当然,您还必须调整比例的距离(即解释的差异)。