现在我们介绍使用Weka来对数据进行分类。对数据进行分类,我们必须先指定那一列作为预测类别。因为数据文件格式的问题,类别一般都是最后一列属性。我们可以使用setClassIndex来设置类别。然后我们要选择分类器,分类器有很多,我们暂时使用J48分类器。对数据进行训练可以使用buildClassifier,然后我们可以用classifyInstance来查看训练数据预测的类别值。当然预测的类别会用数值表示,比如0,1,2....代表预测的值属于第几个类别。例如类别的值为{sunny,rainy}那么0代表sunny,1代表rainy。
package InstanceTest;
import weka.core.Instances;
import weka.classifiers.trees.J48;
import weka.classifiers.trees.j48.*;
import java.io.*;
public class InstanceTest {
/**
* @param args
*/
public Instances data;
//设置预测类别 默认为最后一个
public void SetClassIndex(Instances ins)
{
ins.setClassIndex(ins.numAttributes()-1);
}
public Instances GetInstance(String FileName)throws Exception
{
FileReader reader=new FileReader(FileName);
data=new Instances(reader);
return data;
}
public void classify()throws Exception
{
J48 classify=new J48();
classify.buildClassifier(data);
System.out.println(classify.classifyInstance(data.instance(0)));
}
public static void main(String[] args) {
try
{
InstanceTest test=new InstanceTest();
Instances date=test.GetInstance("D://train.arff");
test.SetClassIndex(date);
test.classify();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}