source: trunk/CrossPare/src/de/ugoe/cs/cpdp/dataprocessing/MedianAsReference.java @ 23

Last change on this file since 23 was 2, checked in by sherbold, 10 years ago
  • initial commit
  • Property svn:mime-type set to text/plain
File size: 3.2 KB
Line 
1package de.ugoe.cs.cpdp.dataprocessing;
2
3import org.apache.commons.collections4.list.SetUniqueList;
4
5import weka.core.Attribute;
6import weka.core.Instance;
7import weka.core.Instances;
8
9/**
10 * Median as reference transformation after Carmargo Cruz and Ochimizu: Towards Logistic Regression Models for Predicting Fault-prone Code across Software Projects
11 * <br><br>
12 * For each attribute value x, the new value is x-median of the test data
13 * @author Steffen Herbold
14 */
15public class MedianAsReference implements ISetWiseProcessingStrategy, IProcessesingStrategy {
16
17        /**
18         * Does not have parameters. String is ignored.
19         * @param parameters ignored
20         */
21        @Override
22        public void setParameter(String parameters) {
23                // dummy
24        }
25
26        /**
27         * @see de.ugoe.cs.cpdp.dataprocessing.SetWiseProcessingStrategy#apply(weka.core.Instances, org.apache.commons.collections4.list.SetUniqueList)
28         */
29        @Override
30        public void apply(Instances testdata, SetUniqueList<Instances> traindataSet) {
31                final Attribute classAttribute = testdata.classAttribute();
32               
33                final double[] median = new double[testdata.numAttributes()];
34               
35                // get medians
36                for( int j=0 ; j<testdata.numAttributes() ; j++ ) {
37                        if( testdata.attribute(j)!=classAttribute ) {
38                                median[j] = testdata.kthSmallestValue(j, (testdata.numInstances()+1)>>1); // (>>2 -> /2)
39                        }
40                }
41               
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]);
48                                }
49                        }
50                }
51               
52                // preprocess training data
53                for( Instances traindata : traindataSet ) {
54                        for( int i=0 ; i<traindata.numInstances() ; i++ ) {
55                                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]);
59                                        }
60                                }
61                        }
62                }
63        }
64
65        /**
66         * @see de.ugoe.cs.cpdp.dataprocessing.ProcessesingStrategy#apply(weka.core.Instances, weka.core.Instances)
67         */
68        @Override
69        public void apply(Instances testdata, Instances traindata) {
70                final Attribute classAttribute = testdata.classAttribute();
71               
72                final double[] median = new double[testdata.numAttributes()];
73               
74                // get medians
75                for( int j=0 ; j<testdata.numAttributes() ; j++ ) {
76                        if( testdata.attribute(j)!=classAttribute ) {
77                                median[j] = testdata.kthSmallestValue(j, (testdata.numInstances()+1)>>1); // (>>2 -> /2)
78                        }
79                }
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                                }
88                        }
89                }
90               
91                // preprocess training data
92                for( int i=0 ; i<traindata.numInstances() ; i++ ) {
93                        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]);
97                                }
98                        }
99                }
100        }
101
102}
Note: See TracBrowser for help on using the repository browser.