问题标签 [mahalanobis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1905 浏览

scikit-learn - python 上的 Sklearn KNN + mahalanobis

我尝试在 Sklearn 上使用 NearestNeighbors 函数。我写了一个例子来了解这些函数发生了什么。

上面的代码运行良好,它可以正确计算 2-最近点。但是当我尝试使用我的数据集时,会发生一些错误。数据集矩阵为 9959 * 384 矩阵。我打印下面的矩阵,并声明矩阵 training_data

当我在上面的代码中使用 training_data 时,只是将样本更改为 training_data,它有一个错误。

请帮我解决这些问题,谢谢!

0 投票
1 回答
928 浏览

r - 每对观测值的马氏距离

我正在尝试计算数据集的每个观测值之间的马氏距离dat,其中每一行是一个观测值,每一列是一个变量。这样的距离定义为:

公式

我写了一个函数来完成它,但我觉得它很慢。有没有更好的方法在 R 中计算这个?

生成一些数据来测试函数:

这是我到目前为止编写的函数。它们都有效,对于我的数据(800 个 obs 和 90 个变量),method = "forLoop"method = "apply"分别需要大约 30 和 33 秒。

注意:我尝试使用outer(),但速度更慢(60 秒)

0 投票
2 回答
11634 浏览

r - 使用带有概率的 R 进行多变量异常值检测

我一直在到处寻找使用 R 识别多元异常值的最佳方法,但我认为我还没有找到任何可信的方法。

我们可以以虹膜数据为例,因为我的数据也包含多个字段

首先,我使用与图书馆 MVN 的Mahalanobis 距离

两者都导致了大量的异常值(150 个中的 50 个为未调整的,49/150 个为调整的),我认为这需要更多改进。不幸的是,我似乎无法在 mvOutlier 方法中找到一个变量来设置阈值(说增加一个点成为异常值的概率,以便我们有一个较小的数字)

其次,我使用了异常值库。这是为了找到单变量异常值。所以,我的计划是在数据的每个维度上找到异常值,并且那些在所有维度上都是异常值的点被视为数据集的异常值。

为此我们可以设置概率,但我认为它不能代替多元异常值检测。

我尝试过的其他一些方法

  • 库(mvoutlier):这仅显示情节。很难自动找到异常值。而且我不知道如何将概率添加到这个
  • 厨师距离(链接):一个人说他使用了厨师距离,但我认为没有任何强有力的学术证据证明这是可以的。
0 投票
2 回答
148 浏览

python - 具有不确定点的最近邻

我有两个 2D 点集AB. 我想为 中A的每个点找到第一个最近的邻居B。但是,我正在处理不确定的点(即一个点有一个均值(2D 向量)和一个 2*2 协方差矩阵)。

因此,我想使用马氏距离,但在scikit-learn(例如)中,我不能为每个点传递协方差矩阵,因为它需要一个协方差矩阵。

目前,仅考虑平均位置(即我的二维正态分布的平均值),我有:

使用我的不确定点,而不是使用 L2 范数作为距离,我宁愿计算(在点ainAbB 中的点之间,它们的马氏距离:

在哪里C = inv(cov_a + cov_b)

其中mu_a(resp mu_b) 和cov_a(resp. cov_b) 是不确定点a(resp. b) 的 2D 均值和 2*2 协方差矩阵。

0 投票
1 回答
297 浏览

vba - VBA中的马氏距离

我正在尝试计算 VBA 中的马氏距离。

我创建了我的 UDF 来计算协方差矩阵,但是在执行我的函数时出现#value 错误。

你能给我一些帮助吗

提前致谢!

这是我的 VarCovar 函数,可以正常工作

在此处输入图像描述

0 投票
1 回答
1538 浏览

python - 马氏距离奇异矩阵误差

我有两组数据。两组都有 25 个变量和 114 个观察值。

目标是取任一组中的一个变量,计算两组均值的马氏距离。距离最小的组是变量所属的组。

我已经在 Octave 中实现了它并且它“有效”。它给出了答案,但抛出了奇异矩阵警告或“警告:矩阵奇异到机器精度”错误。由于某种原因,任一组的协方差矩阵最终都是奇异的,或者是精度误差。

我也在python中实现了这个。它会引发奇异矩阵错误。我最终使用了 numpy 伪逆函数(linalg.pinv),而不是采用协方差矩阵的实数逆。

问题

1)当我取它的逆时,为什么我的协方差矩阵会给我这个错误?

2) 处理此应用程序的正确方法是什么?

