/*********************************************************************** This file is part of KEEL-software, the Data Mining tool for regression, classification, clustering, pattern mining and so on. Copyright (C) 2004-2010 F. Herrera (herrera@decsai.ugr.es) L. S�nchez (luciano@uniovi.es) J. Alcal�-Fdez (jalcala@decsai.ugr.es) S. Garc�a (sglopez@ujaen.es) A. Fern�ndez (alberto.fernandez@ujaen.es) J. Luengo (julianlm@decsai.ugr.es) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/ **********************************************************************/ /** * <p> * @author Written by Alberto Fern�ndez (University of Granada) 01/07/2008 * @author Modified by Xavi Sol� (La Salle, Ram�n Llull University - Barcelona) 03/12/2008 * @version 1.1 * @since JDK1.2 * </p> */ package keel.Algorithms.Rule_Learning.Slipper; import java.util.Vector; public class Score { /** * <p> * Representation of a Trio's vector. It counts the number of instances (positive and negative) that contains each value * for a given attribute in a dataset. Each element is a Trio in the form: {value,positives,negatives} * </p> */ //vector of {value,positives,negatives} private Vector trios; //static constants static int POSITIVE=Trio.POSITIVE; static int NEGATIVE=Trio.NEGATIVE; /** * Default constructor. */ public Score() { trios=new Vector(); } /** * Adds a new value to the vector. * The number of positive and negative instances are initialize to 0. * * @param key double the new value */ public void addKey(double key){ Trio t=new Trio(key); trios.add(t); } /** * Adds a new value to the vector. * The number of positive and negative instances are initialize to 0 or 1 * wether the sign is POSITIVE or NEGATIVE. * * @param key double the new value * @param value the adding value * @param sign int it indicates wich of the measures will be intialized to 1 (the other will be initialized to 0) */ public void addKey(double key,double value,int sign){ Trio t=new Trio(key); if (sign==POSITIVE) t.addPositive(value); else if (sign==NEGATIVE) t.addNegative(value); trios.add(t); } /** * Increases the number of positives instances in a given vector's position. * * @param pos int vector's position * @param value the adding value */ public void addPositive(int pos,double value){ ((Trio)trios.elementAt(pos)).addPositive(value); } /** * Increases the number of positives instances of a given values. * * @param key double the value * @param value the adding value */ public void addPositive(double key,double value){ int pos=findKey(key); ((Trio)trios.elementAt(pos)).addPositive(value); } /** * Increases the number of negatives instances in a given vector's position. * * @param pos int vector's position * @param value the adding value */ public void addNegative(int pos,double value){ ((Trio)trios.elementAt(pos)).addNegative(value); } /** * Increases the number of negatives instances of a given values. * * @param key double the value * @param value the adding value */ public void addNegative(double key,double value){ int pos=findKey(key); ((Trio)trios.elementAt(pos)).addNegative(value); } /** * Returns the vector's position of a given value * * @param key double the value * @return the value's position in the vector */ public int findKey(double key){ int i; for (i=0; i<trios.size() && ((Trio)trios.elementAt(i)).getKey()!=key;i++); if (i<trios.size()) return i; else return -1; } /** * Returns the value at a given position of the vector * (inverse method of findKey). * * @param pos int position of the vector. * @return the value at that position of the vector. */ public double getKey(int pos){ return ((Trio)trios.elementAt(pos)).getKey(); } /** * Returns the number of positive instances of the dataset * that contains the value at a given position of the vector. * * @param pos int position of the vector * @return number of positive instances. */ public double getPositive(int pos){ return ((Trio)trios.elementAt(pos)).getPositive(); } /** * Returns the number of positive instances that contains the given value. * * @param key double the value * @return number of positive instances. */ public double getPositive(double key){ int pos=findKey(key); return ((Trio)trios.elementAt(pos)).getPositive(); } /** * Returns the number of negative instances of the dataset * that contains the value at a given position of the vector. * * @param pos int position of the vector * @return number of negative instances. */ public double getNegative(int pos){ return ((Trio)trios.elementAt(pos)).getNegative(); } /** * Returns the number of negative instances that contains the given value. * * @param key double the value * @return number of negative instances. */ public double getNegative(double key){ int pos=findKey(key); return ((Trio)trios.elementAt(pos)).getNegative(); } /** * Returns the total number of instances of the dataset * that contains the value at a given position of the vector. * * @param pos int position of the vector * @return the total number of instances */ public double getTotal(int pos){ return ((Trio)trios.elementAt(pos)).getNegative()+((Trio)trios.elementAt(pos)).getPositive(); } /** * Returns the total number of instances that contains the given value. * * @param key double the value * @return the total number of instances */ public double getTotal(double key){ int pos=findKey(key); return ((Trio)trios.elementAt(pos)).getNegative()+((Trio)trios.elementAt(pos)).getPositive(); } public void sort(){ if (trios.size()>1){ Trio[] t = new Trio[trios.size()]; trios.toArray(t); Utilities.mergeSort(t, trios.size()); trios = new Vector(java.util.Arrays.asList(t)); } } /** * Returns the size of the vector (the number of values). * * @return the size of the vector */ public int size(){ return trios.size(); } /** * Returns a string representation of this Score, containing the String representation of each Trio. * * @return a string representation of this Score, containing the String representation of each Trio. */ public String toString(){ String outcome=""; for (int i=0;i<trios.size();i++){ outcome+=(Trio) trios.elementAt(i)+"\n"; } return outcome; } /** * Returns a string representation of this Score, containing the String representation of each Trio, taking into account the given attribute's id. * * @param a int attribute's id * @return a string representation of this Score, containing the String representation of each Trio, taking into account the given attribute's id. */ public String toString(int a){ String outcome=""; for (int i=0;i<trios.size();i++){ outcome+=((Trio) trios.elementAt(i)).toString(a)+"\n"; } return outcome; } }