织梦CMS - 轻松建站从此开始!

罗索

Weka学习四(属性选择)

落鹤生 发布于 2013-04-11 10:08 点击:次 
在数据挖掘的研究中,通常要通过距离来计算样本之间的距离,而样本距离是通过属性值来计算的。我们知道对于不同的属性,它们在样 本空间的权重是不一样的,即它们与类别的关联度是不同的,因此有必要筛选一些属性或者对各个属性赋一定的权重。这样属性选择的方法就应运
TAG:

在 这一节我们看看属性选择。在数据挖掘的研究中,通常要通过距离来计算样本之间的距离,而样本距离是通过属性值来计算的。我们知道对于不同的属性,它们在样 本空间的权重是不一样的,即它们与类别的关联度是不同的,因此有必要筛选一些属性或者对各个属性赋一定的权重。这样属性选择的方法就应运而生了。

在属性选择方面InfoGain和GainRatio的比较常见,也是最通俗易懂的方法。它们与Decision Tree的构造原理比较相似,哪个节点拥有的信息量就为哪个节点赋较高的权重。其它的还有根据关联度的办法来进行属性选择(Correlation-based Feature Subset Selection for Machine Learning)。具体它的工作原理大家可以在网上看论文。

现在我将简单的属性选择实例给大家展示一下:

  1. package com.csdn; 
  2. import java.io.File; 
  3. import weka.attributeSelection.InfoGainAttributeEval; 
  4. import weka.attributeSelection.Ranker; 
  5. import weka.classifiers.Classifier; 
  6. import weka.core.Instances; 
  7. import weka.core.converters.ArffLoader; 
  8. public class SimpleAttributeSelection { 
  9.     /** 
  10.      * @param args 
  11.      */ 
  12.     public static void main(String[] args) { 
  13.        // TODO Auto-generated method stub 
  14.        Instances trainIns = null
  15.        try
  16.            /* 
  17.             * 1.读入训练 
  18.             * 在此我们将训练样本和测试样本是由weka提供的segment数据集构成的 
  19.             */ 
  20. File file= new File("C://Program Files//Weka-3-6//data//segment-challenge.arff"); 
  21. ArffLoader loader = new ArffLoader(); 
  22. loader.setFile(file); 
  23. trainIns = loader.getDataSet(); 
  24. //在使用样本之前一定要首先设置instances的classIndex,否则在使用instances对象是会抛出异常 
  25.            trainIns.setClassIndex(trainIns.numAttributes()-1); 
  26.            /* 
  27.             * 2.初始化搜索算法(search method)及属性评测算法(attribute evaluator) 
  28.             */ 
  29.            Ranker rank = new Ranker(); 
  30.            InfoGainAttributeEval eval = new InfoGainAttributeEval(); 
  31.            /* 
  32.             * 3.根据评测算法评测各个属性 
  33.             */ 
  34.            eval.buildEvaluator(trainIns); 
  35.            //System.out.println(rank.search(eval, trainIns)); 
  36.            /* 
  37.             * 4.按照特定搜索算法对属性进行筛选 
  38.             * 在这里使用的Ranker算法仅仅是属性按照InfoGain的大小进行排序 
  39.             */ 
  40.            int[] attrIndex = rank.search(eval, trainIns); 
  41.            /* 
  42.             * 5.打印结果信息 
  43.             * 在这里我们了属性的排序结果同时将每个属性的InfoGain信息打印出来 
  44.             */ 
  45.            StringBuffer attrIndexInfo = new StringBuffer(); 
  46.            StringBuffer attrInfoGainInfo = new StringBuffer(); 
  47.            attrIndexInfo.append("Selected attributes:"); 
  48.            attrInfoGainInfo.append("Ranked attributes:/n"); 
  49.            for(int i = 0; i < attrIndex.length; i ++){ 
  50.               attrIndexInfo.append(attrIndex[i]); 
  51.               attrIndexInfo.append(","); 
  52.     attrInfoGainInfo.append(eval.evaluateAttribute(attrIndex[i])); 
  53.               attrInfoGainInfo.append("/t"); 
  54. attrInfoGainInfo.append((trainIns.attribute(attrIndex[i]).name())); 
  55.               attrInfoGainInfo.append("/n"); 
  56.            } 
  57.            System.out.println(attrIndexInfo.toString()); 
  58.            System.out.println(attrInfoGainInfo.toString()); 
  59.        }catch(Exception e){ 
  60.            e.printStackTrace(); 
  61.        } 
  62.     } 

在这个实例中,我用了InfoGain的属性选择类来进行特征选择。InfoGainAttributeEval主要是计算出各个属性的InfoGain信息。同时在weka中为属性选择方法配备的有搜索算法(seacher method),在这里我们用最简单的Ranker类。它对属性进行了简单的排序。在Weka中我们还可以对搜索算法设置一些其它的属性,例如设置搜索的属性集,阈值等等,如果有需求大家可以进行详细的设置。

在最后我们打印了一些结果信息,打印了各个属性的InfoGain的信息。

(anqiang1984)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201304/16582.html]
本文出处:CSDN博客 作者:anqiang1984 原文
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容