java weka 聚类,如何使用Weka的DBSCAN对实例进行聚类?

I've been trying to use the DBSCAN clusterer from Weka to cluster instances. From what I understand I should be using the clusterInstance() method for this, but to my surprise, when taking a look at the code of that method, it looks like the implementation ignores the parameter:

/**

* Classifies a given instance.

*

* @param instance The instance to be assigned to a cluster

* @return int The number of the assigned cluster as an integer

* @throws java.lang.Exception If instance could not be clustered

* successfully

*/

public int clusterInstance(Instance instance) throws Exception {

if (processed_InstanceID >= database.size()) processed_InstanceID = 0;

int cnum = (database.getDataObject(Integer.toString(processed_InstanceID++))).getClusterLabel();

if (cnum == DataObject.NOISE)

throw new Exception();

else

return cnum;

}

This doesn't seem right. How is that supposed to work? Is there a different method I should be using for clustering? Do I have to run this method sequentially on all instances, in some specific order, if I want to get any useful information out of it?

解决方案

As Mark answered, this is obviously a bug. As long as you query about instances in the exact same order in which they were inserted into the clusterer it's okay; but it won't work in any other case.

A co-worker solved this by writing her own version of the DBScan class: essentially identical (copy-pasted), except that she maintains a mapping between instances and cluster labels. This mapping can be produced by iterating over the contents of the database instance. The appropriate cluster for an instance can then be immediately retrieved from that mapping.

Editing this method is also a good opportunity to change the throw new Exception into something more sensible in this context, such as return -1.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值