// Distributed Decision making system framework //Copyright (c) 2014, Jordi Coll Corbilla // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // - Neither the name of this library nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. package ddm.data; import java.util.ArrayList; import java.util.HashMap; import ddm.ontology.ClassifierSettings; /*** * * @author jordi corbilla * Given a data set, percentage of training and number of * classifiers this class will generate the partition list for the Data * set manager * */ @SuppressWarnings("serial") public class PartitionList implements java.io.Serializable { private int trainingSize; private int dataSize; private ArrayList<Integer> partitions; private ArrayList<PartitionMap> partitionMap; public PartitionList(int DataSize, int PercentageData, HashMap<String, ClassifierSettings> ClassifierSettings, int NumberClassifiers) { partitions = new ArrayList<Integer>(); partitionMap = new ArrayList<PartitionMap>(); CalculatePartitions(DataSize, PercentageData, ClassifierSettings, NumberClassifiers); CalculatePartitionMap(); } private void CalculatePartitions(int DataSize, int PercentageData, HashMap<String, ClassifierSettings> ClassifierSettings, int NumberClassifiers) { // Get the basic chunk of data destined for training float percentage = PercentageData / (float) 100; this.trainingSize = (int) ((float) DataSize * percentage); this.dataSize = DataSize; int newTrainingSize = getTrainingSize(); for (int i = 1; i <= NumberClassifiers; i++) { int percentageClassifier = ClassifierSettings.get("Classifier" + i) .getPercentageTrainingData(); float percentageClass = percentageClassifier / (float) 100; int sizeTrainingClassifier = (int) (Math .round((float) newTrainingSize * percentageClass)); partitions.add(sizeTrainingClassifier); } partitions.add(getDataSize() - getTrainingSize()); } private void CalculatePartitionMap() { for (int i = 0; i < NumberOfPartitions() - 1; i++) { partitionMap.add(new PartitionMap(0, partitions.get(i) - 1)); } int startIndex = getTrainingSize(); int endIndex = getDataSize() - 1; partitionMap.add(new PartitionMap(startIndex, endIndex)); } public ArrayList<Integer> getPartitions() { return partitions; } public int getTrainingSize() { return trainingSize; } public int getDataSize() { return dataSize; } public int NumberOfPartitions() { return partitions.size(); } public ArrayList<PartitionMap> getPartitionMap() { return partitionMap; } public int GetStartIndex(int index) { return getPartitionMap().get(index).getStartIndex(); } public int GetEndIndex(int index) { return getPartitionMap().get(index).getEndIndex(); } }