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

如何不依赖org.apache.mahout仅用org.apache.commons.math3计算Mahalanobis距离

可行实现方案说明

完全可以仅依赖 org.apache.commons.math3 库完成马氏距离计算,不需要引入任何Mahout相关依赖,commons-math3原生提供了对应的工具类,实现成本极低。

前置依赖引入

Maven项目可以直接引入稳定版的commons-math3依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.6.1</version>
</dependency>

核心实现逻辑

马氏距离计算依赖样本总体的协方差矩阵,commons-math3已经封装了协方差计算、矩阵求逆、距离计算的全流程能力:

  • 使用Covariance类计算样本集的协方差矩阵
  • 使用MahalanobisDistance类直接完成距离计算

完整可运行代码示例

import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.stat.correlation.Covariance;
import org.apache.commons.math3.ml.distance.MahalanobisDistance;

public class MahalanobisCalcExample {
    public static void main(String[] args) {
        // 1. 构造样本数据集,每行对应一个样本向量
        double[][] sampleDataset = {
            {1.1, 2.3, 3.2},
            {2.2, 3.4, 4.1},
            {3.1, 4.3, 5.2},
            {4.2, 5.4, 6.1},
            {5.1, 6.3, 7.2}
        };
        RealMatrix sampleMatrix = new Array2DRowRealMatrix(sampleDataset);

        // 2. 计算样本协方差矩阵
        Covariance covariance = new Covariance(sampleMatrix);
        RealMatrix covarianceMatrix = covariance.getCovarianceMatrix();

        // 3. 初始化马氏距离计算器
        MahalanobisDistance distanceCalculator = new MahalanobisDistance(covarianceMatrix);

        // 4. 计算两个目标向量的马氏距离
        double[] vectorX = {2.4, 3.5, 4.3};
        double[] vectorY = {3.3, 4.4, 5.2};
        double result = distanceCalculator.compute(vectorX, vectorY);

        System.out.printf("马氏距离计算结果:%.4f", result);
    }
}

注意事项

  • 若输入的样本集导致协方差矩阵为奇异矩阵(不可逆),初始化MahalanobisDistance时会抛出异常,需要提前对样本做降维或正则化处理
  • 待计算的两个向量维度必须和协方差矩阵的维度一致,否则会触发参数校验异常
  • 如果已经提前计算好协方差矩阵的逆矩阵,可以直接传入MahalanobisDistance构造方法,避免重复计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:09:02