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/util/WekaUtils.java

    r129 r135  
    1515package de.ugoe.cs.cpdp.util; 
    1616 
    17 // TODO comment 
    1817import org.apache.commons.math3.ml.distance.EuclideanDistance; 
    1918 
     
    2120import weka.core.Instances; 
    2221 
     22/** 
     23 * <p> 
     24 * Collections of helper functions to work with Weka. 
     25 * </p> 
     26 *  
     27 * @author Steffen Herbold 
     28 */ 
    2329public class WekaUtils { 
    2430 
     31    /** 
     32     * <p> 
     33     * Data class for distance between instances within a data set based on their distributional 
     34     * characteristics. 
     35     * </p> 
     36     *  
     37     * @author Steffen Herbold 
     38     */ 
    2539    public static class DistChar { 
    2640        public final double mean; 
     
    2943        public final double max; 
    3044        public final int num; 
     45 
    3146        private DistChar(double mean, double std, double min, double max, int num) { 
    3247            this.mean = mean; 
     
    3752        } 
    3853    } 
    39      
     54 
    4055    /** 
    4156     * Scaling value that moves the decimal point by 5 digets. 
    4257     */ 
    4358    public final static double SCALER = 10000.0d; 
    44      
     59 
    4560    /** 
    4661     * <p> 
     
    6681        return distance; 
    6782    } 
    68      
     83 
     84    /** 
     85     * <p> 
     86     * Returns a double array of the values without the classification. 
     87     * </p> 
     88     * 
     89     * @param instance 
     90     *            the instance 
     91     * @return double array 
     92     */ 
    6993    public static double[] instanceValues(Instance instance) { 
    70         double[] values = new double[instance.numAttributes()-1]; 
    71         int k=0;  
    72         for( int j=0; j<instance.numAttributes() ; j++ ) { 
    73             if( j!= instance.classIndex() ) { 
     94        double[] values = new double[instance.numAttributes() - 1]; 
     95        int k = 0; 
     96        for (int j = 0; j < instance.numAttributes(); j++) { 
     97            if (j != instance.classIndex()) { 
    7498                values[k] = instance.value(j); 
    7599                k++; 
     
    78102        return values; 
    79103    } 
    80      
     104 
     105    /** 
     106     * <p> 
     107     * Calculates the distributional characteristics of the distances the instances within a data 
     108     * set have to each other. 
     109     * </p> 
     110     * 
     111     * @param data 
     112     *            data for which the instances are characterized 
     113     * @return characteristics 
     114     */ 
    81115    public static DistChar datasetDistance(Instances data) { 
    82116        double distance; 
     
    87121        int numCmp = 0; 
    88122        int l = 0; 
    89         double[] inst1 = new double[data.numAttributes()-1]; 
    90         double[] inst2 = new double[data.numAttributes()-1]; 
     123        double[] inst1 = new double[data.numAttributes() - 1]; 
     124        double[] inst2 = new double[data.numAttributes() - 1]; 
    91125        EuclideanDistance euclideanDistance = new EuclideanDistance(); 
    92         for( int i=0; i<data.numInstances(); i++ ) { 
    93             l=0; 
    94             for( int k=0; k<data.numAttributes(); k++ ) { 
    95                 if( k!=data.classIndex() ) { 
     126        for (int i = 0; i < data.numInstances(); i++) { 
     127            l = 0; 
     128            for (int k = 0; k < data.numAttributes(); k++) { 
     129                if (k != data.classIndex()) { 
    96130                    inst1[l] = data.instance(i).value(k); 
    97131                } 
    98132            } 
    99             for( int j=0; j<data.numInstances(); j++ ) { 
    100                 if( j!=i ) { 
    101                     l=0; 
    102                     for( int k=0; k<data.numAttributes(); k++ ) { 
    103                         if( k!=data.classIndex() ) { 
     133            for (int j = 0; j < data.numInstances(); j++) { 
     134                if (j != i) { 
     135                    l = 0; 
     136                    for (int k = 0; k < data.numAttributes(); k++) { 
     137                        if (k != data.classIndex()) { 
    104138                            inst2[l] = data.instance(j).value(k); 
    105139                        } 
     
    107141                    distance = euclideanDistance.compute(inst1, inst2); 
    108142                    sumAll += distance; 
    109                     sumAllQ += distance*distance; 
     143                    sumAllQ += distance * distance; 
    110144                    numCmp++; 
    111                     if( distance < min ) { 
     145                    if (distance < min) { 
    112146                        min = distance; 
    113147                    } 
    114                     if( distance > max ) { 
     148                    if (distance > max) { 
    115149                        max = distance; 
    116150                    } 
     
    119153        } 
    120154        double mean = sumAll / numCmp; 
    121         double std = Math.sqrt((sumAllQ-(sumAll*sumAll)/numCmp) * 
    122                                   (1.0d / (numCmp - 1))); 
     155        double std = Math.sqrt((sumAllQ - (sumAll * sumAll) / numCmp) * (1.0d / (numCmp - 1))); 
    123156        return new DistChar(mean, std, min, max, data.numInstances()); 
    124157    } 
    125      
    126     // like above, but for single attribute 
     158 
     159    /** 
     160     * <p> 
     161     * Calculates the distributional characteristics of the distances of a single attribute the 
     162     * instances within a data set have to each other. 
     163     * </p> 
     164     * 
     165     * @param data 
     166     *            data for which the instances are characterized 
     167     * @param index 
     168     *            attribute for which the distances are characterized 
     169     * @return characteristics 
     170     */ 
    127171    public static DistChar attributeDistance(Instances data, int index) { 
    128172        double distance; 
     
    133177        int numCmp = 0; 
    134178        double value1, value2; 
    135         for( int i=0; i<data.numInstances(); i++ ) { 
     179        for (int i = 0; i < data.numInstances(); i++) { 
    136180            value1 = data.instance(i).value(index); 
    137             for( int j=0; j<data.numInstances(); j++ ) { 
    138                 if( j!=i ) { 
     181            for (int j = 0; j < data.numInstances(); j++) { 
     182                if (j != i) { 
    139183                    value2 = data.instance(j).value(index); 
    140                     distance = Math.abs(value1-value2); 
     184                    distance = Math.abs(value1 - value2); 
    141185                    sumAll += distance; 
    142                     sumAllQ += distance*distance; 
     186                    sumAllQ += distance * distance; 
    143187                    numCmp++; 
    144                     if( distance < min ) { 
     188                    if (distance < min) { 
    145189                        min = distance; 
    146190                    } 
    147                     if( distance > max ) { 
     191                    if (distance > max) { 
    148192                        max = distance; 
    149193                    } 
     
    152196        } 
    153197        double mean = sumAll / numCmp; 
    154         double std = Math.sqrt((sumAllQ-(sumAll*sumAll)/numCmp) * 
    155                                   (1.0d / (numCmp - 1))); 
     198        double std = Math.sqrt((sumAllQ - (sumAll * sumAll) / numCmp) * (1.0d / (numCmp - 1))); 
    156199        return new DistChar(mean, std, min, max, data.numInstances()); 
    157200    } 
    158      
     201 
    159202    /** 
    160203     * <p> 
Note: See TracChangeset for help on using the changeset viewer.