You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Mahalanobis Distance实现与R内置函数结果不一致问题

手动实现马氏距离函数与R内置函数结果不一致的问题排查

自定义马氏距离函数代码

#'mahalanobis_distance
#'
#'Calculates the mahalanobis_distance given the input data
#'
#'@param point Point to calculate the mahalanobis_distance
#'@param sample_mean Sample mean
#'@param sample_covariance_matrix Sample Covariance Matrix
#'
#'@return Mahalanobis distance associated to the point
#'
#'@examples
#'
#'@export
mahalanobis_distance <- function(value, sample_mean, sample_covariance_matrix) {
  # Ensure value and sample_mean are vectors
  value <- as.matrix(value)
  sample_mean <- as.matrix(sample_mean)

  if (ncol(value) != ncol(sample_mean)) {
    stop("Dimensions of value and sample_mean do not match")
  }

  # Calculate the difference vector
  diff_vector <- value - sample_mean

  # Calculate the inverse of the covariance matrix
  inverted_covariance_matrix <- solve(sample_covariance_matrix)

  # Calculate the Mahalanobis distance
  mahalanobis_dist <- sqrt(t(diff_vector) %*% inverted_covariance_matrix %*% diff_vector)

  return(as.numeric(mahalanobis_dist))
}

测试数据生成代码

inputData = t(matrix(c(3,2,3.5,12,4.7,4.1,5.2,4.9,7.1,6.1,6.2,5.2,14,5.3),2,7,dimnames=list(c("r","d"))));
inputData = data.frame(inputData);
if (is.data.frame(inputData)) {
    inputData = as.matrix(inputData);
} else {
    stop("inputData must be a dataframe")
}

测试代码

mahalanobis_mat_vector = c();
for(i in 1:nrow(inputData)){
    mahalanobis_mat_vector = c(mahalanobis_mat_vector, mahalanobis_distance(inputData[i,], sampleMeans, covariance_matrix));
}
distances = mahalanobis_mat_vector;
message("My mahalanobis distance vector: ");
print(distances);
distances = mahalanobis(inputData, sampleMeans, covariance_matrix);
message("R own function mahalanobis(): ");
print(distances);

结果对比

自定义函数输出:

[1] 1.5243357 2.1412611 0.6774662 0.3867442 0.2811000 0.1497338 2.0931872

R内置mahalanobis()函数输出:

[1] 2.32359939 4.58499903 0.45896039 0.14957109 0.07901719 0.02242021 4.38143269

两者结果存在明显差异,需排查自定义函数的实现错误。


内容的提问来源于stack exchange,提问作者mbtz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:03:17