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/dataprocessing/MORPH.java

    r120 r135  
    2525 
    2626/** 
    27  * Implements the MORPH data privatization.  
     27 * Implements the MORPH data privatization. 
    2828 *  
    2929 *  
     
    3636     */ 
    3737    Random rand = new Random(); 
    38      
     38 
    3939    /** 
    4040     * parameter alpha for MORPH, default is 0.15 
    4141     */ 
    4242    double alpha = 0.15; 
    43      
     43 
    4444    /** 
    4545     * parameter beta for MORPH, default is 0.35 
    4646     */ 
    4747    double beta = 0.35; 
    48      
     48 
    4949    /** 
    5050     * Does not have parameters. String is ignored. 
     
    5757        if (parameters != null && !parameters.equals("")) { 
    5858            String[] values = parameters.split(" "); 
    59             if( values.length!=2 ) { 
     59            if (values.length != 2) { 
    6060                throw new InvalidParameterException("MORPH requires two doubles as parameter or no parameters to use default values"); 
    6161            } 
     
    6363                alpha = Double.parseDouble(values[0]); 
    6464                beta = Double.parseDouble(values[1]); 
    65             } catch(NumberFormatException e) { 
     65            } 
     66            catch (NumberFormatException e) { 
    6667                throw new InvalidParameterException("MORPH requires two doubles as parameter or no parameters to use default values"); 
    6768            } 
     
    7576    @Override 
    7677    public void apply(Instances testdata, SetUniqueList<Instances> traindataSet) { 
    77         for( Instances traindata : traindataSet ) { 
     78        for (Instances traindata : traindataSet) { 
    7879            applyMORPH(traindata); 
    7980        } 
     
    8889        applyMORPH(traindata); 
    8990    } 
    90      
     91 
    9192    /** 
    9293     *  
     
    9596     * </p> 
    9697     * 
    97      * @param data data to which the processor is applied 
     98     * @param data 
     99     *            data to which the processor is applied 
    98100     */ 
    99101    public void applyMORPH(Instances data) { 
    100         for (int i=0; i<data.numInstances(); i++ ) { 
     102        for (int i = 0; i < data.numInstances(); i++) { 
    101103            morphInstance(data.get(i), data); 
    102104        } 
    103105    } 
    104      
     106 
    105107    /** 
    106108     * <p> 
     
    108110     * </p> 
    109111     * 
    110      * @param instance instance that is morphed 
    111      * @param data data based on which the instance is morphed 
     112     * @param instance 
     113     *            instance that is morphed 
     114     * @param data 
     115     *            data based on which the instance is morphed 
    112116     */ 
    113117    public void morphInstance(Instance instance, Instances data) { 
    114118        Instance nearestUnlikeNeighbor = getNearestUnlikeNeighbor(instance, data); 
    115         if( nearestUnlikeNeighbor==null ) { 
    116             throw new RuntimeException("could not find nearest unlike neighbor within the data: " + data.relationName()); 
     119        if (nearestUnlikeNeighbor == null) { 
     120            throw new RuntimeException("could not find nearest unlike neighbor within the data: " + 
     121                data.relationName()); 
    117122        } 
    118         for( int j=0; j<data.numAttributes() ; j++ ) { 
    119             if( data.attribute(j)!=data.classAttribute() && data.attribute(j).isNumeric()) { 
    120                 double randVal = rand.nextDouble()*(beta-alpha)+alpha; 
    121                 instance.setValue(j, instance.value(j) + randVal*(instance.value(j)-nearestUnlikeNeighbor.value(j)) ); 
     123        for (int j = 0; j < data.numAttributes(); j++) { 
     124            if (data.attribute(j) != data.classAttribute() && data.attribute(j).isNumeric()) { 
     125                double randVal = rand.nextDouble() * (beta - alpha) + alpha; 
     126                instance.setValue(j, instance.value(j) + 
     127                    randVal * (instance.value(j) - nearestUnlikeNeighbor.value(j))); 
    122128            } 
    123129        } 
    124130    } 
    125      
     131 
    126132    /** 
    127133     * <p> 
    128      * Determines the nearest unlike neighbor of an instance.  
     134     * Determines the nearest unlike neighbor of an instance. 
    129135     * </p> 
    130136     * 
    131      * @param instance instance to which the nearest unlike neighbor is determined 
    132      * @param data data where the nearest unlike neighbor is determined from 
     137     * @param instance 
     138     *            instance to which the nearest unlike neighbor is determined 
     139     * @param data 
     140     *            data where the nearest unlike neighbor is determined from 
    133141     * @return nearest unlike instance 
    134142     */ 
    135143    public Instance getNearestUnlikeNeighbor(Instance instance, Instances data) { 
    136144        Instance nearestUnlikeNeighbor = null; 
    137          
    138         double[] instanceVector = new double[data.numAttributes()-1]; 
     145 
     146        double[] instanceVector = new double[data.numAttributes() - 1]; 
    139147        int tmp = 0; 
    140         for( int j=0; j<data.numAttributes(); j++ ) { 
    141             if( data.attribute(j)!=data.classAttribute() && data.attribute(j).isNumeric()) { 
     148        for (int j = 0; j < data.numAttributes(); j++) { 
     149            if (data.attribute(j) != data.classAttribute() && data.attribute(j).isNumeric()) { 
    142150                instanceVector[tmp] = instance.value(j); 
    143151            } 
    144152        } 
    145          
     153 
    146154        double minDistance = Double.MAX_VALUE; 
    147         for( int i=0 ; i<data.numInstances() ; i++ ) { 
    148             if( instance.classValue() != data.instance(i).classValue() ) { 
     155        for (int i = 0; i < data.numInstances(); i++) { 
     156            if (instance.classValue() != data.instance(i).classValue()) { 
    149157                double[] otherVector = new double[data.numAttributes() - 1]; 
    150158                tmp = 0; 
    151159                for (int j = 0; j < data.numAttributes(); j++) { 
    152                     if (data.attribute(j) != data.classAttribute() && data.attribute(j).isNumeric()) { 
     160                    if (data.attribute(j) != data.classAttribute() && 
     161                        data.attribute(j).isNumeric()) 
     162                    { 
    153163                        otherVector[tmp++] = data.instance(i).value(j); 
    154164                    } 
    155165                } 
    156                 if( MathArrays.distance(instanceVector, otherVector)<minDistance) { 
     166                if (MathArrays.distance(instanceVector, otherVector) < minDistance) { 
    157167                    minDistance = MathArrays.distance(instanceVector, otherVector); 
    158168                    nearestUnlikeNeighbor = data.instance(i); 
Note: See TracChangeset for help on using the changeset viewer.