Ignore:
Timestamp:
12/12/15 15:25:22 (9 years ago)
Author:
atrautsch
Message:

final attribute selection

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrossPare/src/de/ugoe/cs/cpdp/training/MetricMatchingTraining.java

    r47 r48  
    1 // Copyright 2015 Georg-August-Universität Göttingen, Germany 
     1// Copyright 2015 Georg-August-Universit�t G�ttingen, Germany 
    22// 
    33//   Licensed under the Apache License, Version 2.0 (the "License"); 
     
    8585                this.traindataSet = traindataSet; 
    8686 
    87                 int rank = 5; // we want at least 5 matching attributes 
     87                int rank = 0; // we want at least 5 matching attributes 
    8888                int num = 0; 
    8989                int biggest_num = 0; 
     
    9393                        num++; 
    9494                        tmp = new MetricMatch(traindata, testdata); 
    95                         //tmp.kolmogorovSmirnovTest(0.05); 
    96                          
     95 
     96                        // metric selection may create error, continue to next training set 
    9797                        try { 
    9898                                tmp.attributeSelection(); 
    9999                        }catch(Exception e) { 
    100                                  
     100                                e.printStackTrace(); 
     101                                throw new RuntimeException(e); 
    101102                        } 
    102103                         
     
    127128                this.mm = biggest; 
    128129                Instances ilist = this.mm.getMatchedTrain(); 
    129                 Console.traceln(Level.INFO, "Chosing the trainingdata set num "+biggest_num +" with " + rank + " matching attributs, " + ilist.size() + " instances out of a possible set of " + traindataSet.size() + " sets"); 
     130                Console.traceln(Level.INFO, "Chosing the trainingdata set num "+biggest_num +" with " + rank + " matching attributes, " + ilist.size() + " instances out of a possible set of " + traindataSet.size() + " sets"); 
    130131                 
    131132                // replace traindataSEt 
     
    206207                  
    207208                 public MetricMatch(Instances train, Instances test) { 
    208                          this.train = train; 
    209                          this.test = test; 
     209                         this.train = new Instances(train);  // expensive! but we are dropping the attributes 
     210                         this.test = new Instances(test); 
    210211                          
    211212                         // 1. convert metrics of testdata and traindata to later use in test 
     
    327328                 */ 
    328329                public void attributeSelection() throws Exception { 
     330                        //Console.traceln(Level.INFO, "Attribute Selection on Training Attributes ("+this.train.numAttributes()+")"); 
    329331                        this.attributeSelection(this.train); 
     332                        //Console.traceln(Level.INFO, "-----"); 
     333                        //Console.traceln(Level.INFO, "Attribute Selection on Test Attributes ("+this.test.numAttributes()+")"); 
    330334                        this.attributeSelection(this.test); 
     335                        //Console.traceln(Level.INFO, "-----"); 
    331336                } 
    332337                 
     
    338343                        et.buildEvaluator(which); 
    339344                        //double tmp[] = new double[this.train.numAttributes()]; 
    340                         HashMap<Integer,Double> saeval = new HashMap<Integer,Double>(); 
     345                        HashMap<String,Double> saeval = new HashMap<String,Double>(); 
    341346                        // evaluate all training attributes 
    342347                        // select top 15% of metrics 
    343                         for(int i=0; i < which.numAttributes() - 1; i++) {  
    344                                 //tmp[i] = et.evaluateAttribute(i); 
    345                                 saeval.put(i, et.evaluateAttribute(i)); 
     348                        for(int i=0; i < which.numAttributes(); i++) {  
     349                                if(which.classIndex() != i) { 
     350                                        saeval.put(which.attribute(i).name(), et.evaluateAttribute(i)); 
     351                                } 
    346352                                //Console.traceln(Level.SEVERE, "Significance Attribute Eval: " + tmp); 
    347353                        } 
    348354                         
    349                         HashMap<Integer, Double> sorted = sortByValues(saeval); 
     355                        HashMap<String, Double> sorted = sortByValues(saeval); 
    350356                         
    351357                        // die letzen 15% wollen wir haben 
    352                         int last = (saeval.size() / 100) * 15; 
    353                         int drop_first = saeval.size() - last; 
    354                          
    355                         // drop attributes above last 
     358                        float last = ((float)saeval.size() / 100) * 15; 
     359                        int drop_first = saeval.size() - (int)last; 
     360                         
     361                        //Console.traceln(Level.INFO, "Dropping "+ drop_first + " of " + sorted.size() + " attributes (we only keep the best 15% "+last+")"); 
     362                        /* 
    356363                        Iterator it = sorted.entrySet().iterator(); 
    357364                    while (it.hasNext()) { 
    358365                        Map.Entry pair = (Map.Entry)it.next(); 
    359                         if(drop_first > 0) { 
    360                                 which.deleteAttributeAt((int)pair.getKey()); 
    361                         } 
    362                         drop_first--; 
    363                     }    
    364                 } 
     366                        Console.traceln(Level.INFO, "key: "+(int)pair.getKey()+", value: " + (double)pair.getValue() + ""); 
     367                    }*/ 
     368                         
     369                        // drop attributes above last 
     370                        Iterator it = sorted.entrySet().iterator(); 
     371                    while (drop_first > 0) { 
     372                        Map.Entry pair = (Map.Entry)it.next(); 
     373                        if(which.attribute((String)pair.getKey()).index() != which.classIndex()) { 
     374                                 
     375                                which.deleteAttributeAt(which.attribute((String)pair.getKey()).index()); 
     376                                //Console.traceln(Level.INFO, "dropping attribute: "+ (String)pair.getKey()); 
     377                        } 
     378                        drop_first-=1; 
     379                  
     380                     
     381                    } 
     382//                  //Console.traceln(Level.INFO, "Now we have " + which.numAttributes() + " attributes left (incl. class attribute!)"); 
     383                } 
     384                 
    365385                 
    366386                private HashMap sortByValues(HashMap map) { 
    367387               List list = new LinkedList(map.entrySet()); 
    368                // Defined Custom Comparator here 
     388 
    369389               Collections.sort(list, new Comparator() { 
    370390                    public int compare(Object o1, Object o2) { 
     
    374394               }); 
    375395 
    376                // Here I am copying the sorted list in HashMap 
    377                // using LinkedHashMap to preserve the insertion order 
     396 
    378397               HashMap sortedHashMap = new LinkedHashMap(); 
    379398               for (Iterator it = list.iterator(); it.hasNext();) { 
Note: See TracChangeset for help on using the changeset viewer.