3) 使用 numpy 伪逆计算是否仍然接近正确的马氏距离?我使用它得到的值与 Octave 吐出的值非常不同。

代码

Octave 和 python 的代码可以在这里找到: 代码

更新

我不再使用 25 个变量和 114 个观察值,而是将数据减少到 25 个变量和 25 个观察值,一切都开始起作用了。

为什么这有关系?

这很常见吗?

我怎样才能拥有比变量更多的观察结果,或者更重要的是,比观察结果更多的变量?我可以对数据做些什么来对其进行预处理以使其正常工作吗?

Python代码

这是具有 25 个变量和 25 个观察值编辑的工作 python 代码。

0 投票
1 回答
651 浏览

matlab - 具有三变量向量的马氏距离

我在计算一对物体之间的马氏距离时遇到了一些麻烦。我遵循了 MATLAB 的文档,为了计算马氏距离,我必须使用 pdist2:“D = pdist2(X,Y,'mahalanobis',C)"

这给了我错误:

使用 pdist2 时出错(第 282 行) Mahalanobis 度量的协方差矩阵必须是列数与 X 相同的方阵。并且它必须是对称且正定的。

另一方面,如果我尝试:

我得到:

使用 mahal 时出错(第 38 行) X 的行数必须超过列数。

转置 A1,A2 我得到一个 3x1 矩阵,但我很确定我的值必须是一维的。任何帮助将不胜感激。

0 投票
1 回答
851 浏览

python - 在numpy中矢量化(平方)马氏距离

我有 X (nxd)、Y (mxd) 和正定 L (dxd)。我想计算 D,其中 D_ij 是 (X_i - Y_i) * L * (X_i - Y_i).T。n 和 m 在 250 左右;d 约为 10^4。

我可以使用scipy.spatial.distance.cdist,但这很慢。

看着 Dougal 对这个问题的回答,我试过了

这也很慢。

有没有更有效的方法来向量化这个计算?

0 投票
1 回答
554 浏览

r - 在 R 中的贝叶斯决策理论中指定特征向量时绘制马氏距离曲线

我正在研究模式识别和统计。我喜欢在 R 中使用直接函数,而不是显式编写代码。我的问题是,在一个三类二维问题中,我的每个类的特征向量都与协方差矩阵呈正态分布

s <- matrix(c(1.2,0.4,0.4,8),nrow=2)
每个类的平均向量是

m1 <- t(c(0.1, 0.1));m2 <- t(c(2.1, 1.9));m3 <- t(c(-1.5, 2.0))

假设类是同样可能的,我想对特征向量进行分类

x <- t(c(1.6,1.5))

根据我成功完成的贝叶斯最小误差概率分类器,现在我想绘制马氏距离曲线

我尝试了包mahalanobis(x, center, cov, inverted = FALSE, ...)内的功能{stats}。但是我很困惑,因为我的问题中已经有了意思和 var-cov 矩阵,并且mahalanobis()函数没有为我的问题提供便利!或者它提供了?我不知道!

请任何人指导我如何特别参考我的问题计算马氏距离并绘制马氏距离曲线。提前致谢!

上述问题的一个样本是

在此处输入图像描述

0 投票
2 回答
507 浏览

r - 使用 r 中的邻近矩阵进行聚类

我有一个马氏距离的邻近矩阵(相异)。

矩阵(样本):

矩阵有 1900 人,行名是一个 ID。我需要对这些人进行聚类,并在该人的 ID 旁边获得一些聚类。

我知道如何使用 k-means 进行聚类,但是当您已经有一个相异矩阵时,我不知道如何进行聚类。