Weka-filter类-选择样本[5]

来源:互联网 发布:exe软件重新编译 编辑:程序博客网 时间:2024/06/05 20:27

目前有3个方法可以研究下:RemovePercentage,RemoveRange,RemoveWithValues


RemovePercentage:顾名思义,根据百分比选择样本

RemoveRange:根据序号选择样本

RemoveWithValues:根据某字段的设定值选择样本


然后,为减少文章重复的内容,我们先看这几个方法的不同的构造函数部分:

(1)RemovePercentage 

[java] view plain copy
  1. // 第一种方法,在remove类中设置option属性,-P 表示记录百分比,45表示前45%(6条)不选择  
  2. RemovePercentage remove1=new RemovePercentage();  
  3. remove1.setOptions(new String[]{"-P","45"});  
  4.               
  5. // 第二种方法,直接选择需要剔除的属性  
  6. RemovePercentage remove2=new RemovePercentage();  
  7. remove2.setPercentage(80);  


(2)RemoveRange

[java] view plain copy
  1. // 第一种方法,在remove类中设置option属性,-R 表示记录范围,1,5表示第1-5个记录不选择  
  2. RemoveRange remove1=new RemoveRange();  
  3. remove1.setOptions(new String[]{"-R","1,3-10"});  
  4.               
  5. // 第二种方法,直接选择需要剔除的属性  
  6. RemoveRange remove2=new RemoveRange();  
  7. remove2.setInstancesIndices("1,3-5");  


(3)RemoveWithValues(仅适用于数值型变量,名义型变量需使用其他方法)

[java] view plain copy
  1. // RemoveWithValues类,根据 字段属性的值 选择 样本记录  
  2. // 第一种方法,在remove类中设置option属性,-C 表示作用的字段列,2表示第2属性          
  3. RemoveWithValues remove1=new RemoveWithValues();  
  4. remove1.setOptions(new String[]{"-C","2","-S","80"});  
  5.               
  6. // 第二种方法,直接选择需要剔除的属性  
  7. RemoveWithValues remove2=new RemoveWithValues();  
  8. remove2.setAttributeIndex("2");  
  9. remove2.setSplitPoint(75);  


学习了如何使用这3种方法后,我们选择RemoveWithValues方法来演示,完整代码:


[java] view plain copy
  1. import java.io.FileReader;  
  2.   
  3. import weka.core.Instances;  
  4. import weka.filters.unsupervised.instance.RemoveWithValues;  
  5.   
  6. public class Filter4 {  
  7.   
  8.     public static void main(String[] args) throws Exception {  
  9.         // RemoveWithValues类,根据 字段属性的值 选择 样本记录  
  10.         // 第一种方法,在remove类中设置option属性,-C 表示作用的字段列,2表示第2属性          
  11.         RemoveWithValues remove1=new RemoveWithValues();  
  12.         remove1.setOptions(new String[]{"-C","2","-S","80"});  
  13.                   
  14.         // 第二种方法,直接选择需要剔除的属性  
  15.         RemoveWithValues remove2=new RemoveWithValues();  
  16.         remove2.setAttributeIndex("2");  
  17.         remove2.setSplitPoint(75);  
  18.                   
  19.         // 获取一份数据  
  20.         Instances data=new Instances(new FileReader("data/weather.numeric.arff"));  
  21.                   
  22.         // 显示原数据的容貌  
  23.         System.out.println("原数据有:"+data.numInstances()+"记录");  
  24.         for(int i=0;i<data.numInstances();i++){  
  25.             System.out.println(data.instance(i));  
  26.         }  
  27.           
  28.         System.out.println("================================");  
  29.           
  30.         // remove1用一下  
  31.         remove1.setInputFormat(data); // 设置remove使用的数据格式,如果不设置会报 No input instance format define 的错误  
  32.         Instances newdata=weka.filters.Filter.useFilter(data, remove1); // 应用remove  
  33.         System.out.println("第一种方法,根据第2列剔除小于80的样本,剩余"+newdata.numInstances()+"记录");  
  34.         for(int i=0;i<newdata.numInstances();i++){  
  35.             System.out.println(newdata.instance(i));  
  36.         }  
  37.           
  38.         remove1.setInvertSelection(true); // 选择未选择(另一部分)的样本  
  39.         remove1.setInputFormat(data);  
  40.         newdata=weka.filters.Filter.useFilter(data, remove1);  
  41.         System.out.println("未选择的数据有:"+newdata.numInstances()+"记录");  
  42.         for(int i=0;i<newdata.numInstances();i++){  
  43.             System.out.println(newdata.instance(i));  
  44.         }  
  45.           
  46.         System.out.println("================================");  
  47.                   
  48.         // remove2用一下  
  49.         remove2.setInputFormat(data); //设置remove使用的数据格式,如果不设置会报 No input instance format define 的错误  
  50.         newdata=weka.filters.Filter.useFilter(data, remove2); // 应用remove  
  51.         System.out.println("第二种方法,根据第2列剔除小于75的样本,剩余"+newdata.numInstances()+"记录");  
  52.         for(int i=0;i<newdata.numInstances();i++){  
  53.             System.out.println(newdata.instance(i));  
  54.         }         
  55.     }  
  56. }  


结果如图:






0 0
原创粉丝点击