首先把ictclas4j解压缩,然后把Data文件夹整个拷贝到Eclipse项目的文件夹下,而bin目录下的org文件夹整个拷贝到你Eclipse项目的bin目录下,把src目录下的org文件夹整个拷贝到Eclipse项目的src目录下。
java weka.filters.supervised.attribute.Discretize -i my_arff_save_path/data_vsm.arff -o my_arff_save_path/data_D_vsm.arff -c first
得到data_D_vsm.arff
测试
importjava.io.File;
importweka.classifiers.Classifier;
importweka.classifiers.trees.J48;
importweka.core.Instances;
importweka.core.converters.ArffLoader;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.util.*;
publicclassweka
{
publicstaticvoidmain(String[]args)throwsException
{
BufferedWriterdestFileBw=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(newFile("E://data.txt"))));
//TODOAuto-generated
method stub
Classifierm_classifier=newJ48();
FileinputFile=newFile("E://data_D_vsm.arff");//训练语料文件
ArffLoaderatf=newArffLoader();
atf.setFile(inputFile);
InstancesinstancesTrain=atf.getDataSet();//
读入训练文件
inputFile=newFile("E://data_D_vsm.arff");//测试语料文件
atf.setFile(inputFile);
InstancesinstancesTest=atf.getDataSet();//
读入测试文件
instancesTest.setClassIndex(0);//设置分类属性所在行号(第一行为0号),instancesTest.numAttributes()可以取得属性总数
doublesum=instancesTest.numInstances(),//测试语料实例数
right= 0.0f;
instancesTrain.setClassIndex(0);
m_classifier.buildClassifier(instancesTrain);//训练
for(inti=
0;i<sum;i++)//测试分类结果
{
doublepredicted=m_classifier.classifyInstance(instancesTest.instance(i));
System.out.println("预测某条记录的分类id:"+predicted+",
分类值:"
+instancesTest.classAttribute().value((int)predicted));
destFileBw.write("预测某条记录的分类id:"+predicted+",
分类值:"
+instancesTest.classAttribute().value((int)predicted));
destFileBw.newLine();
System.out.println("测试文件的分类值:
"+instancesTest.instance(i).classValue()
+", 记录:"
+instancesTest.instance(i));
destFileBw.write("测试文件的分类值: "+instancesTest.instance(i).classValue()
+", 记录:"
+instancesTest.instance(i));
destFileBw.newLine();
System.out.println("--------------------------------------------------------------");
destFileBw.write("--------------------------------------------------------------");
destFileBw.newLine();
if(m_classifier.classifyInstance(instancesTest.instance(i))==instancesTest.instance(i).classValue())//如果预测值和答案值相等(测试语料中的分类列提供的须为正确答案,结果才有意义)
{
right++;//正确值加1
}
}
System.out.println("J48
classification precision:"+(right/sum));
destFileBw.write("J48 classification
precision:"+(right/sum));
destFileBw.newLine();
destFileBw.close();
}
}