ANALISIS INTELIGENTE DE DATOS TRABAJO FINAL IMPLEMENTACION MÉTODO CLUSTER EN WEKA: P-MEDIAN Profesores: Dra. Ana Haedo Daniel Vázquez V. Alumno: Jorge Beyoglonian Diciembre 2008 AID - Trabajo Final Implementación P-Median Índice RESUMEN ........................................................................................................................................................................ 3 INTRODUCCIÓN ............................................................................................................................................................. 3 IMPLEMENTACIÓN ........................................................................................................................................................ 5 ALGORITMO P-MEDIAN ............................................................................................................................................... 5 INTEGRACIÓN CON WEKA ......................................................................................................................................... 6 REGISTRACIÓN DEL NUEVO ALGORITMO ......................................................................................................................... 6 DETALLES DE INTEGRACIÓN.......................................................................................................................................... 10 ESTANDARIZACIÓN DE VARIABLES................................................................................................................................ 10 P-MEDIAN PASO A PASO ................................................................................................................................................ 11 EJEMPLOS .................................................................................................................................................................... 15 PROBLEMAS CON MUCHAS INSTANCIAS ......................................................................................................................... 18 IDEAS PARA FUTURAS INVESTIGACIONES ........................................................................................................ 18 CONCLUSIONES .......................................................................................................................................................... 19 DETALLES DE INSTALACIÓN .................................................................................................................................. 19 DISPONIBILIDAD PÚBLICA ....................................................................................................................................... 19 BIBLIOGRAFÍA Y REFERENCIAS ............................................................................................................................ 20 Diciembre 2008 Página 2 de 20 AID - Trabajo Final Implementación P-Median Resumen El presente trabajo consiste en la presentación del método de agrupamiento P-Median, su comparación con el algoritmo K-Means, y el desarrollo de una implementación a través de la cual se pueda realizar comparaciones de los resultados, y analizar las métricas del consumo de recursos empleado por cada método de agrupamiento. La implementación del algoritmo será realizada como un módulo adicional del sistema Weka, incorporando a este informe todos los detalles de su implementación y los pasos a seguir para poder emplear de forma libre el módulo desarrollado. Introducción El análisis cluster, también conocido como análisis de conglomerados, es una técnica estadística multivariante cuya finalidad es formar grupos a partir de un conjunto de elementos de tal forma que estos grupos estén formados por elementos los más parecidos que sea posible (homogéneos) y a su vez lo más diferentes (heterogéneos) que sea posible entre los grupos. Los elementos en cada grupo (conglomerado) tienden a ser similares entre sí (alta homogeneidad interna, dentro del cluster) y diferentes a los objetos de los otros grupos (alta heterogeneidad externa, entre clusters) con respecto a algún criterio de selección predeterminado. El análisis de cluster se utiliza en marketing para diversos propósitos, entre los que podemos destacar: segmentación del mercado, comprensión del comportamiento del comprador, identificación de oportunidades para productos nuevos, selección de mercados de prueba, reducción de datos, etc. El objetivo del análisis de cluster es la de agrupar a los individuos por su grado de homogeneidad. Existen distintas clasificaciones de este tipo de modelos, siendo la más usada los modelos jerárquicos frente a los no jerárquicos. El análisis cluster jerárquico es una herramienta exploratoria diseñada para revelar las agrupaciones naturales (o los conglomerados o clusters) dentro de un conjunto de datos que no sería de otra manera evidente. Es el más útil cuando se desea agrupar un número pequeño (menos que algunos cientos) de objetos. Este método comienza separando cada objeto en un cluster por sí mismo. En cada etapa del análisis, el criterio por el que los objetos son separados se relaja en orden a enlazar los dos conglomerados más similares hasta que todos los objetos sean agrupados en un árbol de clasificación completo. El criterio básico para cualquier agrupación es la distancia. Los objetos que estén cerca uno del otro pertenecerían al mismo conglomerado o cluster, y los objetos que estén lejos uno del otro pertenecerán a distintos clusters. Los resultados de agrupamientos jerárquicos se muestran en un diagrama conocido como dendrograma, en el que se pueden observar las uniones y/o divisiones que se van realizando. Las ramas del árbol representan los conglomerados. Las ramas se unen en un nodo cuya ubicación sobre el eje de distancias indica el nivel en el cual ocurre la fusión. El nodo en el que todas los objetos forman un solo conglomerado se llama nodo raíz. Diciembre 2008 Página 3 de 20 AID - Trabajo Final Implementación P-Median Figure 1. Ejemplo de un dendograma El análisis de cluster no jerárquico es especialmente indicado para grandes tablas de datos. El objetivo de este análisis es realizar una sola partición de los elementos en K grupos. El número de grupos puede ser especificado de antemano o ser determinado en el procedimiento. Estos métodos pueden comenzar con un agrupamiento inicial o con un grupo de puntos semilla (centroides) que formarán los centros de los grupos. El método de tipo no jerárquico mas comúnmente usado es el algoritmo K-means. Este separa un grupo de objetos en una cantidad elegida de grupos haciendo máxima la variación entre conglomerados y minimizando la variación dentro de cada conglomerado. Asigna cada objeto al grupo que tiene el centroide (media) más cercano. La distancia comúnmente usada es la Euclídea, tanto en observaciones estandarizadas como en las no estandarizadas. La partición lograda es aquella tal que la suma de la suma de las distancias al cuadrado de los miembros del grupo respecto a su centroide es mínima. Dado que este algoritmo, en cada iteración de su proceso, utiliza la media de su población para recalcular el potencial nuevo centroide, la existencia de elementos alejados (que puedan ser outliers o no) logran producir una distorsión tal que lleva a que el algoritmo retorne soluciones erróneas, tanto en la composición de los grupos conformados como en la elección de los centroides de cada uno de ellos. Diciembre 2008 Página 4 de 20 AID - Trabajo Final Implementación P-Median Un algoritmo de tipo no jerárquico inmune a este problema descripto en el párrafo anterior es el conocido bajo el nombre P-Median. Este algoritmo se diferencia del K-means en la postulación de nuevos centroides que hace en cada iteración, ya que en lugar de utilizar la media considera la mediana de la población del grupo. De esta manera la existencia de valores lejanos y/o utliers no afectan la ubicación de los nuevos centroides ni la conformación de nuevos grupos que minimicen la variación interna al conglomerado y maximice la variación intra los diferentes grupos. Implementación El objetivo de este trabajo es presentar el algoritmo P-Median, realizar comprobaciones en cuanto a su desempeño, y proveer una implementación que pueda ser utilizada de la manera más simple posible por quién la requiera. La idea fue integrar este método en algunos de los paquetes de software que se emplean comúnmente para hacer análisis exploratorio y de tipo multivariado, por tal razón la implementación del algoritmo fue realizada en lenguaje Java, previendo cumplir todos los requisitos para poder ser integrado al software Weka. Algoritmo P-Median A grandes rasgos el algoritmo P-Median se comporta de igual manera que el K-Means, diferenciándose en que en lugar de utilizar la función estadística media utiliza la mediana para generar nuevos centroides en cada iteración. Los pasos del algoritmo, en lenguaje natural, son los siguientes: 1) Plantear una solución inicial eligiendo de manera aleatoria instancias para ser utilizadas como centroides de cada grupo. La cantidad de grupos debe ser configurada por el usuario. 2) Para cada instancia considerar la distancia euclidea que tiene contra cada centroide y asignarlo al grupo cuya distancia al centroide sea menor. 3) Para cada grupo calcular por medio de la mediana la nueva ubicación del centroide de cada grupo. 4) Repetir los pasos 2 y 3 hasta que la conformación de los grupos converja, y ya no haya más reasignación de instancias a grupos entre iteraciones. El aspecto característico, y que da nombre al algoritmo, es el que se realiza en el paso 3), en el cálculo de la mediana para cada dimensión de todos los componentes del grupo. Para llevar a cabo esta tarea la implementación tradicional es ordenar los valores de cada dimensión y acceder al elemento, o a los dos elementos en caso que la cantidad sea par, que se encuentra en la mitad Diciembre 2008 Página 5 de 20 AID - Trabajo Final Implementación P-Median de la totalidad que conforman el grupo, y tomar este valor como medida para conformar el nuevo centroide. Esta tarea tiene un costo computacional importante, ya que en cada iteración se debe ordenar la colección de valores de cada dimensión de todos los grupos. Como podrá apreciarse más adelante en este informe, al momento de realizar las pruebas este punto no resulta impedimento para poder ejecutar el algoritmo, considerando una computadora personal configuración promedio del año 2008 y dimensión de problemas acotados a pocos miles de instancias y pocas dimensiones. Si puede ser un problema importante para realizar análisis sobre problemas de cantidad de muestras muy importantes y/o de muchas dimensiones. Integración con Weka Weka cuenta con una jerarquía de clases específica para cada funcionalidad que brinda. Esta jerarquía y otras cuestiones internas de implementación pueden modificarse con el advenimiento de nuevas versiones de Weka, no obstante es poco común que surjan cambios tan importantes que puedan causar que el nuevo algoritmo P-Median no pueda ser integrado al resto del sistema. Se tomó como base la versión Weka Developer 3.5.8. Los algoritmos de agrupamiento (clustering) extienden una clase base llamada RandomizableClusterer, quién provee la especificación de los puntos de entrada y los enlaces por los cuales este modulo deberá comunicarse con el resto del sistema. Asimismo las clases de este tipo también pueden implementar ciertas interfaces que simplifican las tareas comunes, por ejemplo NumberOfClustersRequestable. Registración del nuevo algoritmo Se generó una nueva clase siguiendo estos mismos lineamientos llamada PMedian, donde se encontrará toda la lógica de la implementación del algoritmo, así como todas las funcionalidades auxiliares para que este módulo coexista dentro del mismo paquete de software Weka, integrándose y proveyendo las mismas funcionalidades que el resto de los algoritmos disponibles. Diciembre 2008 Página 6 de 20 AID - Trabajo Final Implementación P-Median La creación de la nueva clase se llevo a cabo con el siguiente código Java: public class PMedian extends RandomizableClusterer implements NumberOfClustersRequestable, WeightedInstancesHandler { /** * the default constructor */ public PMedian() { super(); m_SeedDefault = 10; setSeed( m_SeedDefault ); } … } El texto descriptivo para la ventana de configuración de los parámetros: /** * Returns a string describing this clusterer * * @return a description of the evaluator suitable for displaying in the * explorer/experimenter gui */ public String globalInfo() { return "Cluster data using the PMedian algorithm"; } La definición de las capacidades del algoritmo, donde se especifica que el mismo no soporta valores perdidos: /** * Returns default capabilities of the clusterer. * * @return the capabilities of this clusterer */ public Capabilities getCapabilities() { Capabilities result = super.getCapabilities(); // attributes result.enable( Capability.NOMINAL_ATTRIBUTES ); result.enable( Capability.NUMERIC_ATTRIBUTES ); // disable MISSING VALUES result.disable( Capability.MISSING_VALUES ); return result; } Diciembre 2008 Página 7 de 20 AID - Trabajo Final Implementación P-Median Especificación de los parametros que deberán ser proporcionados para llevar a cabo un ciclo de ejecución: /** * Gets the current settings of PMedian * * @return an array of strings suitable for passing to setOptions() */ public String[] getOptions() { int i; Vector result; String[] options; result = new Vector(); if( m_displayStdDevs ) { result.add( "-V" ); } if( m_standardizeAttributes ) { result.add( "-M" ); } result.add( "-N" ); result.add( "" + getNumClusters() ); options = super.getOptions(); for( i = 0; i < options.length; i++ ) result.add( options[i] ); return (String[]) result.toArray( new String[result.size()] ); } Ajuste de las opciones configuradas por el usuario para llevar a cabo la ejecución del algoritmo: public void setOptions(String[] options) throws Exception { m_displayStdDevs = Utils.getFlag( "V", options ); m_standardizeAttributes = Utils.getFlag( "M", options ); String optionString = Utils.getOption( 'N', options ); if( optionString.length() != 0 ) { setNumClusters( Integer.parseInt( optionString ) ); } super.setOptions( options ); } Diciembre 2008 Página 8 de 20 AID - Trabajo Final Implementación P-Median El código expuesto en parrafos anteriores hace posible que el algoritmo PMedian se integre como un modulo nativo al sistema Weka, el mismo puede observarse como una opción mas de algoritmos de clustering, como se ve en la siguiente captura de pantalla: Y al ingresar al algoritmo pueden verse y configurarse las opciones, de la siguiente manera: Diciembre 2008 Página 9 de 20 AID - Trabajo Final Implementación P-Median Detalles de integración Una vez registrado el nuevo algoritmo en el sistema Weka el usuario lo verá disponible y podrá utilizarlo de la misma manera que utiliza el resto de funcionalidades que otorga el resto del sistema. Al emplear el PMedian Weka realizará primero una invocación al método setOptions (función descripta en párrafos anteriores) con el fin que el algoritmo pueda obtener las opciones seleccionadas por el usuario, luego invocará al punto de entrada del algoritmo indicándole las datos en los cuales debe ejecutarse. El punto de entrada al algoritmo de agrupamiento (definido dentro de la jerarquía de algoritmos de agrupamiento, mas específicamente en la clase AbstractClusterer) es el siguiente: /** * Generates a clusterer. Has to initialize all fields of the clusterer that * are not being set via options. * * @param data * set of instances serving as training data * @throws Exception * if the clusterer has not been generated successfully */ public void buildClusterer(Instances data) throws Exception { … En el cuadro anterior puede apreciarse la función que invoca Weka para realizar la generación del agrupamiento. En la misma pasa por parámetro los datos en los cuales debe llevar a cabo el algoritmo. El tipo de dato Instances es original de Weka y contiene dentro de sí toda la información del dataset con el cual se esta operando, tanto la información de nombres de campos, tipos de datos, etc, como los datos específicos de las instancias. El primer paso a llevar a cabo es verificar que se cumplan los requisitos impuestos, en nuestro caso se debe verificar que los datos no contengan valores faltantes, esto se lleva a cabo con la siguiente instrucción: // can clusterer handle the data? getCapabilities().testWithFail( data ); … Esta invocación realizará la comprobación que los datos no contengan datos faltantes, y que los atributos sean de tipo numérico o nominal. La definición de las capacidades del algoritmo PMedian están definidos en el método getCapabilities que ya fue expuesto en un punto anterior dentro de este informe (bajo la sección Registración del nuevo Algoritmo). Estandarización de variables Para implementar la opción de estandarizacion de los variables como paso previo al proceso de agrupamiento se utilizo una clase provista por Weka llamada Standardize. En caso de ser necesario (por solicitud del usuario mediante la ventana de configuración) se procederá a instanciar un objeto de esta clase, e invocar a un filtro no supervisado que llevará a cabo la estandarización de los valores en las instancias previamente cargadas en la aplicación. Puede verse esta secuencia en el siguiente código: Diciembre 2008 Página 10 de 20 AID - Trabajo Final Implementación P-Median m_Standardize = new Standardize(); Instances instances = new Instances( data ); instances.setClassIndex( -1 ); if( m_standardizeAttributes ) { m_Standardize.setInputFormat( instances ); instances = Filter.useFilter( instances, m_Standardize ); } P-Median paso a paso El primer paso en el algoritmo de agrupamiento es crear tantos centroides como haya especificado el usuario, para luego poder plantear una solución inicial. m_ClusterCentroids = new Instances( instances, m_NumClusters ); int[] clusterAssignments = new int[instances.numInstances()]; … Random RandomO = new Random( getSeed() ); for( int j = instances.numInstances() - 1; j >= 0; j-- ) { int instIndex = RandomO.nextInt( j + 1 ); m_ClusterCentroids.add( instances.instance( instIndex ) ); instances.swap( j, instIndex ); if( m_ClusterCentroids.numInstances() == m_NumClusters ) { break; } } Aquí puede apreciarse la elección aleatoria de los centroides para conformar luego la solución inicial. A través de un ciclo se itera tantas veces como centroides deban elegirse, y en cada paso se selecciona a través de un numero aleatorio (con la semilla seleccionada por el usuario) el número de instancia que será elegida como centroide inicial. Luego esta instancia se la coloca al final de todas para que no vuelva a ser elegida en la próxima iteración. Como resultado de este conjunto de instrucciones los centroides ya han sido prefijados, y resta asignar cada instancia a su centroide mas cercano para conformar así la solución inicial del algoritmo. La selección y asignación de cada instancia a su centroide mas cercano, y por consiguiente al grupo al cual pertenece este centroide se realiza con la siguiente función: Diciembre 2008 Página 11 de 20 AID - Trabajo Final Implementación P-Median /** * clusters an instance that has been through the filters * * @param instance * the instance to assign a cluster to * @param updateErrors * if true, update the within clusters sum of errors * @return a cluster number */ private int clusterProcessedInstance(Instance instance) { double minDist = Integer.MAX_VALUE; int bestCluster = 0; for( int i = 0; i < m_NumClusters; i++ ) { double dist = distance( instance, m_ClusterCentroids.instance(i) ); if( dist < minDist ) { minDist = dist; bestCluster = i; } } return bestCluster; } Considerando únicamente la instancia recibida por parámetro recorre todos los centroides y calcula la distancia que lo separa a cada uno de ellos. Luego selecciona el centroide/grupo al cual la distancia haya sido menor, y lo asigna al mismo. La distancia utilizada es la distancia Euclidea provista por el sistema Weka. En este momento el algoritmo ya cuenta con una solución inicial; a partir de ahora buscará nuevas soluciones que mejoren en cada iteración, y se detendrá cuando la solución converja y se estabilice, es decir que como resultado de la iteración ninguna instancia se haya desplazado de un grupo a otro. for( i = 0; i < m_NumClusters; i++ ) { double[] vals = new double[instances.numAttributes()]; // Set new set of centroids for( int j = 0; j < instances.numAttributes(); j++ ) { // Use Median of data values to set the new centroid vals[j] = MedianOrModeCompute( tempI[i], j ); } } m_ClusterCentroids.add( new Instance( 1.0, vals ) ); Como puede verse, el cálculo de los nuevos centroides es sumamente simple, para cada grupo se computa la mediana (o moda en caso de variables nominales) para cada dimensión y se utiliza este valor como nuevo centroide. El cálculo de la mediana es el principal aspecto que distingue a este método de agrupamiento, es llevado a cabo por el método MedianOrModeCompute y recibe como parámetro todas las instancias en el grupo y el índice de la dimensión para el cual se quiere calcular el valor de la mediana. Diciembre 2008 Página 12 de 20 AID - Trabajo Final Implementación P-Median /** * Returns the median (mode) for a numeric (nominal) attribute as a * floating-point value. Returns 0 if the attribute is neither nominal nor * numeric. If all values are missing it returns zero. * * @param attIndex the attribute's index (index starts with 0) * @return the median or the mode */ public static double MedianOrModeCompute(Instances instances, int attIndex){ if( instances.attribute( attIndex ).isNumeric() ) { // copy instance's (values * weight) to a plain vector Vector<Double> values = new Vector<Double>(); for( int j = 0; j < instances.numInstances(); j++ ) { if( !instances.instance( j ).isMissing( attIndex ) ) { values.add( new Double( instances.instance( j ).weight() * instances.instance( j ).value( attIndex ) ) ); } } // order the vector java.util.Collections.sort( values ); double median; // even or odd number of values? if( values.size() % 2 == 1 ) // odd => (n/2) element median = values.get( values.size() / 2 ); else // even => ( (n/2)-1 element + (n/2) element ) / 2 median = ( values.get((values.size()/2)-1) + values.get(values.size()/2) ) / 2; return median; } return instances.meanOrMode( attIndex ); } En el caso que la variable sea de tipo nominal el valor esperado es la moda. Dado que Weka provee esta funcionalidad se delega en este método su computo (última línea del código referenciado en el cuadro previo). Si el atributo es numérico debe calcularse la mediana. Para tal fin se crea un vector con los valores de las instancias para el atributo indicado, luego se ordena, y por último se accede al elemento de la mitad (o los 2 de la mitad y se divide por 2 en caso que haya una cantidad par de elementos) del vector para obtener la mediana. Este valor es retornado como resultado, y luego empleado en la conformación del nuevo centroide. En este punto el algoritmo da inicio a una nueva iteración. Hasta aquí calculo los grupos iniciales, sus centroides y las instancias que conforman cada grupo. Luego mediante la utilización de la media calculo nuevos centroides candidatos para la solución, y en este punto de la ejecución es cuando debe decidir si los nuevos centroides mejoran la solución inicial, y/o el problema converge dando por terminada su ejecución. Diciembre 2008 Página 13 de 20 AID - Trabajo Final Implementación P-Median while( !converged ) { m_Iterations++; converged = true; for( i = 0; i < instances.numInstances(); i++ ) { Instance toCluster = instances.instance( i ); int newC = clusterProcessedInstance( toCluster, true ); if( newC != clusterAssignments[i] ) { converged = false; } clusterAssignments[i] = newC; } Inicia una nueva iteración, y se reasignan todas las instancias a los nuevos centroides. Si todas las nuevas asignaciones a grupos coinciden con las que tenian previamente el algoritmo concluye que el sistema converge, y termina su ciclo de ejecución dando como resultado final estos conformación de grupos que tiene actualmente. En caso que el sistema no converja se vuelven a repetir todos los pasos descriptos previamente, calculándose nuevamente la mediana para cada dimensión de las instancias de los grupos, calculando en base a esto nuevos centroides y volviendo a reasignar los casos hasta que el sistema se estabilice. Diciembre 2008 Página 14 de 20 AID - Trabajo Final Implementación P-Median Ejemplos Con el fin de evaluar el comportamiento del algoritmo se plantea un ejemplo de tamaño reducido, con datos en los cuales se espera ver una diferencia cuando se compare con otros algoritmo, por ejemplo KMeans. La característica de este ejemplo es que cuenta con una variable que se encuentra alejada en uno de sus ejes, lo cual no debiera ser un problema para el P-Median. Los datos planteados, y su diagrama de dispersión son los siguientes: Figure 2: Ejemplo realizado con Infostat. Diciembre 2008 Página 15 de 20 AID - Trabajo Final Implementación P-Median El objetivo es conformar 2 grupos con estos casos. Como primer paso se evaluará como se comporta este problema con otros algoritmos empleando el software Infostat y Weka. Utilizando Infostat, agrupamiento jerárquico con método de encadenamiento simple y distancia Euclídea al cuadrado, los resultados obtenidos fueron: Infostat, agrupamiento jerárquico con método de encadenamiento Ward y distancia Euclídea, los resultados obtenidos fueron: Diciembre 2008 Página 16 de 20 AID - Trabajo Final Implementación P-Median Infostat, agrupamiento por método No Jerárquico KMeans utilizando distancia Euclídea: Utilizando Weka, agrupamiento por SimpleKmeans, el resultado es el siguiente: kMeans ====== Number of iterations: 2 Within cluster sum of squared errors: 1.9419939418869898 Missing values globally replaced with mean/mode Cluster centroids: Cluster# Full Data 0 1 (24) (13) (11) ============================================ X 43.2917 49.4615 36 Y 25.1667 29.1538 20.4545 Attribute Clustered Instances 0 1 13 ( 54%) 11 ( 46%) Puede observarse que ninguno de los algoritmos probados hasta el momento logra obtener la solución correcta, tanto los jerárquicos como los no jerárquicos se ven influenciados por la instancia que se encuentra alejada en el eje X. Este problema podría tratarse como si fuese un caso de valor outlier, y en cuyo caso al retirarse el elemento de la muestra si se obtendrían buenas soluciones con cualquiera de los algoritmos probados hasta el momento. Diciembre 2008 Página 17 de 20 AID - Trabajo Final Implementación P-Median Empleando P-Median, el resultado fue el siguiente: PMedian ======= Number of iterations: 3 Within cluster sum of squared errors: 4661.0 Cluster centroids: Cluster# Full Data 0 1 (24) (12) (12) ============================================ X 43.2917 67.5 18 Y 25.1667 27.5 24.5 Attribute Clustered Instances 0 1 12 ( 50%) 12 ( 50%) En este último gráfico puede observarse claramente que la asignación a los grupos es la correcta, y que el valor alejado (outlier) no afecta el desempeño del algoritmo PMedian. Problemas con muchas instancias A medida que crece la cantidad de instancias comienzan los problemas de performance del algoritmo. Como fue explicado en los detalles de implementación, en cada iteración el algoritmo calcula la mediana para cada dimensión del problema. Para realizar esta tarea copia los valores numéricos a un vector y los ordena para luego acceder a el/los elementos de la mitad y obtener la mediana. Esta operación es costosa desde el punto de vista computacional, en el mejor de los casos el costo es del orden n*log2(n), siendo n la cantidad de elementos existentes en ese grupo. No obstante, las pruebas realizadas con casos de ejemplo de hasta 10.000 instancias y 2 dimensiones fueron ejecutadas en un tiempo muy similar al que consumió la ejecución del mismo problema con el algoritmo SimpleKmeans (empleando Hardware estándar, una PC hogareña modelo 2008). Ideas para futuras investigaciones Durante el desarrollo surgieron ideas para atacar el problema de la degradación de performance cuando crece en forma importante el número de instancias. Todas ellas están dirigidas a optimizar la forma de cálculo de la mediana. Buscar alternativas para que no sea requisito tener que ordenar los valores de cada grupo en cada iteración basándose en el supuesto que entre iteraciones solo una pequeña parte de las instancias se trasladan de un grupo hacia otro. Otras alternativas incluyen el uso de estructuras con indexación que permitan mantener los elementos en forma ordenada y eviten de esta forma el paso mas costoso del algoritmo: ordenar los valores de las instancias. Diciembre 2008 Página 18 de 20 AID - Trabajo Final Implementación P-Median Conclusiones Los resultados obtenidos con los ejemplos muestran que el PMedian es un algoritmo que soporta la existencia de datos lejanos sin que esto afecte la conformación de los grupos que genera. Es una alternativa que permitiría obviar la etapa de eliminación de outliers, y por consiguiente aumenta su confiabilidad ya que la existencia de algunos casos extremos no alterar la calidad de la solución resultante. En cuanto al costo computacional que implica su utilización con grandes volúmenes de datos, es un campo abierto para la investigación y el desarrollo, un desafio para el estudio y búsqueda de nuevas heurísticas y optimizaciones que junto a la evolución del Hardware permitirán que el algoritmo PMedian sea empleado masivamente en detrimento de otros métodos menos confiables como el KMeans. Detalles de Instalación Deben seguirse los siguientes pasos: 1)Instalar weka versión 3.5.8 o superior. 2) Copiar los archivos pmedian.jar y GenericPropertiesCreator.props al directorio donde se encuentra instalado Weka (en una PC con Windows en Castellano el directorio es C:\Archivos de programa\Weka-3-5). 3) Editar RunWeka.ini, modificando la asignación de la variable cp, debe quedar de la siguiente manera: cp=%CLASSPATH%;pmedian.jar 4) Ejecutar weka normalmente, el PMedian debe verse y encontrarse disponible como cualquier otro algoritmo clusterer. Disponibilidad pública Este trabajo es acompañado por un CD con todo el código fuente en Java, las librerías para poder ser utilizado libremente. Asimismo se pone a disposición el repositorio del proyecto donde se puede descargar libremente la ultima versión de todos los componentes en caso que esta tenga modificaciones posteriores a la entrega de este informe. http://www.assembla.com/wiki/show/pmedian Libre acceso al código fuente: http://trac.assembla.com/pmedian/browser A través de un cliente subversión, mediante el URL: http://svn.assembla.com/svn/pmedian Diciembre 2008 Página 19 de 20 AID - Trabajo Final Implementación P-Median Bibliografía y referencias Weka http://www.cs.waikato.ac.nz/~ml/weka/index.html Software estadístico Infostat, Manuel del usuario versión 2008 http://www.infostat.com.ar K-Means Clustering Algorithm http://mathworld.wolfram.com/K-MeansClusteringAlgorithm.html An Efficient Algorithm for the Approximate Median Selection Problem, por S. Battiato, D. Cantone, D. Catalano and G. Cincotti http://web.cs.wpi.edu/~hofri/medsel.pdf A constant-factor approximation algorithm for the -median problem http://www.cs.cornell.edu/home/eva/median.ps Some interchange algorithms for median location problems, por R A Whitaker http://www.envplan.com/abstract.cgi?id=b090119 Fast and Robust Techniques for the Euclidean p-Median Problem with Uniform Weights, por G. J. Lim_ J. Reesey A. Holder http://ramanujan.math.trinity.edu/tumath/research/reports/report107.pdf Diciembre 2008 Página 20 de 20