我想对由纬度和经度指定的点进行聚类。我在用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();
}
}
我相信您必须创建自己的实例。下面我展示了从具有纬度和经度两个属性的数组创建一个新实例。
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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)