点和平均向量之间的马氏距离总是相同的

9cbw7uwe  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(560)

我最近在尝试执行一些数据清理算法。当我试图计算数据集中的点和平均向量之间的马氏距离时,似乎是一样的。
例如,我有这样一个数据集:

  1. {{2,2,3},{4,5,9},{7,8,9}}

平均向量为:

  1. {13/3,5,7}

协方差矩阵为:

  1. {{6.333333333333333,7.5,7.0},{7.5,9.0,9.0},{7.0,9.0,12.0}}

那么{2,2,3},{4,5,9},{7,8,9}和平均向量之间的距离都是8290542,这很奇怪。经过纸上计算,结果是一致的。
有人知道我的代码或想法有什么问题吗?如果有人能帮我,我会非常感激的。下面是我用来处理这个问题的一些代码。

  1. import org.apache.commons.math3.linear.RealMatrix;
  2. import org.apache.commons.math3.stat.correlation.Covariance;
  3. import org.apache.mahout.math.*;
  4. import org.apache.mahout.common.distance.MahalanobisDistanceMeasure;
  5. public class Test {
  6. public static void main(String[] args) {
  7. double[] a = {2,2,3};
  8. Vector aVector = new DenseVector(a);
  9. double[] b = {4,5,9};
  10. Vector bVector = new DenseVector(b);
  11. double[] c = {7,8,9};
  12. Vector cVector = new DenseVector(b);
  13. double[] mean = {13/3,5,7};
  14. Vector meanVector = new DenseVector(mean);
  15. MahalanobisDistanceMeasure measure = new MahalanobisDistanceMeasure();
  16. double[][] ma = {{2,2,3},{4,5,9},{7,8,9}};
  17. RealMatrix matrix = new Covariance(ma).getCovarianceMatrix();
  18. Matrix math = new DenseMatrix(matrix.getData());
  19. measure.setCovarianceMatrix(math);
  20. measure.setMeanVector(meanVector);
  21. System.out.println(matrix.toString());
  22. System.out.println(measure.distance(meanVector,cVector));
  23. }
  24. }
yzuktlbb

yzuktlbb1#

你需要使用更多的数据。
平均向量+协方差矩阵将过拟合到您的数据,并给出相同的距离。
对于三维数据,至少使用20个点。

相关问题