Ignore:
Timestamp:
07/18/16 12:26:03 (8 years ago)
Author:
sherbold
Message:
  • code documentation and formatting
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrossPare/src/de/ugoe/cs/cpdp/dataselection/CLIFF.java

    r120 r135  
    2828public class CLIFF implements IPointWiseDataselectionStrategy, ISetWiseDataselectionStrategy { 
    2929 
     30    /** 
     31     * percentage of data selected 
     32     */ 
    3033    private double percentage = 0.10; 
    31      
     34 
     35    /** 
     36     * number of ranges considered 
     37     */ 
    3238    private final int numRanges = 10; 
    3339 
     
    4046    @Override 
    4147    public void setParameter(String parameters) { 
    42         if( parameters!=null ) { 
     48        if (parameters != null) { 
    4349            percentage = Double.parseDouble(parameters); 
    4450        } 
    4551    } 
    46      
    47     /** 
     52 
     53    /* 
    4854     * @see de.ugoe.cs.cpdp.dataselection.SetWiseDataselectionStrategy#apply(weka.core.Instances, 
    49      *      org.apache.commons.collections4.list.SetUniqueList) 
     55     * org.apache.commons.collections4.list.SetUniqueList) 
    5056     */ 
    5157    @Override 
    5258    public void apply(Instances testdata, SetUniqueList<Instances> traindataSet) { 
    53         for( Instances traindata : traindataSet ) { 
     59        for (Instances traindata : traindataSet) { 
    5460            applyCLIFF(traindata); 
    5561        } 
    5662    } 
    5763 
    58     /** 
     64    /* 
    5965     * @see de.ugoe.cs.cpdp.dataselection.PointWiseDataselectionStrategy#apply(weka.core.Instances, 
    60      *      weka.core.Instances) 
     66     * weka.core.Instances) 
    6167     */ 
    6268    @Override 
     
    6571    } 
    6672 
     73    /** 
     74     * <p> 
     75     * Applies the CLIFF relevancy filter to the data. 
     76     * </p> 
     77     * 
     78     * @param data 
     79     *            the data 
     80     * @return CLIFF-filtered data 
     81     */ 
    6782    protected Instances applyCLIFF(Instances data) { 
    6883        final double[][] powerAttributes = new double[data.size()][data.numAttributes()]; 
    6984        final double[] powerEntity = new double[data.size()]; 
    70          
     85 
    7186        final int[] counts = data.attributeStats(data.classIndex()).nominalCounts; 
    7287        final double probDefect = data.numInstances() / (double) counts[1]; 
    73          
    74         for( int j=0; j<data.numAttributes(); j++ ) { 
    75             if( data.attribute(j)!=data.classAttribute()) { 
     88 
     89        for (int j = 0; j < data.numAttributes(); j++) { 
     90            if (data.attribute(j) != data.classAttribute()) { 
    7691                final double[] ranges = getRanges(data, j); 
    7792                final double[] probDefectRange = getRangeProbabilities(data, j, ranges); 
    78                  
    79                 for( int i=0 ; i<data.numInstances() ; i++ ) { 
     93 
     94                for (int i = 0; i < data.numInstances(); i++) { 
    8095                    final double value = data.instance(i).value(j); 
    8196                    final int range = determineRange(ranges, value); 
    8297                    double probClass, probNotClass, probRangeClass, probRangeNotClass; 
    83                     if( data.instance(i).classValue()==1 ) { 
     98                    if (data.instance(i).classValue() == 1) { 
    8499                        probClass = probDefect; 
    85                         probNotClass = 1.0-probDefect; 
     100                        probNotClass = 1.0 - probDefect; 
    86101                        probRangeClass = probDefectRange[range]; 
    87                         probRangeNotClass = 1.0-probDefectRange[range]; 
    88                     } else { 
    89                         probClass = 1.0-probDefect; 
     102                        probRangeNotClass = 1.0 - probDefectRange[range]; 
     103                    } 
     104                    else { 
     105                        probClass = 1.0 - probDefect; 
    90106                        probNotClass = probDefect; 
    91                         probRangeClass = 1.0-probDefectRange[range]; 
     107                        probRangeClass = 1.0 - probDefectRange[range]; 
    92108                        probRangeNotClass = probDefectRange[range]; 
    93109                    } 
    94                     powerAttributes[i][j] = Math.pow(probRangeClass, 2.0)/(probRangeClass*probClass+probRangeNotClass*probNotClass); 
     110                    powerAttributes[i][j] = Math.pow(probRangeClass, 2.0) / 
     111                        (probRangeClass * probClass + probRangeNotClass * probNotClass); 
    95112                } 
    96113            } 
    97114        } 
    98          
    99         for( int i=0; i<data.numInstances(); i++ ) { 
     115 
     116        for (int i = 0; i < data.numInstances(); i++) { 
    100117            powerEntity[i] = 1.0; 
    101             for (int j=0; j<data.numAttributes() ; j++ ) { 
     118            for (int j = 0; j < data.numAttributes(); j++) { 
    102119                powerEntity[i] *= powerAttributes[i][j]; 
    103120            } 
     
    105122        double[] sortedPower = powerEntity.clone(); 
    106123        Arrays.sort(sortedPower); 
    107         double cutOff = sortedPower[(int) (data.numInstances()*(1-percentage))]; 
     124        double cutOff = sortedPower[(int) (data.numInstances() * (1 - percentage))]; 
    108125 
    109126        final Instances selected = new Instances(data); 
    110127        selected.delete(); 
    111         for (int i=0; i<data.numInstances(); i++) { 
    112             if( powerEntity[i]>=cutOff ) { 
     128        for (int i = 0; i < data.numInstances(); i++) { 
     129            if (powerEntity[i] >= cutOff) { 
    113130                selected.add(data.instance(i)); 
    114131            } 
     
    116133        return selected; 
    117134    } 
    118      
     135 
     136    /** 
     137     * <p> 
     138     * Gets an array with the ranges from the data for a given attribute 
     139     * </p> 
     140     * 
     141     * @param data 
     142     *            the data 
     143     * @param j 
     144     *            index of the attribute 
     145     * @return the ranges for the attribute 
     146     */ 
    119147    private double[] getRanges(Instances data, int j) { 
    120         double[] values = new double[numRanges+1]; 
    121         for( int k=0; k<numRanges; k++ ) { 
    122             values[k] = data.kthSmallestValue(j, (int) (data.size()*(k+1.0)/numRanges)); 
     148        double[] values = new double[numRanges + 1]; 
     149        for (int k = 0; k < numRanges; k++) { 
     150            values[k] = data.kthSmallestValue(j, (int) (data.size() * (k + 1.0) / numRanges)); 
    123151        } 
    124152        values[numRanges] = data.attributeStats(j).numericStats.max; 
    125153        return values; 
    126154    } 
    127      
     155 
     156    /** 
     157     * <p> 
     158     * Gets the probabilities of a positive prediction for each range for a given attribute 
     159     * </p> 
     160     * 
     161     * @param data 
     162     *            the data 
     163     * @param j 
     164     *            index of the attribute 
     165     * @param ranges 
     166     *            the ranges 
     167     * @return probabilities for each range 
     168     */ 
    128169    private double[] getRangeProbabilities(Instances data, int j, double[] ranges) { 
    129170        double[] probDefectRange = new double[numRanges]; 
    130171        int[] countRange = new int[numRanges]; 
    131172        int[] countDefect = new int[numRanges]; 
    132         for( int i=0; i<data.numInstances() ; i++ ) { 
    133             int range = determineRange(ranges, data.instance(i).value(j));  
     173        for (int i = 0; i < data.numInstances(); i++) { 
     174            int range = determineRange(ranges, data.instance(i).value(j)); 
    134175            countRange[range]++; 
    135             if( data.instance(i).classValue()== 1 ) { 
     176            if (data.instance(i).classValue() == 1) { 
    136177                countDefect[range]++; 
    137178            } 
    138179 
    139180        } 
    140         for( int k=0; k<numRanges; k++ ) { 
     181        for (int k = 0; k < numRanges; k++) { 
    141182            probDefectRange[k] = ((double) countDefect[k]) / countRange[k]; 
    142183        } 
    143184        return probDefectRange; 
    144185    } 
    145      
     186 
     187    /** 
     188     * <p> 
     189     * Determines the range of a give value 
     190     * </p> 
     191     * 
     192     * @param ranges 
     193     *            the possible ranges 
     194     * @param value 
     195     *            the value 
     196     * @return index of the range 
     197     */ 
    146198    private int determineRange(double[] ranges, double value) { 
    147         for( int k=0; k<numRanges; k++ ) { 
    148             if( value<=ranges[k+1] ) { 
     199        for (int k = 0; k < numRanges; k++) { 
     200            if (value <= ranges[k + 1]) { 
    149201                return k; 
    150202            } 
Note: See TracChangeset for help on using the changeset viewer.