【问题标题】:Weka Java API - Euclidean Distance: Normalized vs NonNormalizedWeka Java API - 欧几里德距离:规范化与非规范化
【发布时间】:2014-10-13 13:10:31
【问题描述】:

我想计算长度为 5 的两个向量之间的归一化欧几里得距离。使用 Apache Math 和 RealVector 的更简单方法不会对距离进行归一化,因此我尝试使用 Weka。我遵循了java代码:

Attribute one = new Attribute("one");
Attribute two = new Attribute("two");
Attribute three = new Attribute("three");
Attribute four = new Attribute("four");
Attribute five = new Attribute("five");

FastVector attributes = new FastVector();
attributes.addElement(one);
attributes.addElement(two);
attributes.addElement(three);
attributes.addElement(four);
attributes.addElement(five);

Instances wVector = new Instances("Vector", attributes, 0);

Instance firstInstance = new Instance(attributes.size());
firstInstance.setDataset(wClassVector);
firstInstance.setValue(one, 1.0);
firstInstance.setValue(two, 2.0);
firstInstance.setValue(three, 3.0);
firstInstance.setValue(four, 4.0);
firstInstance.setValue(five, 5.0);

Instance secondInstance = new Instance(attributes.size());
secondInstance.setDataset(wClassVector);
secondInstance.setValue(one, 10.0);
secondInstance.setValue(two, 20.0);
secondInstance.setValue(three, 30.0);
secondInstance.setValue(four, 40.0);
secondInstance.setValue(five, 50.0);

EuclideanDistance ed = new EuclideanDistance(wClassVector);

Double wDist = ed.distance(firstInstance, secondInstance);

ed.setDontNormalize(true);
Double wDist1 = ed.distance(firstInstance, secondInstance);

为什么它计算的不是归一化距离wDist1正确的以太归一化距离wDist得到NaN作为结果?

【问题讨论】:

    标签: java normalization weka euclidean-distance


    【解决方案1】:

    距离的归一化基于创建距离函数的数据集实例的属性值的范围

    您的wVector 数据集不包含任何实例。您必须像这样添加实例:

        wVector.add(firstInstance);
        wVector.add(secondInstance);
    

    然后它应该按预期工作。

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 2018-06-06
      • 1970-01-01
      • 2017-05-03
      • 2011-01-17
      • 2012-12-31
      • 1970-01-01
      • 2013-08-21
      • 2013-12-11
      相关资源
      最近更新 更多