2015-06-20 71 views
4

我试图让说明使用秧鸡最近的邻居KDTree实现这样的k近邻:怎样用WEKA kdtree

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

异常在线程“主”java.lang.NullPointerException在 weka.core.neighboursearch.KDTree.findNearestNeighbours(KDTree.java:308) 在 weka.core.neighboursearch.KDTree.kNearestNeighbours (KDTree.java:390) 在blah.App.main(App.java:60)

我无法找到任何文档提示和异常消息是没有用的。任何想法可能是这里的问题?

+0

哪一行是blah.App.main(App.java:60)? – Raoul

+0

正如我所说的,“kNearestNeighbours”调用。 – Mehraban

回答

2

那么,使用不带参数的构造函数并在下一步中设置参数解决了这里的问题。我的意思是我改变

KDTree knn = new KDTree(ds); 

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

和它的作品。我不知道该说什么,只是恭喜weka!

+0

很高兴你解决了这个问题,但是文档表明它也应该以其他方式工作(http://weka.sourceforge.net/doc.dev/weka/core/neighboursearch/KDTree.html,http://weka.sourceforge .net/doc.dev/weka/core/neighboursearch/KDTree.html#KDTree%28weka.core.Instances%29) – gsamaras

+0

@gsamaras是的,绝对应该以任何一种方式工作。 – Mehraban

+0

但事实并非如此。布拉沃寻找解决方案。 +1和+1。 – gsamaras