kdtree java_java – 如何使用weka kdtree获取k个最近邻居

在尝试使用Weka的KDTree实现获取K个最近邻时遇到NullPointerException。通过更改构造函数,使用无参数的KDTree()创建实例,然后设置实例解决了问题。KDTree knn = new KDTree(); knn.setInstances(ds); 这使得代码能够正常工作。
摘要由CSDN通过智能技术生成

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

ArrayList> ar = new ArrayList>();

ArrayList d1 = new ArrayList();

d1.add(1.1);

d1.add(1.1);

ArrayList d2 = new ArrayList();

d2.add(2.2);

d2.add(2.2);

ArrayList d3 = new ArrayList();

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 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:

Exception in thread “main” java.lang.NullPointerException at

weka.core.neighboursearch.KDTree.findNearestNeighbours(KDTree.java:308)

at

weka.core.neighboursearch.KDTree.kNearestNeighbours(KDTree.java:390)

at blah.App.main(App.java:60)

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

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

KDTree knn = new KDTree(ds);

KDTree knn = new KDTree();

knn.setInstances(ds);

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值