zoukankan      html  css  js  c++  java
  • Weka开发[4]-特征选择

     特征选择,我对这一部分也不熟,大概讲一下,用AttributeSelection进行特征选择,它需要设置3个方面,第一:对属性评价的类(自己到Weka软件里看一下,英文Attribute Evaluator),第二:搜索的方式(自己到Weka软件里看一下,英文Search Method),第三:就是你要进行特征选择的数据集了。最后调用Filter的静态方法userFilter,感觉写的都是废话,一看代码就明白了。唯一值得一说的也就是别把AttributeSelection的包加错了,代码旁边有注释。

           另一个函数懒的解释了(它也不是我写的),基本上是自解释的,不太可能看不懂。

     

    package instanceTest;

     

    import java.io.FileReader;

    import java.util.Random;

     

    import weka.attributeSelection.CfsSubsetEval;

    import weka.attributeSelection.GreedyStepwise;

    import weka.classifiers.Evaluation;

    import weka.classifiers.meta.AttributeSelectedClassifier;

    import weka.classifiers.trees.J48;

    import weka.core.Instances;

    import weka.filters.Filter;

    import weka.filters.supervised.attribute.AttributeSelection;

     

    public class FilterTest

    {

        private Instances m_instances = null;

       

        public void getFileInstances( String fileName ) throws Exception

        {

            FileReader frData = new FileReader( fileName );

            m_instances = new Instances( frData );

           

            m_instances.setClassIndex( m_instances.numAttributes() - 1 );

        }

       

        public void selectAttUseFilter() throws Exception

        {

            AttributeSelection filter = new AttributeSelection();  // package weka.filters.supervised.attribute!

            CfsSubsetEval eval = new CfsSubsetEval();

            GreedyStepwise search = new GreedyStepwise();

            filter.setEvaluator(eval);

            filter.setSearch(search);

            filter.setInputFormat( m_instances );

           

            System.out.println( "number of instance attribute = " +m_instances.numAttributes() );

           

            Instances selectedIns = Filter.useFilterm_instances, filter);

            System.out.println( "number of selected instance attribute = " + selectedIns.numAttributes() );

        }

       

        public void selectAttUseMC() throws Exception

        {  

             AttributeSelectedClassifier classifier = newAttributeSelectedClassifier();

             CfsSubsetEval eval = new CfsSubsetEval();

             GreedyStepwise search = new GreedyStepwise();

             J48 base = new J48();

             classifier.setClassifier( base );

             classifier.setEvaluator( eval );

             classifier.setSearch( search );

             // 10-fold cross-validation

             Evaluation evaluation = new Evaluation( m_instances );

             evaluation.crossValidateModel(classifier, m_instances, 10, newRandom(1));

             System.out.println( evaluation.toSummaryString() );

        }

       

        public static void main( String[] args ) throws Exception

        {

            FilterTest filter = new FilterTest();

           

            filter.getFileInstances( "F://Program Files//Weka-3-4//data//soybean.arff");

            filter.selectAttUseFilter();

           

            filter.selectAttUseMC();

        }

     

    }

  • 相关阅读:
    JAVA_SWT 事件的四种写法
    JAVA静态数据的初始化;
    Centos 安装freesurfer fsl matlab 等软件---转自网络
    ROC和AUC————摘在网络
    转自网络用LIBSVM进行回归预测的粗浅认识————————作者师梦
    fmri格式相关简介————转自网络
    fMRI数据分析处理原理及方法————转自网络
    装机、做系统必备:秒懂MBR和GPT分区表____转载网络
    【转】Thymeleaf自动在URL后加了;jsessionid=的问题
    LeetCode (85): Maximal Rectangle [含84题分析]
  • 原文地址:https://www.cnblogs.com/94julia/p/4619204.html
Copyright © 2011-2022 走看看