/*
* Java code for the FarthestFirst Clustering Algorithm
aimed at building descriptive model.
*/
package cluster;
import java.io.*;
import java.util.Arrays;
import weka.clusterers.FarthestFirst;
import weka.core.*;
import weka.clusterers.*;
import weka.clusterers.ClusterEvaluation;
import weka.filters.*;
import weka.filters.unsupervised.attribute.Remove;
import weka.clusterers.FilteredClusterer;
public class Cluster {
private int m_InstanceNum;
private int m_NumClusters;
private int[] m_BestAssignments;
public static void main(String[] args) throws Exception {
Instances data = new Instances(new
BufferedReader(new
FileReader(FinalDatasetforCBSAPDS.arff")));
data.setClassIndex(data.numAttributes() - 1);
Remove filter = new Remove();
filter.setAttributeIndices("" + (data.classIndex() + 1));
filter.setInputFormat(data);
Instances dataClusterer = Filter.useFilter(data, filter);
//train the clusterer
FarthestFirst clusterer = new FarthestFirst();
clusterer.setNumClusters(5); //set the number of
clusters
clusterer.setSeed(5127); // set the size of seed
String options[] = {
"-N", Integer.toString(5),
"-S", Integer.toString(5127),};
clusterer.setOptions(options);
clusterer.buildClusterer(dataClusterer);
ClusterEvaluation eval = new ClusterEvaluation();
eval.setClusterer(clusterer);//the cluster to evaluate
eval.evaluateClusterer(data); //data to evaluate the
clusterer on
System.out.println("# of clusters: " +
eval.getNumClusters()); // output of # clusters
clusterer.buildClusterer(dataClusterer); // build the
clusterer
eval.setClusterer(clusterer); //the cluster to evaluate
System.out.println(eval.clusterResultsToString());
Instances centroids = clusterer.getClusterCentroids();
int numClusters = clusterer.getNumClusters();
String filename = "Clusters_Connected_as";
filename += "_Cases_for_CBSAPDS_Design";
filename += ".txt";
File file = new File(filename);
try (Writer writer = new BufferedWriter(new
FileWriter(file))) {
for (int i = 0; i < numClusters; i++) {
for (int j = 0; j < 5127; j++) {
String centroidsStr =
centroids.instance(i).toString();
String[] to = centroidsStr.split(",");
writer.write(Integer.toString(j));
writer.write(",");
writer.write(data.instance(j) + "," + "case" + j + ","
+ (to[i]));
writer.write("\n");
}
}
System.out.println("\nInformation:");
}
}
}
================================================ =
在netbeans控制台中,输出与在weka中运行的输出相似:
Clustered Instances
0 3451 (67%)
1 231 (5%)
2 1244 (24%)
3 76 (1%)
4 120 (2%)
,但是在写入文本文件中,每个簇具有与总种子相同的实例(5127);即输出文本文件总共包含25635个实例/案例 如果有人在这个问题上对我有帮助,我非常感谢。