在研究了weka如何导入导出数据后,根据制作数据模型的要求,我们需要对导入数据进入整理:
整理数据包括:属性处理、样本处理、数据转换(生成新变量)
本文先研究如何程序中选择属性,代码如下:
import java.io.FileReader;
import weka.core.Instances;
import weka.filters.unsupervised.attribute.Remove;
public class Filter {
public static void main(String[] args) throws Exception {
// 第一种方法,在remove类中设置option属性,-R 表示字段范围,1,2表示第1,2个属性不选择
Remove remove1=new Remove();
remove1.setOptions(new String[]{"-R","1,2"});
// 第二种方法,直接选择需要剔除的属性
Remove remove2=new Remove();
remove2.setAttributeIndices("3,4");
// 获取一份数据
Instances data=new Instances(new FileReader("data/weather.nominal.arff"));
// 显示原数据的容貌
System.out.println("原数据有:"+data.numAttributes()+"字段");
for(int i=0;i<data.numInstances();i++){
System.out.println(data.instance(i));
}
// remove1用一下
remove1.setInputFormat(data); //设置remove使用的数据格式,如果不设置会报 No input instance format define 的错误
Instances newdata=weka.filters.Filter.useFilter(data, remove1); // 应用remove
System.out.println("第一种方法,去除第1,2列后数据有:"+newdata.numAttributes()+"字段");
for(int i=0;i<newdata.numInstances();i++){
System.out.println(newdata.instance(i));
}
// remove2用一下
remove2.setInputFormat(data); //设置remove使用的数据格式,如果不设置会报 No input instance format define 的错误
newdata=weka.filters.Filter.useFilter(data, remove2); // 应用remove
System.out.println("第二种方法,去除3,4列后数据有:"+newdata.numAttributes()+"字段");
for(int i=0;i<newdata.numInstances();i++){
System.out.println(newdata.instance(i));
}
}
}
看一下结果: