【问题标题】:Define input data for clustering using WEKA API使用 WEKA API 定义用于聚类的输入数据
【发布时间】:2013-12-04 07:54:51
【问题描述】:

我想对经纬度指定的点进行聚类。我正在使用WEKA API 问题在于Instances instances = new Instances(40.01,1.02); 那么,如何在不使用 ARFF 文件的情况下指定输入数据呢?我只想将数组读入Instances

import java.io.Reader;

import weka.clusterers.ClusterEvaluation;
import weka.clusterers.SimpleKMeans;
import weka.core.Instances;


public class test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Instances instances = new Instances(40.01,1.02);

        SimpleKMeans simpleKMeans = new SimpleKMeans();
        simpleKMeans.buildClusterer(instances);

        ClusterEvaluation eval = new ClusterEvaluation();
        eval.setClusterer(simpleKMeans);
        eval.evaluateClusterer(new Instances(instances));

        eval.clusterResultsToString();
    }

}

【问题讨论】:

    标签: java api cluster-analysis weka


    【解决方案1】:

    我相信您必须创建自己的实例。下面我展示了从具有两个属性(纬度和经度)的数组创建一个新实例。

    
    import weka.core.Attribute;
    import weka.core.DenseInstance;
    import weka.core.FastVector;
    import weka.core.Instances;
    
    public class AttTest {
    
        public static void main(String[] args) throws Exception
        {
            double[] one={0,1,2,3};
            double[] two={3,2,1,0};
            double[][] both=new double[2][4];
            both[0]=one;
            both[1]=two;
    
            Instances to_use=AttTest.buildArff(both);
            System.out.println(to_use.toString());
        }
    
      public static Instances buildArff(double[][] array) throws Exception
      {
             FastVector      atts = new FastVector();
             atts.addElement(new Attribute("lat")); //latitude
             atts.addElement(new Attribute("lon")); //longitude
    
             // 2. create Instances object
             Instances test = new Instances("location", atts, 0);
    
             // 3. fill with data
             for(int s1=0; s1 < array[0].length; s1=s1+1)
             {
                 double vals[] = new double[test.numAttributes()];
                 vals[0] = array[0][s1];
                 vals[1] = array[1][s1];
                 test.add(new DenseInstance(1.0, vals));
             }
    
             return(test);
      }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2014-04-21
      • 2014-04-02
      • 1970-01-01
      • 2014-07-05
      • 2012-03-18
      • 2012-01-30
      相关资源
      最近更新 更多