1

我正在尝试使用 WEKA(GUI 和 java 代码)执行模糊聚类。在我的数据集中,我有两个字段:id 和字符串,所以我想通过这些字符串进行聚类,并作为每个字符串的输出获取属于每个集群的概率的数组。

我编写了定义具有所有必需属性的过滤器的代码(与 WEKA GUI 中的相同),然后使用 EM 进行聚类,然后使用 clusterer.distributionForInstance(filteredData...) 打印出分布。它运行甚至打印输出,问题是对于每个条目,它为其中一个集群分配 1,而对于其他集群,它分配 0。您能帮忙告诉我可能是什么问题吗?

我附上了我的代码片段以获得进一步的建议:

Instances train = DataSource.read(args[0]);
Instances test = DataSource.read(args[1]);
StringToWordVector filter = new StringToWordVector();
filter.setTFTransform(true);
filter.setLowerCaseTokens(true); 
filter.setAttributeIndices("last"); 
filter.setInputFormat(train);
filter.setStopwordsHandler(new Rainbow());
Instances filteredData = Filter.useFilter(train, filter);
Instances testFilteredData = Filter.useFilter(test, filter);
//build clusterer
EM clusterer = new EM();
clusterer.buildClusterer(filteredData);
for (int i = 0; i < testFilteredData.numInstances(); i++) {
  double[] dist = clusterer.distributionForInstance(testFilteredData.instance(i));
  System.out.print(testFilteredData.instance(i));
  System.out.print(Utils.arrayToString(dist));
  System.out.println();
}

如果不需要 tiidf 变换,该过程运行良好。如果用分类代替聚类(显然必须添加类属性),它也可以完美地工作。

4

0 回答 0