• 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();

        }

     

    }

  • 相关阅读:
    致21岁的自己
    nginx 入门实战
    软件测试的分类
    Springboot 使用 Jedis
    NodeJS模块、包、NPM
    NodeJS介绍
    毫秒必争,前端网页性能最佳实践--转载
    IT主要在线学习网站
    电商峰值系统架构设计--转载
    查看w3wp进程占用的内存及.NET内存泄露,死锁分析--转载
  • 原文地址:https://www.cnblogs.com/94julia/p/4619204.html
Copyright © 2020-2023  润新知