5. EVALUACIÓN Y RESULTADOS
5.1. Evaluación
5.1.3. Algoritmo de clasificación
El proceso de clasificación usando patrones puede llevarse a cabo de diferentes formas de acuerdo al dominio de aplicación y al tipo de patrones descubiertos. Un ejemplo de esto es el proceso propuesto en [32], en el que se usa un valor parametrizado por el usuario llamado PPC (Porcentaje de patrones para clasificación), que permite determinar el número mínimo de patrones de una clase que una serie debería contener para clasificarse en ella. En este método la ubicación temporal del patrón no es tenida en cuenta, es decir, el patrón puede aparecer en cualquier lugar de la serie temporal.
Aunque esta técnica representa una alternativa válida para algunos dominios, utilizándola como estrategia general de clasificación podría estar sujeta a algunas
71
adecuaciones. El problema principal es que una serie podría terminar asignada a una clase de la que contiene menos patrones comunes que de otra, esto se debe a que el algoritmo va evaluando los patrones de cada clase y cuando encuentra que la serie cumple con el PPC , detiene la búsqueda y no se realiza una constatación de los patrones de los conjuntos de las clases restantes. Para notar esto, suponga que se ha establecido un PPC=90% y que se tiene una serie temporal R. El algoritmo comienza evaluando los patrones de la clase A y descubre que la serie R contiene 92% de los patrones, por lo que detiene la búsqueda y no trata de constatar la cantidad de patrones de la clase B, pero podría pasar que la serie R contuviera el 96% de patrones de la clase B por lo que seguramente una mejor clasificación sería B.
Otra consecuencia del uso del PPC es que existe una probabilidad alta de que el algoritmo no logre clasificar una serie, ya que entre más alto es este valor, mayor es el número de patrones que una serie debe contener para poder ser asignada a una clase, por lo que puede darse el caso de que para ninguna clase la serie cumpla el requisito. Es cierto que lo anterior puede llegar a ser útil en ciertos dominios donde es importante que una serie contenga exactamente un número de patrones porque, por ejemplo, se haya identificado que cierto fenómeno es descrito necesariamente por un porcentaje mínimo de las sub-secuencias, pero en la mayoría de contextos, este tipo de proporciones son desconocidas y es justo la razón por la que se emprende una búsqueda de patrones. Por lo tanto se considera que si una serie contiene de manera significativa más patrones de la clase B que de la clase A, aunque estos valores estén por debajo de un PPC, esto debería indicarle al clasificador la pertenencia de la serie a la clase B.
Antes de pasar a ejecutar el algoritmo de clasificación, es necesaria la selección de patrones exclusivos, es decir, un filtro que permita obtener únicamente patrones por clase que no se encuentran en otras clases, ya que aquellas sub-secuencias que fueron halladas en varias clases no son útiles para procesos de clasificación.
En el Algoritmo 3 puede verse el proceso utilizado para la clasificación de series temporales simbólicas diseñado para la utilización de los patrones generados por el método aquí presentado. El algoritmo reúne algunas de las estrategias propuestas en [32], pero realiza adaptaciones para mejorar algunas condiciones y ajustarlo a los objetivos perseguidos en esta evaluación.
72
Algoritmo 3. Clasificación Series Temporales Simbólicas usando Patrones Frecuentes
Inputs:
exclusivePatternsPerClass: patrones exclusivos por clase
max_dist: distancia máxima permitida
TS: serie a ser clasificada Ouput:
finalClass: clase en la que la serie es asignada
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. finalClass = percentagePerClass = 0
fore ach set of patterns per class setOfPatterns in exclusivePatternsPerClass the n counterPatternsFound = 0
fore ach pattern p in setOfPatterns then
if (checkPatternInTS(p, T S, max_dist)) the n /*el m étodo chechPatternInTS verifica que el patrón pasado por parám etro esté en la serie tem poral indicada respetando el m ax_dist.*/
counterPatternsFound++ e nd if
e nd for
if((counterPatternsFound*100)/setOfPatterns.size()>=percentagePerClass) the n
finalClass = setOfPatterns.getClass() //Se obtiene la clase a la que el conjunto de patrones pertenece
percentagePerClass = (counterPatternsFound*100)/setOfPatterns.size() e nd if
e nd if
re turn finalClass
En este caso, como un paso previo a la clasificación, también se extraen los patrones exclusivos por clase como se realiza en [32], que consiste simplemente en la revisión uno a uno de los patrones de cada conjunto para descartar aquellos que están en los patrones frecuentes de otras clases. El algoritmo no hace uso de un parámetro PPC ni de ningún otro, sino que más bien asigna una clase a una serie temporal con base en el porcentaje de patrones que ha descubierto en cada conjunto, de esta manera una serie temporal pertenecerá a la clase de la que contenga el mayor porcentaje de patrones.
La búsqueda de los patrones en las series no se realiza de manera exacta, sino que se utiliza de nuevo una medida de similitud y el valor máximo de distancia (max_dist) para determinar que una serie contiene una sub-secuencia particular.
73
Incluso después de la extracción de los patrones exclusivos, es posible que una serie contenga patrones de varias clases, debido a que se está realizando una búsqueda de patrones similares y no idénticos. La finalidad del algoritmo es, por tanto, encontrar la clase donde la serie presenta mayores coincidencias con los patrones exclusivos.