【问题标题】:How can I access the data that labeled with j48?如何访问标有 j48 的数据?
【发布时间】:2017-10-25 04:24:49
【问题描述】:
import javax.print.attribute.DateTimeSyntax;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
import weka.classifiers.bayes.NaiveBayes;
import weka.classifiers.trees.J48;
import weka.classifiers.functions.SMO;
public class Classification {
    public static void main(String[] args) throws Exception{
        //load dataset
        DataSource source = new DataSource("j:/weka/wekadataset/iris.arff");
        Instances dataset = source.getDataSet();
        // set the class to the last class attribute
        dataset.setClassIndex(dataset.numAttributes()-1);
        //create and build classifier
        J48 tree= new J48();
        tree.buildClassifier(dataset);
    }
}

//我在半监督学习中使用J48。每次迭代后,我必须访问标记的数据,以便在下一次迭代中使用它。 我的问题在这里。如何访问每个步骤的标记数据?。我应该更改 J48 源代码以便我可以看到它还是有办法做到这一点(在 Java 中,有没有一种方法?)

【问题讨论】:

    标签: java weka


    【解决方案1】:
    //write the modified dataset by j48 into the new file and
    // write in the output
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
        for (int i=0; i<k ; i++){
            Instance newInstance = instance01.instance(i);
            //write attributes 
            for(int j=0;j<newInstance.numAttributes()-1;j++){
                String AttribValue =Double.toString(newInstance.value(j));
                System.out.print(newInstance.value(j)+"-");
                bw.write(AttribValue+",");
            }
            //write the class
            double actualClass = tree.classifyInstance(newInstance);
            String actual =newInstance.classAttribute().value((int)actualClass);
            System.out.println("class="+actual);
            bw.write(actual);
            bw.newLine();
        }
        bw.close();
    

    【讨论】:

    • 现在将此文件与源文件进行比较并提取差异,从而为我们提供 j48 预测的类。
    【解决方案2】:
    //now compare the source file and the modified dataset in the second
    //file. write the differences in the third file and then rename this file
    //to the second file
    FileOutputStream fos1 = new FileOutputStream(new File
            ("j:/weka/wekadataset/new folder/iris-semi02.arff"));//third file
    BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(fos1));
    BufferedReader br1 = new BufferedReader(new FileReader(
            "j:/weka/wekadataset/iris-semi.arff"));//
    BufferedReader br2 = new BufferedReader(new FileReader(
            "j:/weka/wekadataset/new folder/iris-semi01.arff"));
    String line1=br1.readLine();
    String line2=br2.readLine();
    while(!line1.startsWith("@DATA")){line1=br1.readLine();}
        line1=br1.readLine();   
        while(line1!=null && line2!=null ){
            if(!line1.equals(line2)){ 
                bw1.write(line2);   
                bw1.newLine();
            }
            line1=br1.readLine();
            line2=br2.readLine();
    }
    bw1.close();
    

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 2013-11-23
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2012-08-10
      • 2022-01-10
      相关资源
      最近更新 更多