Weka-无监督属性过滤器-AddExpression MathExpression

AddExpression过滤器是通过将一个数学函数应用于数值型属性而生成1个新的属性。

其中,可以支持+、-、*、/、和^,函数log、abs、cos、exp、sqrt、floor、ceil、rint、tan、sin,属性通过索引加前缀a确定,例如a7表示第7个属性;


MathExpression过滤器与AddExpression过滤器类似,该过滤器只是修改现有属性,不创建新属性。所以,该表达式不能引用其他属性的值。

所有AddExpression过滤器的操作符都可以用,还包括属性的最大值、最小值、平均值、和、平方和、标准差。


具体差异看代码:

[java]  view plain  copy
  1. import java.io.BufferedReader;  
  2. import java.io.FileReader;  
  3. import java.io.IOException;  
  4.   
  5. import weka.core.Instances;  
  6. import weka.filters.unsupervised.attribute.AddExpression;  
  7. import weka.filters.unsupervised.attribute.MathExpression;  
  8.   
  9. public class Expression_test {  
  10.   
  11.     public static void main(String[] args) throws IOException, Exception {  
  12.         // 读入数据  
  13.         Instances data=new Instances(new BufferedReader  
  14.                 (new FileReader("data\\weather.numeric.arff")));  
  15.         System.out.println("===========原始数据============");  
  16.         for(int i=0;i<data.numInstances();i++)  
  17.             System.out.println(data.instance(i));  
  18.         System.out.println();  
  19.         System.out.println("=======AddExpression:sqrt(a2^2*a3/log(a2*4.0))===");  
  20.           
  21.         // 1,选择AddExpression类,设置实例的参数  
  22.         AddExpression addexp=new AddExpression();  
  23.         /* 
  24.          *  AddExpression类是新建属性的 
  25.          * -E 表示 输入的公式 
  26.          * -N 表示新建属性的属性名 
  27.          */  
  28.         addexp.setOptions(new String[]{"-E","sqrt(a2^2*a3/log(a2*4.0))","-N","exp"});  
  29.         addexp.setInputFormat(data);  
  30.         Instances newdata=weka.filters.Filter.useFilter(data, addexp);  
  31.           
  32.         for(int i=0;i<newdata.numInstances();i++)  
  33.             System.out.println(newdata.instance(i));  
  34.         System.out.println();  
  35.         System.out.println("=======AddExpression:(A-MIN)/(MAX-MIN)===");  
  36.           
  37.           
  38.         // 2,选择MathExpression类,设置实例的参数  
  39.         MathExpression mathexp=new MathExpression();  
  40.         /* 
  41.          *  MathExpression类是直接改原字段的,全部数值字段都会被转换 
  42.          * -E 表示 输入的公式 
  43.          *  A 表示当前使用的列 
  44.          *  MAX 表示当前使用的列的最大值 
  45.          *  A2 表示第二列 
  46.          */  
  47.         mathexp.setOptions(new String[]{"-E","(A-MIN)/(MAX-MIN)"});  
  48.         mathexp.setInputFormat(data);  
  49.         newdata=weka.filters.Filter.useFilter(data, mathexp);  
  50.           
  51.         for(int i=0;i<newdata.numInstances();i++)  
  52.             System.out.println(newdata.instance(i));  
  53.         System.out.println();  
  54.         System.out.println("========MathExpression:A2-MIN=========");     
  55.           
  56.         // 3,选择MathExpression类,继续试验公式输入  
  57.         mathexp.setOptions(new String[]{"-E","A2-MIN"});  
  58.         /* 
  59.          *  A2  表示第2个字段列 
  60.          *  MIN 表示当前使用的列的最大值(必须大写) 
  61.          *  含义为:每列都以 A2去减去该列最小值 计算 
  62.          *  比如:第2列最小值为64,第三列最小值为65,那么第3列计算替换的方法为使用A2-min(A3) 
  63.          *  注:这个方法只有3.6weka以前版本没有 
  64.          */  
  65.         mathexp.setInputFormat(data);  
  66.         newdata=weka.filters.Filter.useFilter(data, mathexp);  
  67.           
  68.         for(int i=0;i<newdata.numInstances();i++)  
  69.             System.out.println(newdata.instance(i));  
  70.     }  
  71.   
  72. }  






  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值