2015-02-24 30 views
0

我想执行一个k均值算法无法处理任何类属性! k均值的java

我在Eclipse中使用此秧鸡

我有这样的代码

public class demo { 
    public demo() throws Exception { 
     // TODO Auto-generated constructor stub 
     BufferedReader breader = null; 
     breader = new BufferedReader(new FileReader(
       "D:/logiciels/weka-3-7-12/weka-3-7-12/data/iris.arff")); 
     Instances Train = new Instances(breader); 
     Train.setClassIndex(Train.numAttributes() - 1); 
     SimpleKMeans kMeans = new SimpleKMeans(); 
     kMeans.setSeed(10); 
     kMeans.setPreserveInstancesOrder(true); 
     kMeans.setNumClusters(3); 
     kMeans.buildClusterer(Train); 
     int[] assignments = kMeans.getAssignments(); 
     int i = 0; 
     for (int clusterNum : assignments) { 
      System.out.printf("Instance %d -> Cluster %d", i, clusterNum); 
      i++; 
     } 
     breader.close(); 
    } 
    public static void main(String[] args) throws Exception { 
     // TODO Auto-generated method stub 
     new demo(); 
    } 
} 

但有此异常

Exception in thread "main" weka.core.WekaException: weka.clusterers.SimpleKMeans: Cannot handle any class attribute! 
    at weka.core.Capabilities.test(Capabilities.java:1295) 
    at weka.core.Capabilities.test(Capabilities.java:1208) 
    at weka.core.Capabilities.testWithFail(Capabilities.java:1506) 
    at weka.clusterers.SimpleKMeans.buildClusterer(SimpleKMeans.java:595) 
    at wakaproject.demo.<init>(demo.java:24) 
    at wakaproject.demo.main(demo.java:37) 

我已阅读了一些解决方案,但我不知道问题出在哪里

感谢您提前

回答

2

错误:即SimpleKMeans不能处理类属性

Exception in thread "main" weka.core.WekaException: weka.clusterers.SimpleKMeans: Cannot handle any class attribute! 

状态。这是因为K-means是一种无监督的学习算法,这意味着不应该定义类。然而,代码中的一行设置了类的值。

如果您修改代码如下,它的工作原理。

public class demo { 
    public demo() throws Exception { 
     // TODO Auto-generated constructor stub 
     BufferedReader breader = null; 
     breader = new BufferedReader(new FileReader(
       "D:/logiciels/weka-3-7-12/weka-3-7-12/data/iris.arff")); 
     Instances Train = new Instances(breader); 
     //Train.setClassIndex(Train.numAttributes() - 1); // comment out this line 
     SimpleKMeans kMeans = new SimpleKMeans(); 
     kMeans.setSeed(10); 
     kMeans.setPreserveInstancesOrder(true); 
     kMeans.setNumClusters(3); 
     kMeans.buildClusterer(Train); 
     int[] assignments = kMeans.getAssignments(); 
     int i = 0; 
     for (int clusterNum : assignments) { 
      System.out.printf("Instance %d -> Cluster %d", i, clusterNum); 
      i++; 
     } 
     breader.close(); 
    } 
    public static void main(String[] args) throws Exception { 
     // TODO Auto-generated method stub 
     new demo(); 
    } 
}