//--------------------------------------------------------------------------------// // COPYRIGHT NOTICE // //--------------------------------------------------------------------------------// // Copyright (c) 2012, Instituto de Microelectronica de Sevilla (IMSE-CNM) // // // // 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 the IMSE-CNM 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 HOLDERS 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 xfuzzy.xfsp.model.types; /** * <p> <b>Descripci�n:</b> clase que calcula el �ndice de separaci�n de Dunn de * un conjunto de datos agrupados en <i>clusters</i>. * <p> <b>E-mail</b>: <ADDRESS>joragupra@us.es</ADDRRESS> * @author Jorge Agudo Praena * @version 2.1 * @see IXfspTypeSimplifier * @see IXfspValidityMeasure * @see XfspDunnValidityMeasure * @see XfspTypeSimplifierFactory * */ public class XfspSeparationIndex extends XfspDunnValidityMeasure{ /** * <p> <b>Descripci�n:</b> crea un medidor del �ndice de separaci�n de Dunn para * datos agrupados en clusters. * @param data Conjunto de datos que se quieren agrupar en clusters y del que * se va a calcular el n�mero �ptimo de ellos. * @param weights Pesos asignados a cada uno de los elementos que compone un * data de los que se van a estudiar (como hayan sido definidos previamente). * */ public XfspSeparationIndex(double [][] data, double [] weights) { //llama al constructor de la superclase con los mismos par�metros super(data, weights); } /** * <p> <b>Descripci�n:</b> devuelve el valor del numerador para el �ndice de * separaci�n. * @param data Conjunto de datos agrupables en <i>clusters</i>. * @param assign Asignaci�n hecha de los datos a los distintos * <i>clusters</i>. * @param weights Pesos asignados a los par�metros de las funciones de * pertenencia. * @param c1 N�mero del primer <i>cluster</i>. * @param c2 N�mero del segundo <i>cluster</i>. * @return Valoraci�n del numerador del m�todo de validaci�n de Dunn 33. * */ protected double getNumerator(double [][] data, int [] assign, double [] weights, int c1, int c2) { IXfspDistance d=new XfspEuclideanDistance(weights); return d.minDistance(data,assign,c1,c2); } /** * <p> <b>Descripci�n:</b> devuelve el valor del denominador para cualquiera * de los m�todos de validaci�n de Dunn generalizados. * @param data Conjunto de datos agrupables en <i>clusters</i>. * @param assign Asignaci�n hecha de los datos a los distintos * <i>clusters</i>. * @param weights Pesos asignados a los par�metros de las funciones de * pertenencia. * @param c N�mero del <i>cluster</i>. * @return Valoraci�n del denominador de los m�todos de validaci�n de Dunn * generalizados. * */ protected double getDenominator(double [][] data, int [] assign, double [][] cluster, double [] weights, int c) { //objeto que permite el c�lculo de distintos tipos de distancias IXfspDistance d=new XfspEuclideanDistance(weights); //valor del denominador de la funci�n que permite calcular el n�mero �ptimo //de clusters double result; //si se est� proponiendo alguna agrupaci�n en clusters, es decir, el n�mero //de clusters es menor que el de funciones de pertenencia original... if(cluster.length!=data.length){ //...devuelve el di�metro del cluster n�mero 'c' result = d.diameter(data, assign, c); } //si no se est� agrupando en clusters, es decir, el n�mero de clusters es //igual al de funciones de pertenencia original... else{ //...el di�metro de cualquier cluster dar�a un resultado de 0, ya que //todos los clusters estar�an formados por un solo elemento, por lo que, //en su lugar, devolvemos un valor razonable que permite continuar con el //c�lculo del mejor n�mero de clusters en que agrupar los datos result = 0.1; } return result; } }