Changeset 40


Ignore:
Timestamp:
09/17/15 13:46:16 (9 years ago)
Author:
atrautsch
Message:

logarithmtransform -1*value bei negativen Wwerten, MedianAsReference? an Camargo Cruz Paper angepasst

Location:
trunk/CrossPare/src/de/ugoe/cs/cpdp/dataprocessing
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrossPare/src/de/ugoe/cs/cpdp/dataprocessing/LogarithmTransform.java

    r2 r40  
    3535                        Instance instance = testdata.instance(i); 
    3636                        for( int j=0 ; j<testdata.numAttributes() ; j++ ) { 
    37                                 if( testdata.attribute(j)!=classAttribute ) { 
    38                                         instance.setValue(j, Math.log(1+instance.value(j))); 
     37                                if( testdata.attribute(j)!=classAttribute && testdata.attribute(j).isNumeric() ) { 
     38                                        if( instance.value(j) < 0 ) { 
     39                                                instance.setValue(j, (-1*(Math.log(-1*instance.value(j))))); 
     40                                        }else { 
     41                                                instance.setValue(j, Math.log(1+instance.value(j))); 
     42                                        } 
    3943                                } 
    4044                        } 
     
    4650                                Instance instance = traindata.instance(i); 
    4751                                for( int j=0 ; j<testdata.numAttributes() ; j++ ) { 
    48                                         if( testdata.attribute(j)!=classAttribute ) { 
    49                                                 instance.setValue(j, Math.log(1+instance.value(j))); 
     52                                        if( traindata.attribute(j)!=classAttribute && traindata.attribute(j).isNumeric() ) { 
     53                                                if( instance.value(j) < 0 ) { 
     54                                                        instance.setValue(j, (-1*(Math.log(-1*instance.value(j))))); 
     55                                                }else { 
     56                                                        instance.setValue(j, Math.log(1+instance.value(j))); 
     57                                                } 
    5058                                        } 
    5159                                } 
     
    6573                        Instance instance = testdata.instance(i); 
    6674                        for( int j=0 ; j<testdata.numAttributes() ; j++ ) { 
    67                                 if( testdata.attribute(j)!=classAttribute ) { 
    68                                         instance.setValue(j, Math.log(1+instance.value(j))); 
     75                                if( testdata.attribute(j)!=classAttribute && testdata.attribute(j).isNumeric() ) { 
     76                                        if( instance.value(j) < 0 ) { 
     77                                                instance.setValue(j, (-1*(Math.log(-1*instance.value(j))))); 
     78                                        }else { 
     79                                                instance.setValue(j, Math.log(1+instance.value(j))); 
     80                                        } 
    6981                                } 
    7082                        } 
     
    7587                        Instance instance = traindata.instance(i); 
    7688                        for( int j=0 ; j<testdata.numAttributes() ; j++ ) { 
    77                                 if( testdata.attribute(j)!=classAttribute ) { 
    78                                         instance.setValue(j, Math.log(1+instance.value(j))); 
     89                                if( traindata.attribute(j)!=classAttribute && traindata.attribute(j).isNumeric() ) { 
     90                                        if( instance.value(j) < 0 ) { 
     91                                                instance.setValue(j, (-1*(Math.log(-1*instance.value(j))))); 
     92                                        }else { 
     93                                                instance.setValue(j, Math.log(1+instance.value(j))); 
     94                                        } 
    7995                                } 
    8096                        } 
  • trunk/CrossPare/src/de/ugoe/cs/cpdp/dataprocessing/MedianAsReference.java

    r2 r40  
    1010 * Median as reference transformation after Carmargo Cruz and Ochimizu: Towards Logistic Regression Models for Predicting Fault-prone Code across Software Projects 
    1111 * <br><br> 
    12  * For each attribute value x, the new value is x-median of the test data 
     12 * For each attribute value x, the new value is x + (median of the test data - median of the current project) 
    1313 * @author Steffen Herbold 
    1414 */ 
     
    3030        public void apply(Instances testdata, SetUniqueList<Instances> traindataSet) { 
    3131                final Attribute classAttribute = testdata.classAttribute(); 
     32                final double[] median = new double[testdata.numAttributes()]; 
    3233                 
    33                 final double[] median = new double[testdata.numAttributes()]; 
     34                // test and train have the same number of attributes 
     35                Attribute traindataClassAttribute; 
     36                double[] currentmedian = new double[testdata.numAttributes()]; 
    3437                 
    3538                // get medians 
     
    4043                } 
    4144                 
    42                 // update testdata 
    43                 for( int i=0 ; i<testdata.numInstances() ; i++ ) { 
    44                         Instance instance = testdata.instance(i); 
    45                         for( int j=0 ; j<testdata.numAttributes() ; j++ ) { 
    46                                 if( testdata.attribute(j)!=classAttribute ) { 
    47                                         instance.setValue(j, instance.value(j)-median[j]); 
     45                // preprocess training data 
     46                for( Instances traindata : traindataSet ) { 
     47                        // get median of current training set  
     48                        traindataClassAttribute = traindata.classAttribute(); 
     49                        for( int j=0 ; j<traindata.numAttributes() ; j++ ) { 
     50                                if( traindata.attribute(j)!=traindataClassAttribute && traindata.attribute(j).isNumeric()) { 
     51                                        currentmedian[j] = traindata.kthSmallestValue(j, (traindata.numInstances()+1)>>1); // (>>2 -> /2) 
    4852                                } 
    4953                        } 
    50                 } 
    51                  
    52                 // preprocess training data 
    53                 for( Instances traindata : traindataSet ) { 
    5454                        for( int i=0 ; i<traindata.numInstances() ; i++ ) { 
    5555                                Instance instance = traindata.instance(i); 
    56                                 for( int j=0 ; j<testdata.numAttributes() ; j++ ) { 
    57                                         if( testdata.attribute(j)!=classAttribute ) { 
    58                                                 instance.setValue(j, instance.value(j)-median[j]); 
     56                                for( int j=0 ; j<traindata.numAttributes() ; j++ ) { 
     57                                        if( traindata.attribute(j)!=classAttribute && traindata.attribute(j).isNumeric() ) { 
     58                                                instance.setValue(j, instance.value(j) + (median[j] - currentmedian[j])); 
    5959                                        } 
    6060                                } 
     
    6969        public void apply(Instances testdata, Instances traindata) { 
    7070                final Attribute classAttribute = testdata.classAttribute(); 
    71                  
     71                final Attribute traindataClassAttribute = traindata.classAttribute(); 
    7272                final double[] median = new double[testdata.numAttributes()]; 
     73 
     74                // test and train have the same number of attributes 
     75                double[] currentmedian = new double[testdata.numAttributes()]; 
    7376                 
    7477                // get medians 
     
    7881                        } 
    7982                } 
    80                  
    81                 // update testdata 
    82                 for( int i=0 ; i<testdata.numInstances() ; i++ ) { 
    83                         Instance instance = testdata.instance(i); 
    84                         for( int j=0 ; j<testdata.numAttributes() ; j++ ) { 
    85                                 if( testdata.attribute(j)!=classAttribute ) { 
    86                                         instance.setValue(j, instance.value(j)-median[j]); 
    87                                 } 
     83 
     84                // get median of current training set  
     85                for( int j=0 ; j<traindata.numAttributes() ; j++ ) { 
     86                        if( traindata.attribute(j)!=traindataClassAttribute && traindata.attribute(j).isNumeric() ) { 
     87                                currentmedian[j] = traindata.kthSmallestValue(j, (traindata.numInstances()+1)>>1); // (>>2 -> /2) 
    8888                        } 
    8989                } 
     
    9292                for( int i=0 ; i<traindata.numInstances() ; i++ ) { 
    9393                        Instance instance = traindata.instance(i); 
    94                         for( int j=0 ; j<testdata.numAttributes() ; j++ ) { 
    95                                 if( testdata.attribute(j)!=classAttribute ) { 
    96                                         instance.setValue(j, instance.value(j)-median[j]); 
     94                        for( int j=0 ; j<traindata.numAttributes() ; j++ ) { 
     95                                if( traindata.attribute(j)!=classAttribute  && traindata.attribute(j).isNumeric() ) { 
     96                                        instance.setValue(j, instance.value(j) + (median[j] - currentmedian[j])); 
    9797                                } 
    9898                        } 
Note: See TracChangeset for help on using the changeset viewer.