问题标签 [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.
r - Mahalanobis 距离 - R 中不同机器上的不同结果
我正在使用 R 中的 Mahalanobis 距离找出异常值。我有一个包含 30 行和 24 列的数据集,我从 stats 包中将其输入到 mahanalobis 函数中。我想创建每个向量与其余行的查找距离。在我将相同的输入数据和相同的代码导出到另一台机器并重新运行代码之前,结果看起来不错,这与在 machine1 上看到的结果不同。这是预期的行为吗?还是我错过了什么。请指教。
我使用的代码:
然后我在 m_dist 上使用 boxplot 来识别异常值。第一台机器上的结果与第二台机器上的结果不匹配。我什至在两台机器上都使用 set.seed(1007) 只是为了检查,但结果仍然不同
我找到了另一个讨论python中结果差异的线程,但无论如何它对我没有帮助......
python - sklearn DistanceMetrics中的马氏距离得到奇异矩阵错误
我正在尝试使用以下简单代码计算马氏距离:
但我得到一个错误说:
我不太明白发生了什么。感谢您的任何建议。
mahalanobis - randomforestSRC node cost measure
How is node cost measured in the randomForestSRC multivariate regression case? Is it by the Euclidean distance or by the Mahalanobis distance (as with the MultivariateRandomForest package)?
scala - double 和 DenseVector[Double] 类型中的错误
下面的代码是这个问题的答案:Anomaly detection with PCA in Spark
但是当我尝试运行它时,它会在这一行中崩溃:
错误消息:类型不匹配:找到微风.linalg.DenseVector[Double],必需:Double
我该如何解决这个问题?
r - 组间观察匹配
我正在处理的原始数据集有超过 20000 行。这个的浓缩版本看起来像下面这样
我的目标是创建一个名为 Match1 的列,如下所示
g1r1-g2r3,g1r2-g2r1,g1r3-g2r2值背后的逻辑如下
第一步,基于 Mahalanobis 或简单距离方法在 Group1 和 Group2 中的行之间生成距离矩阵,sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2)
第二步,找到每行中的最小或最小距离。
该列Match1
的值为 g1r1-g2r3,因为 rows 、 Row1-Group1 和 Row3-Group2 的最小距离为 0.0083。类似地 g1r2-g2r1 因为 Row2-Group1 和 Row1-Group2 的结果是最小值 0.8538。尽管 0.0329 是距离矩阵最后一行中的最小值,但我们跳过该值并选择下一个最小值 0.0340,因为选择 0.0329 将导致 Row3-Group1 与 Row1-Group2 配对,并且 Row1-Group2 已经与 Row2-Group1 配对,所以我们选择了下一个最小值 0.0340,这导致了 g1r1-g2r3。
第三步,根据 Step2 中的匹配观测值计算平均存活率。
我不确定如何以编程方式将这些步骤串联在一起,我将不胜感激任何建议或帮助有效地将所有这些部分组合在一起。
r - R中的矢量化滚动/累积马氏距离
我正在尝试计算滚动马哈拉诺比斯距离而不诉诸 for 循环并且惨遭失败。
这是一个示例数据集:
我正在尝试按组 ( ) 计算 、和label
的马氏距离valx
,但仅使用该日期 ( ) 或之前的行。我目前的解决方案是遍历 each ,遍历 each ,将数据集过滤到匹配数据,使用 计算距离,将该距离添加到列表中,然后将它们放在循环之外*。显然这并不理想。valy
valz
date
label
date
stats::mahalanobis
do.call
rbind
我怀疑有一些方法可以写:
以类似于计算滚动一元函数的方式,如下所示:
如果没有协方差,我可以计算与组件的距离(滚动方差方差很容易使用上述函数计算),但我认为我的变量确实具有协方差,我不确定如何构建滚动协方差矩阵...
在 for 循环之外是否存在解决方案?
*循环解决方案的代码如下:
r - 两组观测值之间的马氏距离
如果这是我的数据集的快照。
如何计算 Group1 中每行/观察值与 Group 2 中每个观察值之间的马氏距离?
像这样的东西
numpy - 加快马氏距离计算
背景:
我正在实现一个顺序向后选择算法来从数据集中选择特征。有问题的数据集是 MNIST。我有 60000 个长度为 784 的向量。
fi
该算法要求我从总共 784个特征中遗漏一个特征,并选择剩余的 783 个特征,selection
在下面的代码中调用。然后我必须计算每个向量的 Mahalanobis 到它的尊重类的平均值。一旦这个迭代完成,我会遗漏两个特征,然后是三个,依此类推。这些迭代中的每一个都需要 3 分钟。
我必须选择 500 个特征,因此上述内容重复 500 次,因此总共计算了马氏距离500 x 784 = 392,000
。这需要我计算协方差矩阵的逆矩阵。这个协方差矩阵的逆不存在,因为它是奇异的,所以我使用的是 numpy 的伪逆。
问题
正如你可以想象的那样,上面的速度非常慢。计算伪逆是一个最慢的过程。我想我可以预先计算伪逆,然后删除与fi
. 然而,事实证明这个伪逆矩阵不等于直接从我fi
已经删除的向量计算的伪逆矩阵。
我试过的
我尝试在很大程度上对此进行矢量化处理并处理数组堆栈,结果却发现分解方法较慢。我尝试过 np.einsum、cdist 甚至 numexpr。没有什么真正有帮助的。
这使我相信我加快速度的最佳机会是以某种方式将协方差和伪逆计算移出这个循环。这是我当前的代码:
问题
我怎样才能加快这个计算?从我过去一周所做的测试来看,这个计算中最慢的部分似乎是 line pseudoInverse = pinv(covariance(class_rows))
。
r - 计算加权成对马氏距离
我知道该HDMD
包有一个名为的函数pairwise.mahalanobis
,它应该计算成对的马氏距离。但是,我也想在这个距离上引入权重,这个函数是不可行的。因此,我开发了自己的代码。为了测试它是否运行良好,我首先保持简单,即没有权重,并将其结果与pairwise.mahalanobis
函数的结果进行比较。但是结果不匹配......以下是我使用的功能:
这是它对玩具数据的两种选择的实现:
s 函数的结果pairwise.mahalanobi
对我来说似乎完全荒谬。data[2]
对于初学者来说,它为&data[3]
和data[2]
&分配了 1 的距离,data[1]
当人们查看它们的值时这是没有意义的。另一方面,我的函数给出了一致的结果。例如,让我们比较data[1]
&data[2]
和data[1]
&之间的距离比data[3]
。
(100 - 54) / (100 - 56) = 46/44 = 1.045455
现在,这个比率也应该适用于我的函数产生的距离。
确实如此!这是否意味着我的功能在pairwise.mahalanobis
错误时运行良好?(或者我是否以某种方式错误地使用它?)我对R不是很有经验,所以我不敢自己得出这个结论。如果比我更有经验的人能证实我的逻辑,那就太好了。