使用weka.clusterers.HierarchicalClusterer时出现IllegalArgumentException

时间:2012-08-27 08:54:35

标签: machine-learning cluster-analysis weka hierarchical-clustering

我搜索了很多,但我找不到任何示例代码,它描述了如何使用WEKA HierarchicalClusterer。使用以下C#代码在“agg.buildClusterer(insts);”处给我一个IllegalArgumentException。

weka.clusterers.HierarchicalClusterer agg = new weka.clusterers.HierarchicalClusterer();
agg.setNumClusters(NumCluster);
/*
Tag[] TAGS_LINK_TYPE = agg.getLinkType().getTags();
agg.setLinkType(new SelectedTag(1, TAGS_LINK_TYPE));
*/
agg.buildClusterer(insts);
for (int i = 0; i < insts.numInstances(); i++)
{
    int clusterNumber = agg.clusterInstance(insts.instance(i));
}

StackTrace说:

at java.util.PriorityQueue..ctor(Int32 initialCapacity, Comparator comparator)
at weka.clusterers.HierarchicalClusterer.doLinkClustering(Int32 , Vector[] , Node[] )
at weka.clusterers.HierarchicalClusterer.buildClusterer(Instances data)

但未指定Message或InnerException。 可变“insts”是一个Instances-object,它只保存具有相同数量属性的实例。

是否有人能够快速找到我的错误或请发布/链接一些示例代码? 此外,LinkType(注释代码)的设置是否正确?

谢谢, 的Björn

1 个答案:

答案 0 :(得分:0)

HierarchicalClusterer类具有TAGS_LINK_TYPE属性。所以喜欢

agg.setLinkType(new SelectedTag(1, HierarchicalClusterer.TAGS_LINK_TYPE));

将实现您设置链接的目的。现在这1意味着什么?从javadocs中我们可以看到TAGS_LINK_TYPE包含的内容:

 -L Link type (Single, Complete, Average, Mean, Centroid, Ward, Adjusted complete, Neighbor Joining)
  [SINGLE|COMPLETE|AVERAGE|MEAN|CENTROID|WARD|ADJCOMLPETE|NEIGHBOR_JOINING]

通常,您的代码对于C#案例看起来没问题。我看到你没有在上面的例子中设置距离度量,也许你想要这样做?我也尽可能使用Weka和C#使用IKVM。我发现允许分层聚类的数据集不是太大。也许您的数据集超出了WEKA可以处理的数据集,如果缩小数据集的大小,您可以避免错误吗?