Java 使用WEKA API定义集群的输入数据
我想对由纬度和经度指定的点进行聚类。我正在使用 问题在于Java 使用WEKA API定义集群的输入数据,java,api,cluster-analysis,weka,Java,Api,Cluster Analysis,Weka,我想对由纬度和经度指定的点进行聚类。我正在使用 问题在于Instances=新实例(40.01,1.02) 那么,如何在不使用ARFF文件的情况下指定输入数据呢?我只想将数组读入实例 import java.io.Reader; import weka.clusterers.ClusterEvaluation; import weka.clusterers.SimpleKMeans; import weka.core.Instances; public class test {
Instances=新实例(40.01,1.02)代码>
那么,如何在不使用ARFF文件的情况下指定输入数据呢?我只想将数组读入实例
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();
}
}
我相信你必须创建自己的实例。下面我将展示如何从具有两个属性(纬度和经度)的数组创建一个新实例
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);
}
}
导入weka.core.Attribute;
导入weka.core.DenseInstance;
导入weka.core.FastVector;
导入weka.core.Instances;
公开课测验{
公共静态void main(字符串[]args)引发异常
{
双[]一={0,1,2,3};
double[]two={3,2,1,0};
double[]两者均=新的double[2][4];
两者[0]=1;
两个[1]=两个;
要使用的实例=AttTest.buildArff(两者);
System.out.println(使用.toString());
}
公共静态实例buildArff(双[][]数组)引发异常
{
FastVector atts=新的FastVector();
atts.addElement(新属性(“lat”);//纬度
atts.addElement(新属性(“lon”);//经度
//2.创建实例对象
实例测试=新实例(“位置”,附件,0);
//3.填写数据
对于(int s1=0;s1