我正在研究一些聚类技术,对于给定的 d 维向量集群,我假设多元正态分布并计算样本 d 维平均向量和样本协方差矩阵。
然后,当试图确定一个新的、看不见的 d 维向量是否属于这个集群时,我正在通过这个度量检查它的距离:
这需要我计算协方差矩阵的逆. 但是给定一些样本,我不能保证协方差矩阵是可逆的,如果不是,我该怎么办?
谢谢
我正在研究一些聚类技术,对于给定的 d 维向量集群,我假设多元正态分布并计算样本 d 维平均向量和样本协方差矩阵。
然后,当试图确定一个新的、看不见的 d 维向量是否属于这个集群时,我正在通过这个度量检查它的距离:
这需要我计算协方差矩阵的逆. 但是给定一些样本,我不能保证协方差矩阵是可逆的,如果不是,我该怎么办?
谢谢
如果您的样本维度小于向量空间维度,则可能会出现奇异矩阵。如果您的样本少于(什么时候是你的维度),这种情况甚至必然会出现:样本最多跨越一个维超平面。给定这么小的样本,您显然无法计算正交空间中的方差。
这就是为什么通常不使用文字 PCA,而是执行奇异值分解,这可用于计算矩阵的伪逆。如果矩阵是可逆的,则伪逆将是逆矩阵。
但是,如果您看到不可逆矩阵,那么如果向量在集群所代表的超平面之外,那么您与集群的距离将毫无意义,因为您不知道正交空间中的方差(您可以想到这个方差为 0!)SVD 可以计算伪逆,但“方差”仍然不会由您的数据确定。
在这种情况下,您可能应该首先进行全局降维。仅当您实际上具有非冗余维度时,增加样本量才会有所帮助:无论您从分布中抽取多少样本,矩阵永远是不可逆的,你将无法判断偏差关于标准偏差(0)。
此外,根据您计算协方差矩阵的方式,您可能会因灾难性取消而遇到数值问题。最简单的解决方法是始终首先将数据居中,以获得零均值。
我在尝试gaussian_kde
在 Python 中使用 KDE 时遇到了这个问题,其中随机变量是某些图像的 784 像素。在我的情况下,原因是许多像素(在所有图像中)总是为零,所以根本不是随机的。为了解决这个问题,我只是在图像中添加了一些小的高斯噪声,瞧,现在协方差矩阵是可逆的。