Java代码在控制台中运行没有错误。但是在写入文本文件时,存在问题

时间:2019-07-25 08:33:07

标签: java weka

    /*
     * 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个实例/案例 如果有人在这个问题上对我有帮助,我非常感谢。

0 个答案:

没有答案