繁体   English   中英

如何使用weka kdtree获得k个最近邻居

[英]how to get k nearest neighbors using weka kdtree

我正在尝试使用weka KDTree实现获得k个最近的邻居,如下所示:

    ArrayList<ArrayList<Double>> ar = new ArrayList<ArrayList<Double>>();
    ArrayList<Double> d1 = new ArrayList<Double>();
    d1.add(1.1);
    d1.add(1.1);

    ArrayList<Double> d2 = new ArrayList<Double>();
    d2.add(2.2);
    d2.add(2.2);

    ArrayList<Double> d3 = new ArrayList<Double>();
    d3.add(3.3);
    d3.add(3.3);

    ar.add(d1);
    ar.add(d2);
    ar.add(d3);

    Attribute a1 = new Attribute("attr1", 0);
    Attribute a2 = new Attribute("attr2", 0);
    FastVector attrs = new FastVector();
    attrs.addElement(a1);
    attrs.addElement(a2);

    Instances ds = new Instances("ds", attrs, 10);
    for (ArrayList<Double> d : ar) {
        Instance i = new Instance(2);
        i.setValue(a1, d.get(0));
        i.setValue(a2, d.get(1));
        ds.add(i);
    }
    Instance target = new Instance(2);
    target.setValue(a1, 7);
    target.setValue(a2, 7);
    KDTree knn = new KDTree(ds);

    Instances targetDs = new Instances("target", attrs, 1);
    targetDs.add(target);

    Instances nearestInstances = knn.kNearestNeighbours(targetDs.firstInstance(), 2);
    for (int i = 0; i < nearestInstances.numInstances(); i++) {

        System.out.println(nearestInstances.instance(i).value(a1) + ", "
                + nearestInstances.instance(i).value(a2));
    }

但是它会在kNearestNeighbours调用中抛出NullPointerException

位于weka.core.neighboursearch.KDTree.findNearestNeighbours(KDTree.java:308)的线程“main”java.lang.NullPointerException中的异常,位于blah.App的weka.core.neighboursearch.KDTree.kNearestNeighbours(KDTree.java:390)。主(App.java:60)

我在文档中找不到任何提示,并且异常消息没有用。 知道这可能是什么问题吗?

好吧,使用没有参数的构造函数并在下一步中设置参数解决了这个问题。 我的意思是我改变了

    KDTree knn = new KDTree(ds);

    KDTree knn = new KDTree();
    knn.setInstances(ds);

它的工作原理。 我不知道该说什么,只是恭喜weka!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM