1

我搜索了很多,但我找不到任何示例代码,其中描述了如何使用 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”是一个实例对象,它只保存具有等量数字属性的实例。

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

谢谢, 比约恩

4

1 回答 1

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# 案例中看起来不错。我看到您没有在上面的示例中设置距离度量,也许您想这样做?我也在使用 IKVM 的 C# 中尽可能地使用 Weka。我发现层次聚类允许的数据集不是太大。也许您的数据集超出了 WEKA 可以处理的范围,如果您减小数据集的大小,您将避免错误?

于 2013-08-09T15:55:11.920 回答