SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
Universidad de La Habana
Facultad de Matemática y Computación
Búsqueda de subgrafos frecuentes
en grafos temporizados.
Autor: Keyla Herrera Ruiz
Tutor: Niusvel Acosta Mendoza
Andrés Gago Alonso
Trabajo de Diploma
presentado en opción al título de
Licenciado en Ciencia de la Computación.
Junio de 2013
I
II
Índice General
1. Introducción ................................................................................ 1
2. Marco Teórico............................................................................. 4
2.1 El conteo de Frecuencia..................................................... 6
2.2 La Generación de Candidatos............................................ 7
2.2.1 Crecimiento de Patrones............................................... 7
2.3 Formas canónicas para grafos etiquetados......................... 10
2.3.1 Codificación DFS........................................................... 12
2.4 gSpan ............................................................................... 16
2.5 Grafos Cerrados............................................................... 20
3. Desarrollo de GERM................................................................. 28
3.1 Generación de Candidatos en GERM ................................. 29
3.2 Codificación DFS en GERM ............................................... 30
3.3 El Conteo de Frecuencia en GERM. .................................. 31
3.4 Extensión más a la derecha en GERM................................ 43
3.5 Grafos cerrados temporizados ........................................... 45
4. Conclusiones ............................................................................ 50
5. Referencias............................................................................... 51
III
Agradecimientos
Le agradezco a mi tutor por la paciencia la atención y las
lecciones que aunque no lo parezca al principio, han ido y seguirán
formando a la profesional que se espera sea algún día.
A mis profesores que han puesto los granos de arena más
importantes en mi formación profesional y especialmente a aquellos
que además me han dado lecciones de vida que le han dado un vuelco
a mi forma de ser y pensar.
A mis familiares y amigos gracias por la comprensión, por estar
ahí para mí y por entender cuando yo no podía estar presente para
ellos porque los estudios me robaban prácticamente todo el tiempo.
A Amadita, gracias por la preocupación, por los cuidados, por el
cariño y sobre todo, gracias por tratarme siempre como a una hija.
A mi Gusti gracias por siempre estar a mi lado, por todos los
trabajos juntos, por ser mi compañero y amigo.
A Cami gracias, por ser el maestro que más me enseñaba, el
alumno que más me exigía, por el apoyo, la amistad, el cariño y porque
de no haber sido por él, quizás no me estuviera graduando hoy.
A mis padres que han sido la columna vertebral de todo lo que
hoy soy, los que han dado todo por mí, los que han estado siempre
conmigo incluso cuando no lo merecía, gracias por cuidarme,
enseñarme, quererme, darme la vida y ser lo más importante en ella.
IV
Opinión del Tutor
Título de la tesis: Búsqueda de subgrafos frecuentes en grafos
temporizados.
Autor: Keyla Herrera Ruiz
El trabajo de diploma antes mencionado propone un nuevo tipo
de patrones que pueden ser detectados en bases de grafos
temporizados. Estos patrones constituyen una extensión natural del
concepto “subgrafo cerrado” ya definido para colecciones de grafos
que no tienen en cuenta la componente temporal. La inclusión de la
componente temporal para definir patrones cerrados temporizados
constituye un aporte novedoso en el área de la minería de grafos.
Según el criterio de los asesores, es la primera vez que estos
conceptos se integran en una misma solución.
En nuestra opinión este resultado constituye la base para futuras
investigaciones teóricas que se desarrollan el Centro de Aplicaciones
de Tecnologías de Avanzada (CENATAV), en tareas relacionadas con
la defensa del país y la seguridad tecnológica. Además, no
descartamos su uso en proyectos futuros proyectos relacionados con el
Análisis de Redes Sociales.
Como parte de la tesis, el estudiante incluyó demostraciones
teóricas que fundamentan los algoritmos propuestos. Aunque la
implementación computacional del método no pude ser completada,
por lo complejo del tema y el poco tiempo con que se contaba, los
tutores coincidimos en que este resultado tendrá un gran impacto en la
reducción del números de patrones resultantes de la minería.
V
Para la obtención de estos resultados, Keyla ha tenido que
consultar abundante bibliografía especializada en idioma inglés y
asimilar varios conceptos provenientes de la minería de grafos, en
tiempo relativamente corto. Ella ha demostrado tener dominio de los
temas relacionados con su tema de investigación, capacidad para
resolver problemas complejos y plantearse nuevas situaciones que
potencien el desarrollo de investigaciones futuras.
Por todo lo antes expuesto, considero que esta tesis merece
obtener la calificación de Excelente (5 puntos).
1
1. Introducción
En los últimos años, con el incremento del uso de las redes
sociales ha aumentado considerablemente el interés en el análisis de
las mismas. Mientras unos solo las ven como un sitio para fomentar el
ocio, el entretenimiento o la propaganda otros se han concentrado
más en entender y teorizar sobre su estructura interna con el objetivo
de predecir su evolución. A ese tipo de análisis se le pueden dar
múltiples utilidades. Un ejemplo de estas es cuando en Facebook te
proponen “incluir a tus amigos”, una serie de personas que “quizás
conozcas”. Otro caso es, la detención de posibles grupos delincuentes
que, por sus características pudieran llegar a unirse para realizar
cualquier acto delictivo.
Para poder analizar y predecir la evolución de una red social hay
que conocer primero su estructura. Las redes se representan con
grafos temporizados. Estos grafos que no son más que una
abstracción de la evolución de la red en el tiempo, que se funden en un
grafo con la siguiente estructura: Los vértices son etiquetados con un
cadena que representa la unión de varias de las características que
posean dichos elemento. Las aristas además de representar enlaces
entre los vértices tienen integradas el tiempo en que aparecieron por
primera vez en la red. Es importante conocer además, que el primer
paso para detectar cómo evolucionará la red es encontrando todos los
patrones que sean frecuentes en el grafo que la representa. Es aquí
donde entra a jugar un papel importante la “búsqueda de subgrafos
frecuentes”.
2
La búsqueda de subgrafos frecuentes (BSF), es la tarea
fundamental que realiza la minería de grafos y tienen como objetivo,
encontrar todos los grafos que se consideran “frecuentes” en una
colección de grafos dada. Para resolver este problema se han creado
varios algoritmos que difieren entre sí, tanto en la manera de
representar las estructuras con las que se trabajan, como en la forma
en la que realizan la minería. Debido al alto costo computacional que
tienen la mayoría de ellos, se han estudiado además muchas maneras
de optimizarlos, entre las que se encuentran; “las extensiones más a la
derecha” y la búsqueda de “grafos cerrados”. El problema que se tiene
es que todos estos algoritmos trabajan, como se mencionó
anteriormente, sobre una colección de grafos etiquetados y no sobre
un grafo temporizado.
Es aquí donde entra GERM (Graph Evolution Rule Mining),
algoritmo propuesto por Björn Bringmann en [3] que precisamente hace
una adaptación de uno de los algoritmos más eficientes para realizar
BSF llamado gSpan (Graph- Based Substructure Pattern Mining) [4],
para que busque los subgrafos frecuentes en un grafo temporizado.
GSpan como caso particular de algoritmo que realiza BSF
incorpora la optimización de “la rama más a la derecha” antes
mencionada, por lo que GERM al ser una adaptación de gSpan
también la incluye. El objetivo de este trabajo es obtener una
implementación de GERM partiendo de un código de gSpan con toda
la fundamentación teórica que eso conlleva y proponer una manera de
aplicarle la optimización de “grafos cerrados”.
3
Este trabajo se divide en dos capítulos fundamentales. El
primero se encarga de introducir toda la teoría necesaria para entender
el funcionamiento de los algoritmos de BSF. Enfatiza en el crecimiento
de patrones y en la codificación DFS, pues son los pilares
fundamentales de gSpan. Además explica la poda de “la extensión más
a la derecha” y expuesta también en gSpan. Finalmente, expone los
pilares de la Teoría de Grafos cerrado y la poda de Terminación
temprana.
En el segundo capítulo trata los mismos temas que el primero,
pero esta vez concentrados en grafos temporizados. Es decir describe
las transformaciones necesarias para adaptar la teoría expuesta en el
capítulo 1 a grafos temporizados.
4
2. Marco Teórico
A lo largo de este trabajo se utilizarán algoritmos que realizan
búsqueda de subgrafos frecuentes (BSF), para ello es importante tener
claro varios conceptos que se introducirán a continuación (se asume
que el lector conoce el resto de los términos que se usan a lo largo del
capítulo y que no son definidos en el mismo).
Definición (Grafo simple, no dirigido y etiquetado)
Un grafo simple, no dirigido y etiquetado es una
tétrada en el cual es un conjunto no vacío de elementos llamados
vértices, un conjunto de pares no ordenados donde y
una función que asigna a cada arista y vértice de una
etiqueta del alfabeto .
Definición (Subgrafo)
Sean y grafos etiquetados,
se dice que es subgrafo de si se cumple que .
Definición (Vértices Adyacentes)
Sea un grafo, se dice que son
adyacentes si una arista con .
5
Definición (Camino)
Sea un grafo y se dice que existe un
camino entre y si un secuencia de vértices tal que
, y ̅̅̅̅̅ , y ̅̅̅̅̅̅̅̅̅̅ y son
adyacentes.
Definición (Grafo conexo)
Se dice que un grafo es conexo si para todo par
de vértices un camino entre y .
Definición (Isomorfismo)
Sean y dos grafos
simples, no dirigidos y etiquetados, se dice que y son isomorfos o
que hay un isomorfismo entre ellos si existe una función
biyectiva que cumple; ( )
( ) ( ) (( ))
La búsqueda de subgrafos frecuentes tradicional es el pilar
fundamental de la minería de grafos y su objetivo es; dado una
colección de grafos y un umbral de frecuencia, encontrar todos los
subgrafos cuyo soporte sea mayor que el umbral de frecuencia
definido. Para entender esto formalmente es necesario definir varios
términos que se irán tratando en el trascurso de este capítulo, pero de
manera intuitiva sería; tomar todos los posibles subgrafos de cada uno
de los grafos de la colección de entrada, ver qué cantidad de veces
“aparece” cada subgrafo en la colección y si la cantidad de
“apariciones” es mayor que cierto número previamente definido,
entonces ese subgrafo va a ser “frecuente”.
6
La solución al problema de BSF la podemos dividir en dos pasos
fundamentales:
 La generación de candidatos
 El conteo de frecuencia
2.1 El conteo de Frecuencia
Hacer un conteo de frecuencia no es más que, dado un patrón
, una colección de grafos y un umbral de frecuencia , saber si la
cantidad de ocurrencias de en es mayor que , este proceso es
sumamente importante pues el objetivo principal de nuestro problema
es encontrar todos los subgrafos que cumplan con esta condición. Para
comenzar a entender este proceso, lo primero que hay que saber es
cuándo ocurre en un grafo .
Definición (Ocurrencia)
Se dice que un subgrafo ocurre en un grafo si existe algún
subgrafo de que sea isomorfo con .
Teniendo definido cuándo ocurre un patrón en un grafo, para
saber si ese patrón es frecuente, sólo falta saber cuál es su soporte.
Definición (Soporte)
El soporte de un patrón en un conjunto de grafos
, es igual a la cantidad de grafos de que contengan
al menos una ocurrencia de .
7
Luego, se dice que un patrón es frecuente en una colección
de grafos cuando el soporte de en es mayor que el umbral de
frecuencia que se definió previo al proceso de minería.
2.2 La Generación de Candidatos
Para encontrar los posibles candidatos en cualquier algoritmo de
búsqueda de patrones frecuentes existen dos estrategias conocidas y
comúnmente utilizadas en los diferentes algoritmos que resuelven la
búsqueda de patrones frecuentes, estas son; la estrategia “Apriori” y el
“Crecimiento de patrones”, ambas estrategias basan su funcionamiento
en el cumplimiento de la propiedad de clausura descendente que
plantea;
“El soporte de un patrón P cualquiera es mayor o igual que el
soporte de cualquier patrón Q que contenga a P”.
Debido a que en este trabajo solo se utiliza la segunda
estrategia de crecimiento de patrones, esa va a ser la única en que se
profundizará.
2.2.1Crecimiento de Patrones
El principio de la búsqueda de candidatos mediante el
crecimiento de patrones se basa en la idea de, a partir de un subgrafo
8
de generar todos los posibles grafos
que se pueden formar agregando o bien una arista
y o agregando una arista y
.
Es decir, un grafo puede ser extendido o bien agregando una
arista entre dos vértices existentes en ó agregando una arista entre
un vértice que esté en y otro que no esté en él. Cuando se extiende
un grafo con una arista se denota como y se suele decir que
es un hijo de S en el espacio de búsqueda. Lo antes mencionado
no es más que un árbol donde cada nodo representa un grafo. En
los nodos que están en el nivel serán todos los subgrafos de k aristas
que se pueden obtener a partir de la colección de grafos de la entrada
del algoritmo.
Veamos esto más claro con el siguiente ejemplo:
Figura 2
Colección de grafos que se quiere minar
Figura 1
Subgrafo al que se le está haciendo el proceso de
crecimiento
9
Como se ve en la figura 3 los grafos y surgen a partir de
crecer teniendo en cuenta su isomorfismo con un subgrafo de , el
nace a partir de y de . Todos estos subgrafos son llamados
“posibles candidatos”.
La aplicación de la estrategia de crecimiento de patrones es muy
útil en los algoritmos de búsqueda de patrones frecuentes, pues casi
siempre estos algoritmos son utilizados para minar grandes
colecciones de datos y en ocasiones la memoria de una computadora
no es suficiente, por lo que es necesario encontrar formas de optimizar
el costo espacial de los algoritmos y esta estrategia lo hace, pues al
hacer una búsqueda en profundidad de los candidatos sólo se necesita
mantener almacenados en memoria la rama del espacio de búsqueda
que se está analizando.
Gracias a la clausura descendente, cuando se está generando
el espacio de búsqueda de los posibles patrones frecuentes sólo se
buscarán las aristas por las que puede ser expandida un grafo si dicho
grafo es frecuente, esto hace que el espacio de búsqueda disminuya
considerablemente, pues a la vez que se encuentre un subgrafo no
frecuente en la colección, la rama donde fue encontrado no se sigue
explorando.
Figura 3
Todos los posibles subgrafos que se pueden formar haciendo
crecimiento a partir de S en la colección de grafos 𝑮 𝟏 𝑮 𝟐 𝑮 𝟑 y 𝑮 𝟒.
10
Uno de los grandes problemas que tiene el crecimiento de
patrones es la generación de duplicados, pues es evidente que en el
espacio de búsqueda se puede llegar a un mismo subgrafo por varias
ramas. Para evitar un poco este problema se buscó una manera de
representar los grafos de manera única, para así cuando encontremos
un grafo G que ya ha sido descubierto por otra rama del espacio de
búsqueda podamos darnos cuenta que estamos en presencia de un
duplicado y no sigamos el análisis por esta rama. A esta manera de
representar los grafos se le conoce como formas canónicas para la
representación de los grafos.
2.3 Formas canónicas para grafos
etiquetados
Una forma canónica de un grafo es una secuencia de símbolos
que representen de manera única ese grafo, en la mayoría de los
casos estos símbolos representan las etiquetas de los elementos del
grafo y casi siempre describen su topología.
Para poder construir una secuencia que represente un grafo, es
necesario ordenar de cierto modo los vértices o aristas que componen
el grafo. El problema de la construcción de esa secuencia es que
existen muchas maneras de hacerla. La primera es utilizando
cualquiera de las búsquedas de árboles de coberturas. La otra sería,
definiendo un orden de los elementos por cualquiera de sus
características. El problema es que incluso siguiendo una misma
filosofía de ordenación pueden existir varias representaciones de un
mismo grafo, por ejemplo:
11
Digamos que para el ejemplo de la figura 4 ordenamos los
vértices de por etiquetas, entonces tendríamos dos secuencias
diferentes que representan al grafo , la secuencia y la
secuencia , pues los vértices con identificadores y tienen la
misma etiqueta.
Por esta razón es necesario no sólo definir una estrategia de
ordenación para representar los grafos, si no también seleccionar una
de entre todas las posibles representaciones que sea la que identifique
el grafo de manera única.
Las formas canónicas cumplen una propiedad que garantiza la
completitud de los algoritmos tratados en este trabajo. Gracias a ella
cada subgrafo podrá ser generado al menos una vez, esta propiedad
se conoce como la “Propiedad del Prefijo”. Dicha propiedad plantea
que el prefijo de una forma canónica cualquiera es la forma canónica
del grafo que representa
Existen varias formas canónicas utilizadas en varios de los
algoritmos para la búsqueda de patrones frecuentes como son; la
codificación CAM [6], la codificación DFS [6] y la codificación BFS. En
este trabajo solo se utiliza la codificación DFS y por esa razón es la
única que será explicada con profundidad.
Fig 4
Grafo al que se quiere representar con una forma canónica
12
2.3.1 Codificación DFS
Cuando se hace un recorrido DFS de un grafo, se va generando
un árbol DFS. Dependiendo del orden en que se visitan los vértices se
puede establecer una relación padre- hijo entre los vértices de .A
todos los nodos del árbol que se va a generar se les va a poner un
identificador dependiendo del orden en que son agregados a dicho
árbol. En cualquier árbol DFS de un grafo existen dos tipos de
aristas forwards y backwards. Las aristas hacia delante (forwards), son
aquellas que están representadas en . Las aristas hacia atrás
(backwards), las cuales representan un enlace entre dos nodos que
aparecen en pero ya existía un camino que los unía. Se dice que
es el conjunto de todas las aristas hacia delante de y el conjunto
de todas las aristas hacia atrás del mismo grafo.
La codificación DFS de un grafo es una secuencia de las
aristas de que siguen el orden de un recorrido DFS, teniendo en
cuenta además un orden lexicográfico entre aristas que va a ser
definido posteriormente. Para esta codificación las aristas van a ser
representadas con un quíntuplo ( ) En , y son los
identificador que le fue asignado en el recorrido DFS al vértice origen y
destino de la arista respectivamente. El resto de las componentes
son; la etiqueta del vértice de origen, la etiqueta de la arista y la
etiqueta del vértice destino.
13
Definición (Orden Lexicográfico DFS entre aristas)
Sean y dos aristas
de un grafo se dice que si y solo si se cumplen una de las
siguientes condiciones:
1. Si (2.1)
2. Si (2.2)
3. Si (2.3)
4. Si (2.4)
5. Si (2.5)
El símbolo compara las aristas de acuerdo con el orden de las
etiquetas que la conforman, es decir tiene sólo en cuenta las 3 últimas
componentes del quíntuplo. Se dice que si y solo si se cumple
una de las siguientes condiciones:
1. Si
2. Si
3. Si
De manera intuitiva, una arista es menor que una arista si la
arista es visitada primero en el recorrido DFS del grafo que las
contenga, teniendo en cuenta que las aristas de retroceso van siempre
primero que las aristas hacia delante en cualquier recorrido DFS y en el
caso en que ambas sean de retroceso entonces será menor la que su
vértice de llegada tenga un identificador menor.
Veamos cómo se ve este orden en los siguientes ejemplos:
14
Ahora ya sabemos cómo escribir un código DFS de un grafo
cualquiera, pero como se mencionó anteriormente y como se muestra
en la figura 6, un mismo grafo puede tener varios códigos DFS. Es por
esa razón y por la necesidad de que cada grafo sea representado con
una secuencia única, que se establece un orden entre códigos DFS,
para después quedarnos con el menor de todos y garantizar la unicidad
de la representación.
Árbol DFS de G donde
𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.1 de la
definición de orden
lexicográfico entre aristas
Árbol DFS de G donde
𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.2 de la
definición de orden
lexicográfico entre aristas
Árbol DFS de G donde
𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.2 de la
definición de orden
lexicográfico entre aristas
Árbol DFS de G donde
𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.3 de la
definición de orden
lexicográfico entre aristas
Árbol DFS de G donde
𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.4 de la
definición de orden
lexicográfico entre aristas
Fig 5
15
Árbol DFS Código DFS
Definición (Orden Lexicográfico entre Códigos DFS)
Sean y se dice que si y solo si se
cumple una de las siguientes condiciones:
1. ̅̅̅̅̅
2.
Fig 6
Diferentes árboles DFS del grafo G
Tabla 1
Códigos DFS de los árboles DFS de la figura 6
16
Se dice que es el código DFS mínimo de un grafo y se denota
por si código DFS de se cumple que . Por
ejemplo para el grafo de la figura 6, el código DFS mínimo sería
El proceso de encontrar el código DFS mínimo de un grafo tiene un
alto orden temporal, pues para encontrar el mínimo hay que generarlos
todos y quedarse con el menor lexicográficamente, este proceso en un
grafo denso de vértices es .
2.4 gSpan
gSpan es uno de los algoritmos diseñados para la búsqueda de
subgrafos frecuentes, el cual utiliza el crecimiento de patrones como
estrategia para la generación de candidatos, la codificación DFS para
la representación de los grafos y el conteo de frecuencia lo hace de la
misma forma que se explicó en el epígrafe 2.1.
La codificación DFS nos ayuda cuando en un espacio de
búsqueda se genera un grafo que ya ha sido analizado. Gracias a ella
nos damos cuenta que dicho grafo ya ha sido expandido y no es
necesario seguir el análisis de la rama en la que fue descubierto. Como
se explicó en el epígrafe 2.3 la comprobación necesaria para saber si
un grafo es un duplicado tiene un alto costo computacional, por ello
sería conveniente encontrar una manera de disminuir la cantidad de
candidatos duplicados que se va a generar. gSpan introduce una
manera más eficiente de generar los candidatos que el resto de los
17
algoritmos que utilizan esta estrategia. Basándose en ciertas
propiedades agrega al crecimiento de patrones una poda que permite,
expandiéndose solo por una de las ramas del árbol que representa la
codificación DFS del grafo, encontrar todos los candidatos posibles.
Para entender los cambios que se realizan es necesario primero
conocer las siguientes definiciones.
Definición (Vértice más a la derecha)
Sea un grafo y una codificación DFS de , el vértice más a
la derecha de es el último vértice en el recorrido DFS que se le hizo a
para generar .
Definición (Camino más a la derecha)
Sea un grafo y una codificación DFS de y el vértice más
a la derecha de , entonces el camino más a la derecha de es el
camino directo de la raíz del árbol DFS que representa hasta el
vértice .
Las definiciones Vértice más a la derecha y Camino más a la
derecha se ejemplifican en la figura 7
Figura 7
Camino y vértice más a la derecha
18
Definición (Extensión más a la derecha)
Sea un código DFS de un grafo y una arista que no
pertenece a . Se dice que es una extensión más a la derecha de si
une el vértice más a la derecha de con cualquier otro vértice que
este en su camino más a la derecha (extensión hacia atrás) o
introduce un nuevo vértice desde cualquiera de los vértices del camino
más a la derecha de (extensión hacia adelante).
La estrategia seguida por gSpan es; generar todos los posibles
candidatos haciendo solo extensiones más a la derecha De esta
manera el espacio de búsqueda de gSpan es un árbol donde cada
nodo representa un código DFS. En se cumple que; si el nodo es
hijo de , entonces es el resultado de hacer una extensión más a la
derecha desde . Además gracias a la propiedad del prefijo, se va a
cumplir que un código DFS mínimo va a ser siempre hijo de otro código
DFS mínimo. Es por eso que si en el recorrido del espacio de
búsqueda se encuentra algún código DFS que no sea mínimo no es
necesario seguir explorando esa rama.
Figura 8
Ejemplo de extensiones más a la derecha
19
Xifeng Yan y Jiawei Han en su artículo [1] demuestran la
completitud de este algoritmo, que sólo haciendo extensiones más a la
derecha desde códigos DFS mínimos, generan todos los posibles
candidatos a ser subgrafos frecuentes.
Algoritmo 1: gSpanMain
Algoritmo 2: gSpan
20
Inicialmente gSpanMain elimina todos los vértices y aristas de la
colección de entrada que no sean frecuentes (línea 1) esto minimiza la
colección a minar y no altera el resultado. La minería empieza a partir
de cada una de las aristas frecuentes en (Línea 4-5)
El algoritmo gSpan funciona recursivamente analizando cada
código DFS, verificando si es mínimo (línea 1) y en caso de que lo sea
lo añade a la solución (línea 3). Genera todas las posibles extensiones
más a la derecha que se pueden hacer partiendo de s y garantizando
que dicha expansión genere un subgrafo frecuente (línea 5). Luego
ordena las aristas por las que se pueden extender (línea 6) y hace el
mismo análisis para cada uno de los descendientes de s.
2.5Grafos Cerrados
Con lo visto anteriormente se resuelve el problema de la
búsqueda de subgrafos frecuentes, incluso con algunas mejoras
considerables en su eficiencia, pero qué sucede cuando el conjunto
solución del problema es inmensamente grande. Este problema puede
suceder con frecuencia, sobre todo cuando el umbral de frecuencia
mínima establecido es pequeño. Es por esto que se crearon
mecanismos que disminuyen el tamaño de la colección de subgrafos
frecuentes sin afectar los resultados.
21
Xifeng Yan y Jiawei Han proponen en [1] reducir la cantidad de
elementos en la colección de gSpan, devolviendo sólo algunos de los
subgrafos frecuentes encontrados, pero que con ellos se puedan
obtener todos los demás. Ejemplo de esto; si se tiene un grafo y
sabemos que es frecuente en una colección de grafos , es fácil ver
que cualquier subgrafo de también va a ser frecuente en . Por lo
explicado anteriormente, no sería necesario devolver todos los
subgrafos frecuentes porque puedes ser generados a partir de . Es
siguiendo esta idea que surgen los grafos cerrados.
Definición (Grafo Cerrado)
Dado un grafo y un conjunto de grafos , se dice que es
cerrado si tal que .
De manera intuitiva se dice que un grafo G es cerrado si
ninguno de sus hijos tiene su mismo soporte, con esto, si sabemos que
es frecuente, por lo explicado anteriormente no será necesario dar
como solución ninguno de sus antecesores.
Hay que tener en cuenta que si en la solución de un algoritmo
sólo se van a incluir los subgrafos frecuentes que sean cerrados, es
necesario garantizar que todos los subgrafos frecuentes de la
colección que se está minando sean cerrados o estén contenidos
dentro de algún subgrafo que sí lo sea.
22
Devolver sólo los subgrafos frecuentes cerrados es una mejora
relevante para cualquier algoritmo que realice una BSF, Esta idea se
puede utilizar además para podar más el árbol que representa el
espacio de búsqueda. Para dar todas las soluciones sólo se necesitan
los subgrafos cerrados y de alguna manera podemos conocer cuándo
en una rama no se va a encontrar ninguno. Si esto ocurre se podría
dejar de inspeccionar esa rama o como nos gusta llamarlo “podar el
árbol”. A la poda que se propone se le conoce como “Terminación
Temprana”, para entenderla veamos primero las siguientes
definiciones.
Definición (Número de Ocurrencias y Número de Correspondencia)
Dado un grafo y una colección de grafos , el
número de ocurrencias de en , , es igual a la cantidad de
subgrafos de que son isomorfos con y se denota como;
El número de correspondencia de en denotado por
∑ .
Definición (Número de Ocurrencias Extendida y Número de
Correspondencia Extendidas)
Dado un grafo , una colección de grafos y un
hijo de según el crecimiento de patrones definido en la sección 2.2,
, el número de ocurrencias extendidas denotado por
es igual a la cantidad de subgrafos de isomorfos con
que pueden ser extendidos con la arista . El número de
correspondencia extendida de en respecto a G´ es
∑ .
23
La idea de la terminación temprana es; dado un grafo G,
encontrar un hijo que ocurra siempre que ocurra , pues de
esta manera no será necesario generar más ninguna extensión desde
ya que dichas extensiones van a ser descendientes de ; esto se
define formalmente como sigue;
Definición (Ocurrencia equivalente)
Sea un grafo y un hijo de se dice que es una
ocurrencia equivalente de en una colección de grafos si se cumple
que .
El problema que tiene la ocurrencia equivalente entre dos grafos
y es que existen casos en los cuales no se puede obviar
el crecimiento de los hijos de distintos de , porque se estarían
eliminando soluciones. Veamos el ejemplo de la figura 9.
Figura 9
Ejemplo de cruce entre ocurrencias equivalentes
24
Supongamos que es el grafo y vamos a extender con
la arista , denotemos , se puede ver fácilmente que
sin embargo, si no se continua extendiendo
con otras aristas distintas de , el grafo nunca podría ser generado.
A esta situación se le conoce como “problema de los cruces” y provoca
un “Fallo en la terminación temprana”. Por ello no es suficiente conocer
que la extensión de una arista desde un grafo va a ser una
extensión equivalente, también se tienen que garantizar que no se
provoque ningún cruce a lo largo de sus descendencias. Basándose en
esta información Xifeng Yan y Jiawei Han proponen el siguiente
teorema.
Teorema (Terminación Temprana)
Dado un grafo , una colección de grafos y una extensión de ,
que cumple que si grafo
es innecesario hacer crecimiento
desde cualquier hijo de
El problema de la terminación temprana es detectar cuándo una
extensión equivalente de un grafo va a generar una situación de
cruce. Según el Teorema de la terminación temprana, es necesario
tener todos los grafos tal que . Hacerlo de esa manera es
sumamente ineficiente, por eso los autores de [5] proponen encontrar
las fallas en la Terminación temprana de forma “pasiva”. Se asume que
existen todas las condiciones necesarias para expandirse y se extiende
. Cuando en algún momento en el algoritmo se encuentra una
situación de cruce, se marca el grafo en el que se detectó y mientras
25
se retorna en los llamados recursivos se va informando a los grafos
ancestros al grafo en el que se detectó la falla del problema ocurrido.
En caso que no halla tal problema cuando un grafo va a expandir otra
de sus ramas se procede a podar el árbol.
Todas las ideas expuestas en esta sección se utilizan para crear
CloseMining, algoritmo que agrega a gSpan toda la teoría sobre grafos
cerrados, incluyendo la poda de Terminación Temprana. Es importante
aclarar que para poder vincular la poda de las extensiones más a la
derecha propuesta en gSpan con el conteo de , fue
necesario contar todas las posibles expansiones . Este valor
debe ser almacenado a pesar de que sólo se vallan a hacer las
extensiones desde la rama más a la derecha de .
Algoritmo 3: CloseMining
26
CloseMining funciona igual que gSpanMain, explicado en la
sección 2.4. CloseGraph funciona de manera recursiva, verifica que el
código DFS que se va a analizar es mínimo (Línea 1). En las líneas 3-4
se verifica si tienen algún hijo menor que cuyo soporte sea igual
que y se verifica también que no produjera fallo en la terminación
temprana pues esto implicaría que no necesita ser expandido. Luego
el algoritmo busca en la colección de grafos que se quiere minar todas
las aristas que puedan ser extendidas desde y que cumplan que
sea frecuente en las agrega a un conjunto auxiliar
(Líneas 4-5). Después intenta detectar fallos de la terminación
Algoritmo 4: CloseGraph
27
temprana en caso de que existan, verifica que el grafo s sea cerrado y
lo almacena en el conjunto solución en caso de que lo sea (Línea 7-9).
Al terminar ese proceso elimina de todas las extensiones que no
sean extensiones más a la derecha, ordena lexicográficamente las que
sí lo son y se expande por cada una de ellas (Líneas 10-14)
28
3. Desarrollo de GERM
En la representación computacional de las redes sociales se
tenía un conjunto de grafos que plasmaban el estado de la red en un
instante de tiempo dado. Es decir, se tenía un conjunto de grafos
en donde, por ejemplo, el grafo representaba la red
en el i- ésimo día de funcionamiento. Debido a esta representación se
cumple que dos grafos y , , ̅̅̅̅̅̅̅̅̅̅ ̅̅̅̅̅ cumplen que
o lo que es lo mismo es con vértices y aristas nuevas
(esto se cumple porque se asume que la eliminación de relaciones
“aristas” y de elementos “vértices” no está permitida), entonces con el
objetivo de facilitar el análisis sobre las colecciones con estas
características se representa la colección como un único grafo que
contendrá todos los vértices y las aristas de y además estas últimas
tendrán un tiempo que va a ser igual al menor subíndice de todos los
grafos que la contengan. A este tipo de grafos se le conoce como grafo
temporizado.
Figura 10
Ejemplo de creación de un grafo temporizado.
29
Definición (Grafo Temporizado)
Un grafo temporizado es un cuádruplo , donde las
tres primeras componentes de siguen la descripción de un grafo
etiquetado y es una función que para cada arista devuelve un
entero que representa el tiempo de aparición de dicha arista.
Lo que se quiere lograr con este trabajo es; siguiendo las ideas
de Xifeng y Han en su artículo [1] partiendo de gSpan crear un nuevo
algoritmo GERM que dado un grafo temporizado y un umbral de
frecuencia mínima , encontrar todos los subgrafos frecuentes en .
Como la idea es partir de gSpam, se irán explicando las modificaciones
necesarias para adaptar cada uno de los pilares fundamentales de los
algoritmos de BSF convencionales y con eso crear GERM.
3.1 Generación de Candidatos en GERM
En el capítulo anterior, se explicó el funcionamiento completo de
la generación de candidatos y se enfatizó en el crecimiento de
patrones. Para el algoritmo que se está creando la idea a seguir es
exactamente la misma que la del capítulo 2.2. En él, la manera de
encontrar todos los posibles candidatos para crecer desde un subgrafo
30
es recorrer cada ocurrencia de en la colección de grafos
, como caso particular = 1. Esto es precisamente lo que
ocurre en GERM, pues en este caso no influye que las aristas tengan
un factor tiempo.
3.2 Codificación DFS en GERM
Otro de los pilares fundamentales a la hora de encontrar
patrones frecuentes, es la manera en la que serán representados los
grafos con los que hay que trabajar. La idea de la codificación DFS
explicada en el capítulo 2 se mantiene para GERM. Esta sección se
limitará a explicar los pequeños cambios que hay que hacerle para
incluir el tiempo de las aristas en la codificación y se garantizará que la
fiabilidad del código no se pierde al realizar esas modificaciones.
Como en GERM los grafos con que se trabajan son
temporizados, es necesario representar en el código DFS el tiempo de
aparición de las aristas. Es por ello que a partir de este momento las
aristas se representarán con un séxtuplo ( ) En y
representan los identificadores en el recorrido DFS de los vértices
origen y destino respectivamente, , son las etiquetas de los vértices
antes mencionados, es la etiqueta de la arista en cuestión y el
tiempo de aparición de .
Debido a que se modificó la representación de las aristas, hay
que aplicar esa misma modificación en todas las definiciones que
dependen de ellas.
31
Definición (Orden Lexicográfico DFS entre aristas en grafos
temporizados)
Sean y ( ) dos
aristas de un grafo temporizado, se dice que si y solo si se
cumple una de las siguientes condiciones:
1. Si atendiendo a la definición de orden lexicográfico
definida en el capítulo 2
2. Si .
Una vez que está redefinida la representación de las aristas, el
código DFS de un grafo será una secuencia de aristas definidas, como
se explicó en el párrafo anterior que siguen el orden expuesto en el
capítulo 2.3.1. Para encontrar el código DFS mínimo de es necesario
definir un orden lexicográfico entre códigos DFS. Para definir ese orden
se usará también la definición de Orden Lexicográfico entre códigos DFS
definida en el capítulo anterior Esta definición se puede reutilizar porque
es independiente de la manera en que se comparan las aristas, sólo
necesita que se pueda establecer cierto orden entre ellas.
3.3 El Conteo de Frecuencia en GERM.
Para hacer un conteo de frecuencia lo primero que hay que tener
claro es, qué significa que dos grafos sean “iguales”, esta igualdad casi
siempre viene dada por la definición de isomorfismo, que en este caso sí
difiere de lo que se había definido en el capítulo anterior.
32
Figura 11
Ejemplo de isomorfismo en grafos temporizados
Hasta el momento, dos subgrafos son isomorfos cuando existía
una correspondencia entre las etiquetas de todos los vértices y aristas de
ambos grafos, utilizando para la correspondencia una función λ. Pero
esta definición no se puede aplicar de manera íntegra a los grafos
temporizados debido a la variable de tiempo que tiene cada arista, por
eso para la implementación de GERM hubo que redefinir este concepto.
Definición (Isomorfismo sobre grafos temporizados)
Sean y dos subgrafos de un grafo temporizado cualquiera, se
dice que y son isomorfos si cumplen con la definición de isomorfismo
para grafos etiquetados y además existe una constante Δ tal
que arista .
Los dos primeros grafos de la figura 11 muestran dos grafos que
son isomorfos, pues a pesar de las aristas no tener el mismo tiempo un
valor que en este caso particular es 3 para el cual se cumple que
. Los dos últimos grafos muestran un ejemplo en el
que no se cumple con la definición de isomorfismo, pues para ellos no
existe ningún que cumpla con la condición de isomorfismo.
33
Figura 12
Ejemplo de ocurrencias solapadas
Como se explica en el capítulo anterior, en los algoritmos más
utilizados para buscar patrones frecuentes, la colección de elementos a
minar es un conjunto de grafos . La manera de saber
cuándo un patrón es frecuente en es contando la cantidad de
grafos de en los que aparece una ocurrencia de . A diferencia de
estos algoritmos, GERM tiene la particularidad que no trabaja sobre un
conjunto de grafos sino en un grafo temporizado y es por esta razón
que la manera de contar las ocurrencias es diferente a lo visto
anteriormente.
Si tenemos un patrón y un grafo temporizado y queremos
contar la cantidad de veces que aparece en , de manera intuitiva
se nos podría ocurrir ver la cantidad de patrones que aparecen en
que son isomorfos con , como se muestra en el siguiente ejemplo:
Pero esto tiene un problema importante. Al permitir que dos
patrones distintos y isomorfos con tengan vértices comunes se
da pie a que se pierda el cumplimiento de una de las propiedades más
importantes en la minería de subgrafos frecuentes, la antimonotonía,
permitiendo que un patrón de tamaño que no sea frecuente
34
pueda tener algún descendiente de tamaño que sí lo sea. Por
esta razón sólo se puede tener en cuenta a la hora de calcular el
soporte de los patrones que sean disjuntos, o lo que es lo mismo,
que no tengan vértices comunes. Sabiendo esto vamos a necesitar
modificar lo que conocíamos por soporte de un patrón en un grafo
temporizado teniendo en cuenta el problema mencionado
anteriormente.
Definición (Patrones disjuntos)
Sean y , ) dos patrones, se
dice que y son disjuntos si .
Definición (Soporte de un patrón P en un grafo temporizado G)
Sea un patrón y un grafo temporizado, el soporte de en
denotado por; es igual a la cardinalidad del mayor conjunto
que se puede formar con patrones disjuntos de que sean isomorfos
con .
Como podemos ver, el problema de calcular el soporte de P en
G se resume a encontrar de todos los posibles conjuntos de patrones
disjuntos el que tenga más elementos. Este problema no es tan
sencillo, ya que para saber cuál es más grande primero habría que
conocerlos todos y generar todas las posibles combinaciones de
patrones disjuntos puede ser realmente costoso. Es por eso que Björn
Bringmann y Siegfried Nijssen en su artículo [2] proponen hacerle unas
trasformaciones al problema, para resolviendo el problema de
encontrar el máximo conjunto independiente de un grafo G´ que se
genera a partir del grafo etiquetado que estamos minando resolver el
problema inicial.
35
Para empezar este proceso, los autores proponen asociarle al
grafo temporizado un nuevo grafo en el cual cada nodo va a
representar un patrón de isomorfo al patrón que estamos analizando.
Existirá una arista entre dos vértices de ´ cuando los dos patrones
que representan dichos vértices no sean disjuntos, para el grafo de la
figura 13, el grafo ´ que le corresponde quedaría como se muestra en
la figura 14.
Luego de generar el grafo ´ el soporte que estamos calculando
sería igual al Máximo conjunto independiente del grafo ´. Nótese que,
el hecho de no existir aristas equivale a que los patrones sean
Figura 13
Ejemplo de solapamiento entre ocurrencias de un patrón en
un grafo.
Figura 14
Grafo 𝑮 correspondiente al grafo
temporizado 𝑮
36
disjuntos, por lo que el máximo conjunto independiente sería
equivalente al mayor conjunto de patrones disjuntos que es
precisamente lo que estamos buscando. Esta solución sería ideal, pero
como todos conocemos el problema de encontrar el máximo conjunto
independiente de un grafo es NP-Completo.
Por lo tanto la solución propuesta por Björn Bringmann y
Siegfried Nijssen no resuelve el problema, pero tampoco demuestra
que no se pueda resolver de otra manera.
En GERM a la hora de calcular el soporte de un patrón en un
grafo temporizado se conoce además del grafo y del patrón una lista
de todas las ocurrencias de en , llamémosle Calculo de Soporte
(CS) a dicho problema. Se demostrará que CS es NP-Duro y no el
problema del soporte de en (S) como se había definido
anteriormente. Parece un buen indicador que si el CS es NP-Duro
entonces S también lo sea, ya que este último hace lo mismo que el
CS pero con menos información. Vale aclarar que este último
comentario da un indicio pero no demuestra que S sea ni NP- Duro ni
NP-Completo.
Demostración de que CS es NP-Duro
Para demostrar que un problema es NP-Duro es necesario
demostrar que la versión de decisión de es NP-Completo. Para
demostrar que un problema es NP-Completo es necesario encontrar
otro problema que sí se haya demostrado que es NP-Completo y
hacer en tiempo polinomial un algoritmo que transforme la entrada
de en una entrada para y otro algoritmo , también con orden
polinomial que de la salida de genere una salida para .
37
Algoritmo In
Entrada: IS (𝐺 𝑘) ----------------------------------> CSd (𝐺 𝑃 𝐿,𝑘)
Salida: boolean 𝑏 <---------------------------------- boolean 𝑏
Para demostrar que CS es NP – Duro primero se definirá el
problema CSd (Versión de decisión de CS) de la siguiente manera:
Dado un grafo , un patrón , una lista de las ocurrencias de
en y un entero , se quiere saber si existen en una cantidad de
subgrafos disjuntos isomorfos con mayor o igual que .
En este caso particular se utilizará el problema Independent Set
(IS) para demostrar que la versión de decisión del Cálculo de Soporte
(CSd) es NP-Completo. El IS es un problema al que se le entra un
grafo y un entero y devuelve true si existe en algún conjunto
independiente de cardinalidad mayor o igual que .
Algoritmo In
Para transformar una entrada del IS en una entrada de CSd es
necesario que a partir de se pueda generar un grafo temporizado ,
un patrón y una lista con todas las posibles ocurrencias de en .
Sea el grado del vértice de mayor grado de , el patrón va a
ser construido de la siguiente manera:
38
será inicialmente un grafo vacío al que se le agrega un
vértice con etiqueta
Se le agregan vértices adyacente con etiqueta al vértice con
etiqueta y las aristas que los conectan, todas tendrán etiqueta y
tiempo 1.
Para generar ´ se toma cada vértice de y se crea un patrón
de la misma manera que se generó , de esta manera cada vértice
de va a estar representado en por un patrón con las mismas
etiquetas y costos temporales que . Luego por cada arista
de se toman de los patrones y dos vértices v de etiqueta
una adyacente a y otro adyacente a que tengan grado 1 y se
funden en un único vértice que sea adyacente a y a la vez. De
esta manera, si dos vértices y son adyacentes en entonces y
van a tener en algún vértice común.
Para generar basta con recorrer todos los vértices de y
cuando se encuentre un vértice con etiqueta se almacena en una
codificación DFS cualquiera del grafo formado por y sus vértices
adyacentes de etiqueta .
El parámetro que necesita el algoritmo CSd va a ser el mismo
que se le entra como parámetro al IS.
Una vez que se tiene implementado el algoritmo IN, es fácil darse
cuenta que si CSd devuelve true entonces el IS también lo retornará true.
Esto se debe a que cada nodo en G representa un patrón G` y dos
vértices son adyacentes en si y solo si los dos patrones que los
representan en ´ están solapados. Luego si en CSd existiera una
cantidad de patrones disjuntos mayor o igual que se cumpliría que en
39
existirán más de nodos independientes. Por la misma razón ya
explicada, si CSd retorna false entonces en no pueden existir una
cantidad de vértices independientes mayor o igual que .
Análisis Temporal del algoritmo In
El orden computacional del algoritmo se realiza dependiendo del
grafo de entrada . El cálculo de se puede hacer con un
recorrido del grafo, es decir . La generación de la lista de
ocurrencias se puede hacer con un simple recorrido de , y por
cada nodo de etiqueta que se encuentre se recorren sus adyacentes,
se sabe que y que es a lo sumo por tanto |V´| es a
lo sumo . La cantidad de aristas de G´ es pues por cada
vértice de G se agregan aristas, una a cada uno de sus vértices
adyacentes.
Luego recorren un grafo cualquiera es
por tanto recorrer es
y el recorrido de los adyacentes a un vértice es orden
por esto el algoritmo In es
.
Como existe un algoritmo polinomial que dado una entrada del IS
genera una entrada para el CSd y otro algoritmo también polinomial que
dada una salida del CSd genera una salida del IS entonces queda
demostrado que el problema del CSd es NP- Completo.
Es importante destacar que si el problema CSd no fuera NP-
Completo entonces para resolver CS bastaría con hacer un ciclo desde
hasta 1 y el primer valor para el que CSd retornara una solución
positiva seria precisamente la solución esperada para CS.
40
Figura 15
Ejemplo para explicar el funcionamiento del
algoritmo alternativo para el cálculo de frecuencia.
Debido a que el problema que queremos solucionar no es soluble,
necesitamos plantear una solución alternativa, que a pesar de no dar la
solución ideal al problema, devuelva un valor que se aproxime en gran
medida al valor que se quiere conseguir. Björn Bringmann y Siegfried
Nijssen en [2] proponen calcular el soporte de un patrón en un grafo
basándose en la cantidad de veces que aparecen los nodos de de
manera independiente en todas las ocurrencias de en . Es decir para
cado nodo contamos la cantidad de veces que aparece un nodo
con la misma etiqueta que en todos los patrones isomorfos con en .
Luego el soporte sería la cantidad de apariciones del vértice que menos
ocurra en , y se denota por (Aquí debido a que estamos dando
una explicación informal estamos obviando las funciones de mapeo entre
las ocurrencias y el patrón que estamos analizando) veamos esto más
claro con el ejemplo siguiente.
41
En el ejemplo de la figura 15 se quiere calcular la cantidad de
ocurrencias del patrón en el grafo Como se explicó en el párrafo
anterior, se cuenta la cantidad de veces que aparecen cada uno de los
vértices de en de manera independiente. En este caso, la cantidad
de ocurrencias de y de , de todas las ocurrencias
independientes la menor es la de y la de por tanto el valor de
soporte que se va a devolver para es .
La manera alternativa de calcular el soporte que se propone en
[2] se aleja del resultado ideal en situaciones como la del ejemplo de la
figura 16, en el cual , pues el soporte de A=3 y el de B=8.
Este problema ocurre siempre que el subgrafo al que se está
calculando el soporte tenga varios nodos con la misma etiqueta y en el
grafo que se está minando, esos nodos con la misma etiqueta son los
que provocan solapamiento entre diferentes ocurrencias de dicho
patrón.
Para la implementación de se propone el algoritmo
SupportCalculation, dado un grafo , un subgrafo y una lista O
de todas las ocurrencias de en devuelve
Figura 16
Ejemplo de situación con conflicto en el cálculo del soporte
42
El algoritmo SupportCalculation recorre todos los vértices de
(Línea 2) y utiliza la lista de elementos aux para almacenar la
cantidad de vértices con distintos identificadores que aparecen en
con la misma etiqueta de . Para ello recorre cada una de las
ocurrencias de en (Línea 4) y por cada ocurrencia busca todos los
vértices que aparecen en ella que tengan la misma etiqueta de y
almacena su identificador en aux (Líneas 4-7). Esto se hace con el
objetivo de no contar dos veces el mismo vértice de , ya que como en
las ocurrencias puede haber solapamiento un vértice puede
aparecer en más de una ocurrencia de . Luego cuando se termina
de contar la cantidad de vértices que hay en con la misma etiqueta
del vértice que se está analizando de Finalmente se comprueba que
esa cantidad sea menor que el valor mínimo encontrado hasta el
momento (Línea 8), para ello se utiliza el valor entero min.
Algoritmo 5: SupportCalculation
43
Análisis Temporal de SupportCalculation
En el algoritmo SupportCalculation las operaciones de crear la
lista vacía (List aux = ), comprobar igualdad entre etiquetas de
vértices, ver si la lista auxiliar contiene un identificador dado
(aux.Contain(id)), agregar un elemento a una lista (aux.Add(id)) y saber
la cantidad de elementos que contiene la lista auxiliar (aux.Count) se
pueden hacer El resto del algoritmo consta de 3 ciclos enlazados,
en donde recorrer los vértices de es si decimos que ,
la cantidad de ocurrencias de en es a lo sumo ( ) (⌊ ⌋),
ya que el mayor valor que puede alcanzar es y se sabe
que( ) alcanza su valor máximo cuando ⌊ ⌋ debido a que
( ) ( ). El tercer ciclo es igual que el primero porque cada
ocurrencia de en tiene la misma cantidad de vértices que por
tanto SupportCalculation es (⌊ ⁄ ⌋) .
3.4 Extensión más a la derecha en GERM
La idea principal de este trabajo es crear GERM partiendo de
gSpan y para ello además de lo tratado a lo largo de este capítulo es
necesario analizar qué sucederá con GERM si al hacer el crecimiento
de patrones sólo se hacen extensiones más a la derecha. La repuesta
a esta interrogante es; “nada”. Esto se debe a que para garantizar la
completitud del algoritmo haciendo solo extensiones más a la derecha
44
no es necesario que la colección de grafos que se está minando tenga
más de un grafo. Además la inclusión de la componente que
representa el tiempo en las aristas de los grafos temporizados sólo
repercute en la codificación DFS. Esta codificación fue modificada para
que, pese al cambio sufrido, siga teniendo un orden lexicográfico entre
aristas y entre códigos DFS que mantenga el sentido lógico de la
codificación original. El lugar donde se aplica la extensión más a la
derecha y toda la teoría que esto trae consigo es en el crecimiento de
patrones y la definición de isomorfismo no se utiliza para nada ese
proceso. Vale aclarar que la demostración de la Completitud gSpan
propuesta por Xifeng y Han en [1] es completamente aplicable a GERM
si se utiliza el orden lexicográfico entre aristas y entre códigos DFS,
establecidos para grafos temporizados.
Después de ver todos los detalles de cómo se forma GERM se
propone el algoritmo 6. Para GERMMain y GERM no se especifican los
detalles del pseudo-código porque es casi idéntico a gSpan y las
pequeñas diferencias son fácilmente visibles en el código propuesto.
Algoritmo 6: GERMMain
45
3.5 Grafos cerrados temporizados
El objetivo fundamental de este trabajo es crear una versión de
GERM que incluya la teoría de Grafos Cerrados, para ello primero se
ajustará la definición de Grafo Cerrado que se explica en la sección
2.5.
Definición (Grafos Cerrados Temporizados):
Se dice que un subgrafo es cerrado en un grafo temporizado
si no existe ningún hijo de , que cumpla que
Algoritmo 7: GERM
46
Nótese que la definición anterior sólo difiere de la definición
original en la manera de calcular el soporte del grafo que se está
analizando si es cerrado o no. Para que esta definición sea
consecuente con la idea de reducir el conjunto solución del algoritmo
devolviendo sólo los subgrafos cerrados, se tiene que cumplir que
todos los subgrafos frecuentes sean grafos cerrados temporizados o
estén contenidos dentro de algún subgrafo con esta característica. De
esta manera se garantiza que con ellos se puedan generar todos los
subgrafos frecuentes que existen.
Teorema (Completitud de Grafos Cerrados Temporizados)
Si un grafo es frecuente en un grafo temporizado se cumple
que es cerrado en o es cerrado y frecuente en G.
Demostración
Sea un Grafo Temporizado y un subgrafo frecuente de . Si es
cerrado entonces se cumple el teorema de Completitud de grafos
cerrados temporizados. Si no es cerrado entonces existe
tal que por lo que también es frecuente en .
Tomemos el camino , de descendientes de
que cumplen que ̅̅̅̅̅ , por la manera en
que se construyó se cumple además que ̅̅̅̅̅̅̅̅̅̅̅ es no
cerrado. En este camino pueden pasar dos cosas;
1. es el último vértice porque es una hoja del árbol que
representa el espacio de búsqueda y en tal caso seria
cerrado porque no tienen hijos.
47
2. es el último vértice porque no tiene ningún hijo que
cumpla que es cerrado por
definición.
En ambos casos además de ser cerrado es frecuente porque
todos los vértices que pertenecen a tiene la misma frecuencia que
y se sabe que es frecuente. Nótese que siempre tiene al menos un
grafo porque .Como es un camino formado por descendientes
de se va a cumplir que se cumple que o es cerrado o
está contenido en otro grafo que sí lo es.
Como se puede ver, el hecho de cambiar la manera de calcular
el soporte no interfiere, ni en la definición, ni en la completitud de los
subgrafos cerrados.
Como se explicó en el capítulo anterior, la teoría de grafos
cerrados disminuye el tamaño de la colección de subgrafos frecuentes
y se puede utilizar esta teoría para podar el árbol que representa el
espacio de búsqueda.
Las definiciones de número de ocurrencias y número de
Ocurrencias extendidas, se mantienen invariantes con respecto a lo
visto en la sección 2.5, pues ellas solo tienen en cuenta la cantidad de
subgrafos isomorfos al grafo que se está analizando. Las definiciones
de número de correspondencia y número de correspondencia
extendida también van a mantenerse, porque hacer el cálculo del
48
número de ocurrencias en un solo grafo es equivalente a hacerlo sobre
una colección de grafos que tenga un solo elemento. Es decir, en
grafos temporizados y , pues
en este caso , por lo que la definición de ocurrencia
equivalente también se mantiene invariante.
En grafos temporizados, al igual que en grafos etiquetados las
ocurrencias equivalentes provocan situaciones de cruces. Para que
una situación de este tipo surja no es necesario que la colección a
minar tenga más de un grafo, solo que se dé la situación ejemplificada
en la figura 9.
El algoritmo que se propone para aplicarle la teoría de grafos
cerrados a GERM no se aleja casi nada al algoritmo CloseMining visto
en el Marco Teórico. Como se explicó en este epígrafe, la teoría se
aplica completamente a grafos temporizados siempre que se utilice la
función de soporte y los órdenes lexicográficos definidos para este tipo
de grafos.
Algoritmo 8: GERMCloseMining
49
La explicación del funcionamiento de los algoritmos GERMMining y
GERMCloseGraph serán obviadas de este trabajo debido a que es la
misma que en CloseGraph.
Algoritmo 9: 𝑮𝑬𝑹𝑴𝑪𝒍𝒐𝒔𝒆𝑮𝒓𝒂𝒑𝒉
50
4. Conclusiones
Como se pudo ver a lo largo de este trabajo, la implementación
de GERM no produjo cambios significativos ni en la generación de
candidatos, ni en la codificación DFS. En esta última bastó con hacerle
pequeños cambios a las definiciones de los órdenes lexicográficos.
Básicamente la mayor modificación se hizo en “el conteo de
frecuencias”. Estos cambios no repercutieron en gran medida a la
implementación porque fueron consecuentes con la idea general del
cálculo de soporte para hacer búsqueda de subgrafos frecuentes.
Además no violaron ninguna de las propiedades necesarias para
garantizar la correctitud de este tipo de algoritmo; como la propiedad
del prefijo y la antimonotonía.
Agregarle a GERM la poda de “grafos cerrados” no provocó
complicación alguna. Se explicó y en algunos casos hasta se demostró
que toda la teoría que acompaña a los grafos cerrados es aplicable a
los grafos temporizados, siempre que se preserven los conceptos
redefinidos para ese tipo de grafos.
51
5. Referencias
[1] X. Yan, J. Han & Y. Li. Mining Frequent Graph Patterns by
Subgraph Spanning. Department of Computer Science, University of
Illinois at Urbana- Champaign, Urbana, Illinois 61801, U.S.A, April 20,
2005.
[2] B. Bringmann & S. Nijssen. What is frequent in a Single Graph?
Katholieke Universiteit Leuven Celestijnenlaan 200 A, B 3001, Leuven,
Belgium.
[3] B. Bringmann, M. Berlingerio, F. Bonchi & A. Gionis, Learning and
predicting the Evolution of Social Network. Katholieke Universiteit
Leuven, ISTI-CNR, Yahoo Research. IEEE Computer Society, 2010.
[4] X. Yan& J. Han. gSpan: Graph-Based Substructure Pattern Mining.
Department of Computer Science, University of Illinois at Urbana-
Champaign, September 3, 2002
[5] X. Yan & J. Han. CloseGraph: Mining Closed Frequent graph
Patterns.Department of Computer Science, University of Illinois at
Urbana- Champaign, Urbana, Illinois 61801.
[6] A. Gago-Alonso. Minería de subgrafos conexos frecuentes en
colecciones de grafos etiquetados. Instituto Nacional de Astrofísica,
Óptica y Electrónica. Tonantzintla, Puebla. Enero, 2010.
[7] M. R. Garey& D. S Johnson. Computer and Intractability. A guide to
the Theory of NP- Completeness, 1979.

Más contenido relacionado

Similar a Búsqueda de subgrafos frecuentes en grafos temporizados

GRAFOS_Y_ALGORITMOS_POR_A_B_T_S.pdf
GRAFOS_Y_ALGORITMOS_POR_A_B_T_S.pdfGRAFOS_Y_ALGORITMOS_POR_A_B_T_S.pdf
GRAFOS_Y_ALGORITMOS_POR_A_B_T_S.pdfssuserbe139c
 
Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.Mayra Villanueva
 
GUIA PARA EL AN€  ÁLISIS DE OBJETOS Y
GUIA PARA EL AN€  ÁLISIS DE OBJETOS YGUIA PARA EL AN€  ÁLISIS DE OBJETOS Y
GUIA PARA EL AN€  ÁLISIS DE OBJETOS YAligi12
 
Presentacion-sobre-algoritmos
Presentacion-sobre-algoritmosPresentacion-sobre-algoritmos
Presentacion-sobre-algoritmosRuByST
 
Modelos_De_Optimizacion_de_Recursos.ppt
Modelos_De_Optimizacion_de_Recursos.pptModelos_De_Optimizacion_de_Recursos.ppt
Modelos_De_Optimizacion_de_Recursos.pptDavidHernandez415383
 
Problemas de estructuras básicas del álgebra
Problemas de estructuras básicas del álgebraProblemas de estructuras básicas del álgebra
Problemas de estructuras básicas del álgebraelvirapiles1
 
El problema de las jarras de agua tema 6 prolog
El problema de las jarras de agua  tema 6 prologEl problema de las jarras de agua  tema 6 prolog
El problema de las jarras de agua tema 6 prologOscar Roberto
 
Estruc datos
Estruc datosEstruc datos
Estruc datosITECO
 
SYLLABUS MATEMÁTICAS DISCRETAS
SYLLABUS MATEMÁTICAS DISCRETASSYLLABUS MATEMÁTICAS DISCRETAS
SYLLABUS MATEMÁTICAS DISCRETASMiltonValarezo
 
Algebra Abstracta Teor a y Aplicaciones.pdf
Algebra Abstracta Teor a y Aplicaciones.pdfAlgebra Abstracta Teor a y Aplicaciones.pdf
Algebra Abstracta Teor a y Aplicaciones.pdfAmber Ford
 
Problemas de Circuitos y Sistemas Digitales _ Carmen Baena, Manuel Jesús Bell...
Problemas de Circuitos y Sistemas Digitales _ Carmen Baena, Manuel Jesús Bell...Problemas de Circuitos y Sistemas Digitales _ Carmen Baena, Manuel Jesús Bell...
Problemas de Circuitos y Sistemas Digitales _ Carmen Baena, Manuel Jesús Bell...Marco Enrique Ramos Castillo
 
Libro electronica digital problemas de circuitos y sistemas digitales
Libro electronica digital problemas de circuitos y sistemas digitalesLibro electronica digital problemas de circuitos y sistemas digitales
Libro electronica digital problemas de circuitos y sistemas digitalesPedro Vasquez
 
Persentacion TeoríA De Redes
Persentacion TeoríA De RedesPersentacion TeoríA De Redes
Persentacion TeoríA De RedesJose
 

Similar a Búsqueda de subgrafos frecuentes en grafos temporizados (20)

GRAFOS_Y_ALGORITMOS_POR_A_B_T_S.pdf
GRAFOS_Y_ALGORITMOS_POR_A_B_T_S.pdfGRAFOS_Y_ALGORITMOS_POR_A_B_T_S.pdf
GRAFOS_Y_ALGORITMOS_POR_A_B_T_S.pdf
 
MONOGRAFIA DAG.pdf
MONOGRAFIA DAG.pdfMONOGRAFIA DAG.pdf
MONOGRAFIA DAG.pdf
 
Ruta critica
Ruta criticaRuta critica
Ruta critica
 
Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.
 
Algebra_I_Charris_Aldana_Acosta-Humanez.pdf
Algebra_I_Charris_Aldana_Acosta-Humanez.pdfAlgebra_I_Charris_Aldana_Acosta-Humanez.pdf
Algebra_I_Charris_Aldana_Acosta-Humanez.pdf
 
GUIA PARA EL AN€  ÁLISIS DE OBJETOS Y
GUIA PARA EL AN€  ÁLISIS DE OBJETOS YGUIA PARA EL AN€  ÁLISIS DE OBJETOS Y
GUIA PARA EL AN€  ÁLISIS DE OBJETOS Y
 
Presentacion-sobre-algoritmos
Presentacion-sobre-algoritmosPresentacion-sobre-algoritmos
Presentacion-sobre-algoritmos
 
Modelos_De_Optimizacion_de_Recursos.ppt
Modelos_De_Optimizacion_de_Recursos.pptModelos_De_Optimizacion_de_Recursos.ppt
Modelos_De_Optimizacion_de_Recursos.ppt
 
Problemas de estructuras básicas del álgebra
Problemas de estructuras básicas del álgebraProblemas de estructuras básicas del álgebra
Problemas de estructuras básicas del álgebra
 
El problema de las jarras de agua tema 6 prolog
El problema de las jarras de agua  tema 6 prologEl problema de las jarras de agua  tema 6 prolog
El problema de las jarras de agua tema 6 prolog
 
Estruc datos
Estruc datosEstruc datos
Estruc datos
 
SYLLABUS MATEMÁTICAS DISCRETAS
SYLLABUS MATEMÁTICAS DISCRETASSYLLABUS MATEMÁTICAS DISCRETAS
SYLLABUS MATEMÁTICAS DISCRETAS
 
memoria
memoriamemoria
memoria
 
Algebra Abstracta Teor a y Aplicaciones.pdf
Algebra Abstracta Teor a y Aplicaciones.pdfAlgebra Abstracta Teor a y Aplicaciones.pdf
Algebra Abstracta Teor a y Aplicaciones.pdf
 
3.1 tommas-word
3.1 tommas-word3.1 tommas-word
3.1 tommas-word
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Problemas de Circuitos y Sistemas Digitales _ Carmen Baena, Manuel Jesús Bell...
Problemas de Circuitos y Sistemas Digitales _ Carmen Baena, Manuel Jesús Bell...Problemas de Circuitos y Sistemas Digitales _ Carmen Baena, Manuel Jesús Bell...
Problemas de Circuitos y Sistemas Digitales _ Carmen Baena, Manuel Jesús Bell...
 
Libro electronica digital problemas de circuitos y sistemas digitales
Libro electronica digital problemas de circuitos y sistemas digitalesLibro electronica digital problemas de circuitos y sistemas digitales
Libro electronica digital problemas de circuitos y sistemas digitales
 
Natural language processing
Natural language processingNatural language processing
Natural language processing
 
Persentacion TeoríA De Redes
Persentacion TeoríA De RedesPersentacion TeoríA De Redes
Persentacion TeoríA De Redes
 

Búsqueda de subgrafos frecuentes en grafos temporizados

  • 1. Universidad de La Habana Facultad de Matemática y Computación Búsqueda de subgrafos frecuentes en grafos temporizados. Autor: Keyla Herrera Ruiz Tutor: Niusvel Acosta Mendoza Andrés Gago Alonso Trabajo de Diploma presentado en opción al título de Licenciado en Ciencia de la Computación. Junio de 2013
  • 2. I
  • 3. II Índice General 1. Introducción ................................................................................ 1 2. Marco Teórico............................................................................. 4 2.1 El conteo de Frecuencia..................................................... 6 2.2 La Generación de Candidatos............................................ 7 2.2.1 Crecimiento de Patrones............................................... 7 2.3 Formas canónicas para grafos etiquetados......................... 10 2.3.1 Codificación DFS........................................................... 12 2.4 gSpan ............................................................................... 16 2.5 Grafos Cerrados............................................................... 20 3. Desarrollo de GERM................................................................. 28 3.1 Generación de Candidatos en GERM ................................. 29 3.2 Codificación DFS en GERM ............................................... 30 3.3 El Conteo de Frecuencia en GERM. .................................. 31 3.4 Extensión más a la derecha en GERM................................ 43 3.5 Grafos cerrados temporizados ........................................... 45 4. Conclusiones ............................................................................ 50 5. Referencias............................................................................... 51
  • 4. III Agradecimientos Le agradezco a mi tutor por la paciencia la atención y las lecciones que aunque no lo parezca al principio, han ido y seguirán formando a la profesional que se espera sea algún día. A mis profesores que han puesto los granos de arena más importantes en mi formación profesional y especialmente a aquellos que además me han dado lecciones de vida que le han dado un vuelco a mi forma de ser y pensar. A mis familiares y amigos gracias por la comprensión, por estar ahí para mí y por entender cuando yo no podía estar presente para ellos porque los estudios me robaban prácticamente todo el tiempo. A Amadita, gracias por la preocupación, por los cuidados, por el cariño y sobre todo, gracias por tratarme siempre como a una hija. A mi Gusti gracias por siempre estar a mi lado, por todos los trabajos juntos, por ser mi compañero y amigo. A Cami gracias, por ser el maestro que más me enseñaba, el alumno que más me exigía, por el apoyo, la amistad, el cariño y porque de no haber sido por él, quizás no me estuviera graduando hoy. A mis padres que han sido la columna vertebral de todo lo que hoy soy, los que han dado todo por mí, los que han estado siempre conmigo incluso cuando no lo merecía, gracias por cuidarme, enseñarme, quererme, darme la vida y ser lo más importante en ella.
  • 5. IV Opinión del Tutor Título de la tesis: Búsqueda de subgrafos frecuentes en grafos temporizados. Autor: Keyla Herrera Ruiz El trabajo de diploma antes mencionado propone un nuevo tipo de patrones que pueden ser detectados en bases de grafos temporizados. Estos patrones constituyen una extensión natural del concepto “subgrafo cerrado” ya definido para colecciones de grafos que no tienen en cuenta la componente temporal. La inclusión de la componente temporal para definir patrones cerrados temporizados constituye un aporte novedoso en el área de la minería de grafos. Según el criterio de los asesores, es la primera vez que estos conceptos se integran en una misma solución. En nuestra opinión este resultado constituye la base para futuras investigaciones teóricas que se desarrollan el Centro de Aplicaciones de Tecnologías de Avanzada (CENATAV), en tareas relacionadas con la defensa del país y la seguridad tecnológica. Además, no descartamos su uso en proyectos futuros proyectos relacionados con el Análisis de Redes Sociales. Como parte de la tesis, el estudiante incluyó demostraciones teóricas que fundamentan los algoritmos propuestos. Aunque la implementación computacional del método no pude ser completada, por lo complejo del tema y el poco tiempo con que se contaba, los tutores coincidimos en que este resultado tendrá un gran impacto en la reducción del números de patrones resultantes de la minería.
  • 6. V Para la obtención de estos resultados, Keyla ha tenido que consultar abundante bibliografía especializada en idioma inglés y asimilar varios conceptos provenientes de la minería de grafos, en tiempo relativamente corto. Ella ha demostrado tener dominio de los temas relacionados con su tema de investigación, capacidad para resolver problemas complejos y plantearse nuevas situaciones que potencien el desarrollo de investigaciones futuras. Por todo lo antes expuesto, considero que esta tesis merece obtener la calificación de Excelente (5 puntos).
  • 7. 1 1. Introducción En los últimos años, con el incremento del uso de las redes sociales ha aumentado considerablemente el interés en el análisis de las mismas. Mientras unos solo las ven como un sitio para fomentar el ocio, el entretenimiento o la propaganda otros se han concentrado más en entender y teorizar sobre su estructura interna con el objetivo de predecir su evolución. A ese tipo de análisis se le pueden dar múltiples utilidades. Un ejemplo de estas es cuando en Facebook te proponen “incluir a tus amigos”, una serie de personas que “quizás conozcas”. Otro caso es, la detención de posibles grupos delincuentes que, por sus características pudieran llegar a unirse para realizar cualquier acto delictivo. Para poder analizar y predecir la evolución de una red social hay que conocer primero su estructura. Las redes se representan con grafos temporizados. Estos grafos que no son más que una abstracción de la evolución de la red en el tiempo, que se funden en un grafo con la siguiente estructura: Los vértices son etiquetados con un cadena que representa la unión de varias de las características que posean dichos elemento. Las aristas además de representar enlaces entre los vértices tienen integradas el tiempo en que aparecieron por primera vez en la red. Es importante conocer además, que el primer paso para detectar cómo evolucionará la red es encontrando todos los patrones que sean frecuentes en el grafo que la representa. Es aquí donde entra a jugar un papel importante la “búsqueda de subgrafos frecuentes”.
  • 8. 2 La búsqueda de subgrafos frecuentes (BSF), es la tarea fundamental que realiza la minería de grafos y tienen como objetivo, encontrar todos los grafos que se consideran “frecuentes” en una colección de grafos dada. Para resolver este problema se han creado varios algoritmos que difieren entre sí, tanto en la manera de representar las estructuras con las que se trabajan, como en la forma en la que realizan la minería. Debido al alto costo computacional que tienen la mayoría de ellos, se han estudiado además muchas maneras de optimizarlos, entre las que se encuentran; “las extensiones más a la derecha” y la búsqueda de “grafos cerrados”. El problema que se tiene es que todos estos algoritmos trabajan, como se mencionó anteriormente, sobre una colección de grafos etiquetados y no sobre un grafo temporizado. Es aquí donde entra GERM (Graph Evolution Rule Mining), algoritmo propuesto por Björn Bringmann en [3] que precisamente hace una adaptación de uno de los algoritmos más eficientes para realizar BSF llamado gSpan (Graph- Based Substructure Pattern Mining) [4], para que busque los subgrafos frecuentes en un grafo temporizado. GSpan como caso particular de algoritmo que realiza BSF incorpora la optimización de “la rama más a la derecha” antes mencionada, por lo que GERM al ser una adaptación de gSpan también la incluye. El objetivo de este trabajo es obtener una implementación de GERM partiendo de un código de gSpan con toda la fundamentación teórica que eso conlleva y proponer una manera de aplicarle la optimización de “grafos cerrados”.
  • 9. 3 Este trabajo se divide en dos capítulos fundamentales. El primero se encarga de introducir toda la teoría necesaria para entender el funcionamiento de los algoritmos de BSF. Enfatiza en el crecimiento de patrones y en la codificación DFS, pues son los pilares fundamentales de gSpan. Además explica la poda de “la extensión más a la derecha” y expuesta también en gSpan. Finalmente, expone los pilares de la Teoría de Grafos cerrado y la poda de Terminación temprana. En el segundo capítulo trata los mismos temas que el primero, pero esta vez concentrados en grafos temporizados. Es decir describe las transformaciones necesarias para adaptar la teoría expuesta en el capítulo 1 a grafos temporizados.
  • 10. 4 2. Marco Teórico A lo largo de este trabajo se utilizarán algoritmos que realizan búsqueda de subgrafos frecuentes (BSF), para ello es importante tener claro varios conceptos que se introducirán a continuación (se asume que el lector conoce el resto de los términos que se usan a lo largo del capítulo y que no son definidos en el mismo). Definición (Grafo simple, no dirigido y etiquetado) Un grafo simple, no dirigido y etiquetado es una tétrada en el cual es un conjunto no vacío de elementos llamados vértices, un conjunto de pares no ordenados donde y una función que asigna a cada arista y vértice de una etiqueta del alfabeto . Definición (Subgrafo) Sean y grafos etiquetados, se dice que es subgrafo de si se cumple que . Definición (Vértices Adyacentes) Sea un grafo, se dice que son adyacentes si una arista con .
  • 11. 5 Definición (Camino) Sea un grafo y se dice que existe un camino entre y si un secuencia de vértices tal que , y ̅̅̅̅̅ , y ̅̅̅̅̅̅̅̅̅̅ y son adyacentes. Definición (Grafo conexo) Se dice que un grafo es conexo si para todo par de vértices un camino entre y . Definición (Isomorfismo) Sean y dos grafos simples, no dirigidos y etiquetados, se dice que y son isomorfos o que hay un isomorfismo entre ellos si existe una función biyectiva que cumple; ( ) ( ) ( ) (( )) La búsqueda de subgrafos frecuentes tradicional es el pilar fundamental de la minería de grafos y su objetivo es; dado una colección de grafos y un umbral de frecuencia, encontrar todos los subgrafos cuyo soporte sea mayor que el umbral de frecuencia definido. Para entender esto formalmente es necesario definir varios términos que se irán tratando en el trascurso de este capítulo, pero de manera intuitiva sería; tomar todos los posibles subgrafos de cada uno de los grafos de la colección de entrada, ver qué cantidad de veces “aparece” cada subgrafo en la colección y si la cantidad de “apariciones” es mayor que cierto número previamente definido, entonces ese subgrafo va a ser “frecuente”.
  • 12. 6 La solución al problema de BSF la podemos dividir en dos pasos fundamentales:  La generación de candidatos  El conteo de frecuencia 2.1 El conteo de Frecuencia Hacer un conteo de frecuencia no es más que, dado un patrón , una colección de grafos y un umbral de frecuencia , saber si la cantidad de ocurrencias de en es mayor que , este proceso es sumamente importante pues el objetivo principal de nuestro problema es encontrar todos los subgrafos que cumplan con esta condición. Para comenzar a entender este proceso, lo primero que hay que saber es cuándo ocurre en un grafo . Definición (Ocurrencia) Se dice que un subgrafo ocurre en un grafo si existe algún subgrafo de que sea isomorfo con . Teniendo definido cuándo ocurre un patrón en un grafo, para saber si ese patrón es frecuente, sólo falta saber cuál es su soporte. Definición (Soporte) El soporte de un patrón en un conjunto de grafos , es igual a la cantidad de grafos de que contengan al menos una ocurrencia de .
  • 13. 7 Luego, se dice que un patrón es frecuente en una colección de grafos cuando el soporte de en es mayor que el umbral de frecuencia que se definió previo al proceso de minería. 2.2 La Generación de Candidatos Para encontrar los posibles candidatos en cualquier algoritmo de búsqueda de patrones frecuentes existen dos estrategias conocidas y comúnmente utilizadas en los diferentes algoritmos que resuelven la búsqueda de patrones frecuentes, estas son; la estrategia “Apriori” y el “Crecimiento de patrones”, ambas estrategias basan su funcionamiento en el cumplimiento de la propiedad de clausura descendente que plantea; “El soporte de un patrón P cualquiera es mayor o igual que el soporte de cualquier patrón Q que contenga a P”. Debido a que en este trabajo solo se utiliza la segunda estrategia de crecimiento de patrones, esa va a ser la única en que se profundizará. 2.2.1Crecimiento de Patrones El principio de la búsqueda de candidatos mediante el crecimiento de patrones se basa en la idea de, a partir de un subgrafo
  • 14. 8 de generar todos los posibles grafos que se pueden formar agregando o bien una arista y o agregando una arista y . Es decir, un grafo puede ser extendido o bien agregando una arista entre dos vértices existentes en ó agregando una arista entre un vértice que esté en y otro que no esté en él. Cuando se extiende un grafo con una arista se denota como y se suele decir que es un hijo de S en el espacio de búsqueda. Lo antes mencionado no es más que un árbol donde cada nodo representa un grafo. En los nodos que están en el nivel serán todos los subgrafos de k aristas que se pueden obtener a partir de la colección de grafos de la entrada del algoritmo. Veamos esto más claro con el siguiente ejemplo: Figura 2 Colección de grafos que se quiere minar Figura 1 Subgrafo al que se le está haciendo el proceso de crecimiento
  • 15. 9 Como se ve en la figura 3 los grafos y surgen a partir de crecer teniendo en cuenta su isomorfismo con un subgrafo de , el nace a partir de y de . Todos estos subgrafos son llamados “posibles candidatos”. La aplicación de la estrategia de crecimiento de patrones es muy útil en los algoritmos de búsqueda de patrones frecuentes, pues casi siempre estos algoritmos son utilizados para minar grandes colecciones de datos y en ocasiones la memoria de una computadora no es suficiente, por lo que es necesario encontrar formas de optimizar el costo espacial de los algoritmos y esta estrategia lo hace, pues al hacer una búsqueda en profundidad de los candidatos sólo se necesita mantener almacenados en memoria la rama del espacio de búsqueda que se está analizando. Gracias a la clausura descendente, cuando se está generando el espacio de búsqueda de los posibles patrones frecuentes sólo se buscarán las aristas por las que puede ser expandida un grafo si dicho grafo es frecuente, esto hace que el espacio de búsqueda disminuya considerablemente, pues a la vez que se encuentre un subgrafo no frecuente en la colección, la rama donde fue encontrado no se sigue explorando. Figura 3 Todos los posibles subgrafos que se pueden formar haciendo crecimiento a partir de S en la colección de grafos 𝑮 𝟏 𝑮 𝟐 𝑮 𝟑 y 𝑮 𝟒.
  • 16. 10 Uno de los grandes problemas que tiene el crecimiento de patrones es la generación de duplicados, pues es evidente que en el espacio de búsqueda se puede llegar a un mismo subgrafo por varias ramas. Para evitar un poco este problema se buscó una manera de representar los grafos de manera única, para así cuando encontremos un grafo G que ya ha sido descubierto por otra rama del espacio de búsqueda podamos darnos cuenta que estamos en presencia de un duplicado y no sigamos el análisis por esta rama. A esta manera de representar los grafos se le conoce como formas canónicas para la representación de los grafos. 2.3 Formas canónicas para grafos etiquetados Una forma canónica de un grafo es una secuencia de símbolos que representen de manera única ese grafo, en la mayoría de los casos estos símbolos representan las etiquetas de los elementos del grafo y casi siempre describen su topología. Para poder construir una secuencia que represente un grafo, es necesario ordenar de cierto modo los vértices o aristas que componen el grafo. El problema de la construcción de esa secuencia es que existen muchas maneras de hacerla. La primera es utilizando cualquiera de las búsquedas de árboles de coberturas. La otra sería, definiendo un orden de los elementos por cualquiera de sus características. El problema es que incluso siguiendo una misma filosofía de ordenación pueden existir varias representaciones de un mismo grafo, por ejemplo:
  • 17. 11 Digamos que para el ejemplo de la figura 4 ordenamos los vértices de por etiquetas, entonces tendríamos dos secuencias diferentes que representan al grafo , la secuencia y la secuencia , pues los vértices con identificadores y tienen la misma etiqueta. Por esta razón es necesario no sólo definir una estrategia de ordenación para representar los grafos, si no también seleccionar una de entre todas las posibles representaciones que sea la que identifique el grafo de manera única. Las formas canónicas cumplen una propiedad que garantiza la completitud de los algoritmos tratados en este trabajo. Gracias a ella cada subgrafo podrá ser generado al menos una vez, esta propiedad se conoce como la “Propiedad del Prefijo”. Dicha propiedad plantea que el prefijo de una forma canónica cualquiera es la forma canónica del grafo que representa Existen varias formas canónicas utilizadas en varios de los algoritmos para la búsqueda de patrones frecuentes como son; la codificación CAM [6], la codificación DFS [6] y la codificación BFS. En este trabajo solo se utiliza la codificación DFS y por esa razón es la única que será explicada con profundidad. Fig 4 Grafo al que se quiere representar con una forma canónica
  • 18. 12 2.3.1 Codificación DFS Cuando se hace un recorrido DFS de un grafo, se va generando un árbol DFS. Dependiendo del orden en que se visitan los vértices se puede establecer una relación padre- hijo entre los vértices de .A todos los nodos del árbol que se va a generar se les va a poner un identificador dependiendo del orden en que son agregados a dicho árbol. En cualquier árbol DFS de un grafo existen dos tipos de aristas forwards y backwards. Las aristas hacia delante (forwards), son aquellas que están representadas en . Las aristas hacia atrás (backwards), las cuales representan un enlace entre dos nodos que aparecen en pero ya existía un camino que los unía. Se dice que es el conjunto de todas las aristas hacia delante de y el conjunto de todas las aristas hacia atrás del mismo grafo. La codificación DFS de un grafo es una secuencia de las aristas de que siguen el orden de un recorrido DFS, teniendo en cuenta además un orden lexicográfico entre aristas que va a ser definido posteriormente. Para esta codificación las aristas van a ser representadas con un quíntuplo ( ) En , y son los identificador que le fue asignado en el recorrido DFS al vértice origen y destino de la arista respectivamente. El resto de las componentes son; la etiqueta del vértice de origen, la etiqueta de la arista y la etiqueta del vértice destino.
  • 19. 13 Definición (Orden Lexicográfico DFS entre aristas) Sean y dos aristas de un grafo se dice que si y solo si se cumplen una de las siguientes condiciones: 1. Si (2.1) 2. Si (2.2) 3. Si (2.3) 4. Si (2.4) 5. Si (2.5) El símbolo compara las aristas de acuerdo con el orden de las etiquetas que la conforman, es decir tiene sólo en cuenta las 3 últimas componentes del quíntuplo. Se dice que si y solo si se cumple una de las siguientes condiciones: 1. Si 2. Si 3. Si De manera intuitiva, una arista es menor que una arista si la arista es visitada primero en el recorrido DFS del grafo que las contenga, teniendo en cuenta que las aristas de retroceso van siempre primero que las aristas hacia delante en cualquier recorrido DFS y en el caso en que ambas sean de retroceso entonces será menor la que su vértice de llegada tenga un identificador menor. Veamos cómo se ve este orden en los siguientes ejemplos:
  • 20. 14 Ahora ya sabemos cómo escribir un código DFS de un grafo cualquiera, pero como se mencionó anteriormente y como se muestra en la figura 6, un mismo grafo puede tener varios códigos DFS. Es por esa razón y por la necesidad de que cada grafo sea representado con una secuencia única, que se establece un orden entre códigos DFS, para después quedarnos con el menor de todos y garantizar la unicidad de la representación. Árbol DFS de G donde 𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.1 de la definición de orden lexicográfico entre aristas Árbol DFS de G donde 𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.2 de la definición de orden lexicográfico entre aristas Árbol DFS de G donde 𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.2 de la definición de orden lexicográfico entre aristas Árbol DFS de G donde 𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.3 de la definición de orden lexicográfico entre aristas Árbol DFS de G donde 𝒆 𝟏 𝒆 𝒆 𝟐 por el caso 2.4 de la definición de orden lexicográfico entre aristas Fig 5
  • 21. 15 Árbol DFS Código DFS Definición (Orden Lexicográfico entre Códigos DFS) Sean y se dice que si y solo si se cumple una de las siguientes condiciones: 1. ̅̅̅̅̅ 2. Fig 6 Diferentes árboles DFS del grafo G Tabla 1 Códigos DFS de los árboles DFS de la figura 6
  • 22. 16 Se dice que es el código DFS mínimo de un grafo y se denota por si código DFS de se cumple que . Por ejemplo para el grafo de la figura 6, el código DFS mínimo sería El proceso de encontrar el código DFS mínimo de un grafo tiene un alto orden temporal, pues para encontrar el mínimo hay que generarlos todos y quedarse con el menor lexicográficamente, este proceso en un grafo denso de vértices es . 2.4 gSpan gSpan es uno de los algoritmos diseñados para la búsqueda de subgrafos frecuentes, el cual utiliza el crecimiento de patrones como estrategia para la generación de candidatos, la codificación DFS para la representación de los grafos y el conteo de frecuencia lo hace de la misma forma que se explicó en el epígrafe 2.1. La codificación DFS nos ayuda cuando en un espacio de búsqueda se genera un grafo que ya ha sido analizado. Gracias a ella nos damos cuenta que dicho grafo ya ha sido expandido y no es necesario seguir el análisis de la rama en la que fue descubierto. Como se explicó en el epígrafe 2.3 la comprobación necesaria para saber si un grafo es un duplicado tiene un alto costo computacional, por ello sería conveniente encontrar una manera de disminuir la cantidad de candidatos duplicados que se va a generar. gSpan introduce una manera más eficiente de generar los candidatos que el resto de los
  • 23. 17 algoritmos que utilizan esta estrategia. Basándose en ciertas propiedades agrega al crecimiento de patrones una poda que permite, expandiéndose solo por una de las ramas del árbol que representa la codificación DFS del grafo, encontrar todos los candidatos posibles. Para entender los cambios que se realizan es necesario primero conocer las siguientes definiciones. Definición (Vértice más a la derecha) Sea un grafo y una codificación DFS de , el vértice más a la derecha de es el último vértice en el recorrido DFS que se le hizo a para generar . Definición (Camino más a la derecha) Sea un grafo y una codificación DFS de y el vértice más a la derecha de , entonces el camino más a la derecha de es el camino directo de la raíz del árbol DFS que representa hasta el vértice . Las definiciones Vértice más a la derecha y Camino más a la derecha se ejemplifican en la figura 7 Figura 7 Camino y vértice más a la derecha
  • 24. 18 Definición (Extensión más a la derecha) Sea un código DFS de un grafo y una arista que no pertenece a . Se dice que es una extensión más a la derecha de si une el vértice más a la derecha de con cualquier otro vértice que este en su camino más a la derecha (extensión hacia atrás) o introduce un nuevo vértice desde cualquiera de los vértices del camino más a la derecha de (extensión hacia adelante). La estrategia seguida por gSpan es; generar todos los posibles candidatos haciendo solo extensiones más a la derecha De esta manera el espacio de búsqueda de gSpan es un árbol donde cada nodo representa un código DFS. En se cumple que; si el nodo es hijo de , entonces es el resultado de hacer una extensión más a la derecha desde . Además gracias a la propiedad del prefijo, se va a cumplir que un código DFS mínimo va a ser siempre hijo de otro código DFS mínimo. Es por eso que si en el recorrido del espacio de búsqueda se encuentra algún código DFS que no sea mínimo no es necesario seguir explorando esa rama. Figura 8 Ejemplo de extensiones más a la derecha
  • 25. 19 Xifeng Yan y Jiawei Han en su artículo [1] demuestran la completitud de este algoritmo, que sólo haciendo extensiones más a la derecha desde códigos DFS mínimos, generan todos los posibles candidatos a ser subgrafos frecuentes. Algoritmo 1: gSpanMain Algoritmo 2: gSpan
  • 26. 20 Inicialmente gSpanMain elimina todos los vértices y aristas de la colección de entrada que no sean frecuentes (línea 1) esto minimiza la colección a minar y no altera el resultado. La minería empieza a partir de cada una de las aristas frecuentes en (Línea 4-5) El algoritmo gSpan funciona recursivamente analizando cada código DFS, verificando si es mínimo (línea 1) y en caso de que lo sea lo añade a la solución (línea 3). Genera todas las posibles extensiones más a la derecha que se pueden hacer partiendo de s y garantizando que dicha expansión genere un subgrafo frecuente (línea 5). Luego ordena las aristas por las que se pueden extender (línea 6) y hace el mismo análisis para cada uno de los descendientes de s. 2.5Grafos Cerrados Con lo visto anteriormente se resuelve el problema de la búsqueda de subgrafos frecuentes, incluso con algunas mejoras considerables en su eficiencia, pero qué sucede cuando el conjunto solución del problema es inmensamente grande. Este problema puede suceder con frecuencia, sobre todo cuando el umbral de frecuencia mínima establecido es pequeño. Es por esto que se crearon mecanismos que disminuyen el tamaño de la colección de subgrafos frecuentes sin afectar los resultados.
  • 27. 21 Xifeng Yan y Jiawei Han proponen en [1] reducir la cantidad de elementos en la colección de gSpan, devolviendo sólo algunos de los subgrafos frecuentes encontrados, pero que con ellos se puedan obtener todos los demás. Ejemplo de esto; si se tiene un grafo y sabemos que es frecuente en una colección de grafos , es fácil ver que cualquier subgrafo de también va a ser frecuente en . Por lo explicado anteriormente, no sería necesario devolver todos los subgrafos frecuentes porque puedes ser generados a partir de . Es siguiendo esta idea que surgen los grafos cerrados. Definición (Grafo Cerrado) Dado un grafo y un conjunto de grafos , se dice que es cerrado si tal que . De manera intuitiva se dice que un grafo G es cerrado si ninguno de sus hijos tiene su mismo soporte, con esto, si sabemos que es frecuente, por lo explicado anteriormente no será necesario dar como solución ninguno de sus antecesores. Hay que tener en cuenta que si en la solución de un algoritmo sólo se van a incluir los subgrafos frecuentes que sean cerrados, es necesario garantizar que todos los subgrafos frecuentes de la colección que se está minando sean cerrados o estén contenidos dentro de algún subgrafo que sí lo sea.
  • 28. 22 Devolver sólo los subgrafos frecuentes cerrados es una mejora relevante para cualquier algoritmo que realice una BSF, Esta idea se puede utilizar además para podar más el árbol que representa el espacio de búsqueda. Para dar todas las soluciones sólo se necesitan los subgrafos cerrados y de alguna manera podemos conocer cuándo en una rama no se va a encontrar ninguno. Si esto ocurre se podría dejar de inspeccionar esa rama o como nos gusta llamarlo “podar el árbol”. A la poda que se propone se le conoce como “Terminación Temprana”, para entenderla veamos primero las siguientes definiciones. Definición (Número de Ocurrencias y Número de Correspondencia) Dado un grafo y una colección de grafos , el número de ocurrencias de en , , es igual a la cantidad de subgrafos de que son isomorfos con y se denota como; El número de correspondencia de en denotado por ∑ . Definición (Número de Ocurrencias Extendida y Número de Correspondencia Extendidas) Dado un grafo , una colección de grafos y un hijo de según el crecimiento de patrones definido en la sección 2.2, , el número de ocurrencias extendidas denotado por es igual a la cantidad de subgrafos de isomorfos con que pueden ser extendidos con la arista . El número de correspondencia extendida de en respecto a G´ es ∑ .
  • 29. 23 La idea de la terminación temprana es; dado un grafo G, encontrar un hijo que ocurra siempre que ocurra , pues de esta manera no será necesario generar más ninguna extensión desde ya que dichas extensiones van a ser descendientes de ; esto se define formalmente como sigue; Definición (Ocurrencia equivalente) Sea un grafo y un hijo de se dice que es una ocurrencia equivalente de en una colección de grafos si se cumple que . El problema que tiene la ocurrencia equivalente entre dos grafos y es que existen casos en los cuales no se puede obviar el crecimiento de los hijos de distintos de , porque se estarían eliminando soluciones. Veamos el ejemplo de la figura 9. Figura 9 Ejemplo de cruce entre ocurrencias equivalentes
  • 30. 24 Supongamos que es el grafo y vamos a extender con la arista , denotemos , se puede ver fácilmente que sin embargo, si no se continua extendiendo con otras aristas distintas de , el grafo nunca podría ser generado. A esta situación se le conoce como “problema de los cruces” y provoca un “Fallo en la terminación temprana”. Por ello no es suficiente conocer que la extensión de una arista desde un grafo va a ser una extensión equivalente, también se tienen que garantizar que no se provoque ningún cruce a lo largo de sus descendencias. Basándose en esta información Xifeng Yan y Jiawei Han proponen el siguiente teorema. Teorema (Terminación Temprana) Dado un grafo , una colección de grafos y una extensión de , que cumple que si grafo es innecesario hacer crecimiento desde cualquier hijo de El problema de la terminación temprana es detectar cuándo una extensión equivalente de un grafo va a generar una situación de cruce. Según el Teorema de la terminación temprana, es necesario tener todos los grafos tal que . Hacerlo de esa manera es sumamente ineficiente, por eso los autores de [5] proponen encontrar las fallas en la Terminación temprana de forma “pasiva”. Se asume que existen todas las condiciones necesarias para expandirse y se extiende . Cuando en algún momento en el algoritmo se encuentra una situación de cruce, se marca el grafo en el que se detectó y mientras
  • 31. 25 se retorna en los llamados recursivos se va informando a los grafos ancestros al grafo en el que se detectó la falla del problema ocurrido. En caso que no halla tal problema cuando un grafo va a expandir otra de sus ramas se procede a podar el árbol. Todas las ideas expuestas en esta sección se utilizan para crear CloseMining, algoritmo que agrega a gSpan toda la teoría sobre grafos cerrados, incluyendo la poda de Terminación Temprana. Es importante aclarar que para poder vincular la poda de las extensiones más a la derecha propuesta en gSpan con el conteo de , fue necesario contar todas las posibles expansiones . Este valor debe ser almacenado a pesar de que sólo se vallan a hacer las extensiones desde la rama más a la derecha de . Algoritmo 3: CloseMining
  • 32. 26 CloseMining funciona igual que gSpanMain, explicado en la sección 2.4. CloseGraph funciona de manera recursiva, verifica que el código DFS que se va a analizar es mínimo (Línea 1). En las líneas 3-4 se verifica si tienen algún hijo menor que cuyo soporte sea igual que y se verifica también que no produjera fallo en la terminación temprana pues esto implicaría que no necesita ser expandido. Luego el algoritmo busca en la colección de grafos que se quiere minar todas las aristas que puedan ser extendidas desde y que cumplan que sea frecuente en las agrega a un conjunto auxiliar (Líneas 4-5). Después intenta detectar fallos de la terminación Algoritmo 4: CloseGraph
  • 33. 27 temprana en caso de que existan, verifica que el grafo s sea cerrado y lo almacena en el conjunto solución en caso de que lo sea (Línea 7-9). Al terminar ese proceso elimina de todas las extensiones que no sean extensiones más a la derecha, ordena lexicográficamente las que sí lo son y se expande por cada una de ellas (Líneas 10-14)
  • 34. 28 3. Desarrollo de GERM En la representación computacional de las redes sociales se tenía un conjunto de grafos que plasmaban el estado de la red en un instante de tiempo dado. Es decir, se tenía un conjunto de grafos en donde, por ejemplo, el grafo representaba la red en el i- ésimo día de funcionamiento. Debido a esta representación se cumple que dos grafos y , , ̅̅̅̅̅̅̅̅̅̅ ̅̅̅̅̅ cumplen que o lo que es lo mismo es con vértices y aristas nuevas (esto se cumple porque se asume que la eliminación de relaciones “aristas” y de elementos “vértices” no está permitida), entonces con el objetivo de facilitar el análisis sobre las colecciones con estas características se representa la colección como un único grafo que contendrá todos los vértices y las aristas de y además estas últimas tendrán un tiempo que va a ser igual al menor subíndice de todos los grafos que la contengan. A este tipo de grafos se le conoce como grafo temporizado. Figura 10 Ejemplo de creación de un grafo temporizado.
  • 35. 29 Definición (Grafo Temporizado) Un grafo temporizado es un cuádruplo , donde las tres primeras componentes de siguen la descripción de un grafo etiquetado y es una función que para cada arista devuelve un entero que representa el tiempo de aparición de dicha arista. Lo que se quiere lograr con este trabajo es; siguiendo las ideas de Xifeng y Han en su artículo [1] partiendo de gSpan crear un nuevo algoritmo GERM que dado un grafo temporizado y un umbral de frecuencia mínima , encontrar todos los subgrafos frecuentes en . Como la idea es partir de gSpam, se irán explicando las modificaciones necesarias para adaptar cada uno de los pilares fundamentales de los algoritmos de BSF convencionales y con eso crear GERM. 3.1 Generación de Candidatos en GERM En el capítulo anterior, se explicó el funcionamiento completo de la generación de candidatos y se enfatizó en el crecimiento de patrones. Para el algoritmo que se está creando la idea a seguir es exactamente la misma que la del capítulo 2.2. En él, la manera de encontrar todos los posibles candidatos para crecer desde un subgrafo
  • 36. 30 es recorrer cada ocurrencia de en la colección de grafos , como caso particular = 1. Esto es precisamente lo que ocurre en GERM, pues en este caso no influye que las aristas tengan un factor tiempo. 3.2 Codificación DFS en GERM Otro de los pilares fundamentales a la hora de encontrar patrones frecuentes, es la manera en la que serán representados los grafos con los que hay que trabajar. La idea de la codificación DFS explicada en el capítulo 2 se mantiene para GERM. Esta sección se limitará a explicar los pequeños cambios que hay que hacerle para incluir el tiempo de las aristas en la codificación y se garantizará que la fiabilidad del código no se pierde al realizar esas modificaciones. Como en GERM los grafos con que se trabajan son temporizados, es necesario representar en el código DFS el tiempo de aparición de las aristas. Es por ello que a partir de este momento las aristas se representarán con un séxtuplo ( ) En y representan los identificadores en el recorrido DFS de los vértices origen y destino respectivamente, , son las etiquetas de los vértices antes mencionados, es la etiqueta de la arista en cuestión y el tiempo de aparición de . Debido a que se modificó la representación de las aristas, hay que aplicar esa misma modificación en todas las definiciones que dependen de ellas.
  • 37. 31 Definición (Orden Lexicográfico DFS entre aristas en grafos temporizados) Sean y ( ) dos aristas de un grafo temporizado, se dice que si y solo si se cumple una de las siguientes condiciones: 1. Si atendiendo a la definición de orden lexicográfico definida en el capítulo 2 2. Si . Una vez que está redefinida la representación de las aristas, el código DFS de un grafo será una secuencia de aristas definidas, como se explicó en el párrafo anterior que siguen el orden expuesto en el capítulo 2.3.1. Para encontrar el código DFS mínimo de es necesario definir un orden lexicográfico entre códigos DFS. Para definir ese orden se usará también la definición de Orden Lexicográfico entre códigos DFS definida en el capítulo anterior Esta definición se puede reutilizar porque es independiente de la manera en que se comparan las aristas, sólo necesita que se pueda establecer cierto orden entre ellas. 3.3 El Conteo de Frecuencia en GERM. Para hacer un conteo de frecuencia lo primero que hay que tener claro es, qué significa que dos grafos sean “iguales”, esta igualdad casi siempre viene dada por la definición de isomorfismo, que en este caso sí difiere de lo que se había definido en el capítulo anterior.
  • 38. 32 Figura 11 Ejemplo de isomorfismo en grafos temporizados Hasta el momento, dos subgrafos son isomorfos cuando existía una correspondencia entre las etiquetas de todos los vértices y aristas de ambos grafos, utilizando para la correspondencia una función λ. Pero esta definición no se puede aplicar de manera íntegra a los grafos temporizados debido a la variable de tiempo que tiene cada arista, por eso para la implementación de GERM hubo que redefinir este concepto. Definición (Isomorfismo sobre grafos temporizados) Sean y dos subgrafos de un grafo temporizado cualquiera, se dice que y son isomorfos si cumplen con la definición de isomorfismo para grafos etiquetados y además existe una constante Δ tal que arista . Los dos primeros grafos de la figura 11 muestran dos grafos que son isomorfos, pues a pesar de las aristas no tener el mismo tiempo un valor que en este caso particular es 3 para el cual se cumple que . Los dos últimos grafos muestran un ejemplo en el que no se cumple con la definición de isomorfismo, pues para ellos no existe ningún que cumpla con la condición de isomorfismo.
  • 39. 33 Figura 12 Ejemplo de ocurrencias solapadas Como se explica en el capítulo anterior, en los algoritmos más utilizados para buscar patrones frecuentes, la colección de elementos a minar es un conjunto de grafos . La manera de saber cuándo un patrón es frecuente en es contando la cantidad de grafos de en los que aparece una ocurrencia de . A diferencia de estos algoritmos, GERM tiene la particularidad que no trabaja sobre un conjunto de grafos sino en un grafo temporizado y es por esta razón que la manera de contar las ocurrencias es diferente a lo visto anteriormente. Si tenemos un patrón y un grafo temporizado y queremos contar la cantidad de veces que aparece en , de manera intuitiva se nos podría ocurrir ver la cantidad de patrones que aparecen en que son isomorfos con , como se muestra en el siguiente ejemplo: Pero esto tiene un problema importante. Al permitir que dos patrones distintos y isomorfos con tengan vértices comunes se da pie a que se pierda el cumplimiento de una de las propiedades más importantes en la minería de subgrafos frecuentes, la antimonotonía, permitiendo que un patrón de tamaño que no sea frecuente
  • 40. 34 pueda tener algún descendiente de tamaño que sí lo sea. Por esta razón sólo se puede tener en cuenta a la hora de calcular el soporte de los patrones que sean disjuntos, o lo que es lo mismo, que no tengan vértices comunes. Sabiendo esto vamos a necesitar modificar lo que conocíamos por soporte de un patrón en un grafo temporizado teniendo en cuenta el problema mencionado anteriormente. Definición (Patrones disjuntos) Sean y , ) dos patrones, se dice que y son disjuntos si . Definición (Soporte de un patrón P en un grafo temporizado G) Sea un patrón y un grafo temporizado, el soporte de en denotado por; es igual a la cardinalidad del mayor conjunto que se puede formar con patrones disjuntos de que sean isomorfos con . Como podemos ver, el problema de calcular el soporte de P en G se resume a encontrar de todos los posibles conjuntos de patrones disjuntos el que tenga más elementos. Este problema no es tan sencillo, ya que para saber cuál es más grande primero habría que conocerlos todos y generar todas las posibles combinaciones de patrones disjuntos puede ser realmente costoso. Es por eso que Björn Bringmann y Siegfried Nijssen en su artículo [2] proponen hacerle unas trasformaciones al problema, para resolviendo el problema de encontrar el máximo conjunto independiente de un grafo G´ que se genera a partir del grafo etiquetado que estamos minando resolver el problema inicial.
  • 41. 35 Para empezar este proceso, los autores proponen asociarle al grafo temporizado un nuevo grafo en el cual cada nodo va a representar un patrón de isomorfo al patrón que estamos analizando. Existirá una arista entre dos vértices de ´ cuando los dos patrones que representan dichos vértices no sean disjuntos, para el grafo de la figura 13, el grafo ´ que le corresponde quedaría como se muestra en la figura 14. Luego de generar el grafo ´ el soporte que estamos calculando sería igual al Máximo conjunto independiente del grafo ´. Nótese que, el hecho de no existir aristas equivale a que los patrones sean Figura 13 Ejemplo de solapamiento entre ocurrencias de un patrón en un grafo. Figura 14 Grafo 𝑮 correspondiente al grafo temporizado 𝑮
  • 42. 36 disjuntos, por lo que el máximo conjunto independiente sería equivalente al mayor conjunto de patrones disjuntos que es precisamente lo que estamos buscando. Esta solución sería ideal, pero como todos conocemos el problema de encontrar el máximo conjunto independiente de un grafo es NP-Completo. Por lo tanto la solución propuesta por Björn Bringmann y Siegfried Nijssen no resuelve el problema, pero tampoco demuestra que no se pueda resolver de otra manera. En GERM a la hora de calcular el soporte de un patrón en un grafo temporizado se conoce además del grafo y del patrón una lista de todas las ocurrencias de en , llamémosle Calculo de Soporte (CS) a dicho problema. Se demostrará que CS es NP-Duro y no el problema del soporte de en (S) como se había definido anteriormente. Parece un buen indicador que si el CS es NP-Duro entonces S también lo sea, ya que este último hace lo mismo que el CS pero con menos información. Vale aclarar que este último comentario da un indicio pero no demuestra que S sea ni NP- Duro ni NP-Completo. Demostración de que CS es NP-Duro Para demostrar que un problema es NP-Duro es necesario demostrar que la versión de decisión de es NP-Completo. Para demostrar que un problema es NP-Completo es necesario encontrar otro problema que sí se haya demostrado que es NP-Completo y hacer en tiempo polinomial un algoritmo que transforme la entrada de en una entrada para y otro algoritmo , también con orden polinomial que de la salida de genere una salida para .
  • 43. 37 Algoritmo In Entrada: IS (𝐺 𝑘) ----------------------------------> CSd (𝐺 𝑃 𝐿,𝑘) Salida: boolean 𝑏 <---------------------------------- boolean 𝑏 Para demostrar que CS es NP – Duro primero se definirá el problema CSd (Versión de decisión de CS) de la siguiente manera: Dado un grafo , un patrón , una lista de las ocurrencias de en y un entero , se quiere saber si existen en una cantidad de subgrafos disjuntos isomorfos con mayor o igual que . En este caso particular se utilizará el problema Independent Set (IS) para demostrar que la versión de decisión del Cálculo de Soporte (CSd) es NP-Completo. El IS es un problema al que se le entra un grafo y un entero y devuelve true si existe en algún conjunto independiente de cardinalidad mayor o igual que . Algoritmo In Para transformar una entrada del IS en una entrada de CSd es necesario que a partir de se pueda generar un grafo temporizado , un patrón y una lista con todas las posibles ocurrencias de en . Sea el grado del vértice de mayor grado de , el patrón va a ser construido de la siguiente manera:
  • 44. 38 será inicialmente un grafo vacío al que se le agrega un vértice con etiqueta Se le agregan vértices adyacente con etiqueta al vértice con etiqueta y las aristas que los conectan, todas tendrán etiqueta y tiempo 1. Para generar ´ se toma cada vértice de y se crea un patrón de la misma manera que se generó , de esta manera cada vértice de va a estar representado en por un patrón con las mismas etiquetas y costos temporales que . Luego por cada arista de se toman de los patrones y dos vértices v de etiqueta una adyacente a y otro adyacente a que tengan grado 1 y se funden en un único vértice que sea adyacente a y a la vez. De esta manera, si dos vértices y son adyacentes en entonces y van a tener en algún vértice común. Para generar basta con recorrer todos los vértices de y cuando se encuentre un vértice con etiqueta se almacena en una codificación DFS cualquiera del grafo formado por y sus vértices adyacentes de etiqueta . El parámetro que necesita el algoritmo CSd va a ser el mismo que se le entra como parámetro al IS. Una vez que se tiene implementado el algoritmo IN, es fácil darse cuenta que si CSd devuelve true entonces el IS también lo retornará true. Esto se debe a que cada nodo en G representa un patrón G` y dos vértices son adyacentes en si y solo si los dos patrones que los representan en ´ están solapados. Luego si en CSd existiera una cantidad de patrones disjuntos mayor o igual que se cumpliría que en
  • 45. 39 existirán más de nodos independientes. Por la misma razón ya explicada, si CSd retorna false entonces en no pueden existir una cantidad de vértices independientes mayor o igual que . Análisis Temporal del algoritmo In El orden computacional del algoritmo se realiza dependiendo del grafo de entrada . El cálculo de se puede hacer con un recorrido del grafo, es decir . La generación de la lista de ocurrencias se puede hacer con un simple recorrido de , y por cada nodo de etiqueta que se encuentre se recorren sus adyacentes, se sabe que y que es a lo sumo por tanto |V´| es a lo sumo . La cantidad de aristas de G´ es pues por cada vértice de G se agregan aristas, una a cada uno de sus vértices adyacentes. Luego recorren un grafo cualquiera es por tanto recorrer es y el recorrido de los adyacentes a un vértice es orden por esto el algoritmo In es . Como existe un algoritmo polinomial que dado una entrada del IS genera una entrada para el CSd y otro algoritmo también polinomial que dada una salida del CSd genera una salida del IS entonces queda demostrado que el problema del CSd es NP- Completo. Es importante destacar que si el problema CSd no fuera NP- Completo entonces para resolver CS bastaría con hacer un ciclo desde hasta 1 y el primer valor para el que CSd retornara una solución positiva seria precisamente la solución esperada para CS.
  • 46. 40 Figura 15 Ejemplo para explicar el funcionamiento del algoritmo alternativo para el cálculo de frecuencia. Debido a que el problema que queremos solucionar no es soluble, necesitamos plantear una solución alternativa, que a pesar de no dar la solución ideal al problema, devuelva un valor que se aproxime en gran medida al valor que se quiere conseguir. Björn Bringmann y Siegfried Nijssen en [2] proponen calcular el soporte de un patrón en un grafo basándose en la cantidad de veces que aparecen los nodos de de manera independiente en todas las ocurrencias de en . Es decir para cado nodo contamos la cantidad de veces que aparece un nodo con la misma etiqueta que en todos los patrones isomorfos con en . Luego el soporte sería la cantidad de apariciones del vértice que menos ocurra en , y se denota por (Aquí debido a que estamos dando una explicación informal estamos obviando las funciones de mapeo entre las ocurrencias y el patrón que estamos analizando) veamos esto más claro con el ejemplo siguiente.
  • 47. 41 En el ejemplo de la figura 15 se quiere calcular la cantidad de ocurrencias del patrón en el grafo Como se explicó en el párrafo anterior, se cuenta la cantidad de veces que aparecen cada uno de los vértices de en de manera independiente. En este caso, la cantidad de ocurrencias de y de , de todas las ocurrencias independientes la menor es la de y la de por tanto el valor de soporte que se va a devolver para es . La manera alternativa de calcular el soporte que se propone en [2] se aleja del resultado ideal en situaciones como la del ejemplo de la figura 16, en el cual , pues el soporte de A=3 y el de B=8. Este problema ocurre siempre que el subgrafo al que se está calculando el soporte tenga varios nodos con la misma etiqueta y en el grafo que se está minando, esos nodos con la misma etiqueta son los que provocan solapamiento entre diferentes ocurrencias de dicho patrón. Para la implementación de se propone el algoritmo SupportCalculation, dado un grafo , un subgrafo y una lista O de todas las ocurrencias de en devuelve Figura 16 Ejemplo de situación con conflicto en el cálculo del soporte
  • 48. 42 El algoritmo SupportCalculation recorre todos los vértices de (Línea 2) y utiliza la lista de elementos aux para almacenar la cantidad de vértices con distintos identificadores que aparecen en con la misma etiqueta de . Para ello recorre cada una de las ocurrencias de en (Línea 4) y por cada ocurrencia busca todos los vértices que aparecen en ella que tengan la misma etiqueta de y almacena su identificador en aux (Líneas 4-7). Esto se hace con el objetivo de no contar dos veces el mismo vértice de , ya que como en las ocurrencias puede haber solapamiento un vértice puede aparecer en más de una ocurrencia de . Luego cuando se termina de contar la cantidad de vértices que hay en con la misma etiqueta del vértice que se está analizando de Finalmente se comprueba que esa cantidad sea menor que el valor mínimo encontrado hasta el momento (Línea 8), para ello se utiliza el valor entero min. Algoritmo 5: SupportCalculation
  • 49. 43 Análisis Temporal de SupportCalculation En el algoritmo SupportCalculation las operaciones de crear la lista vacía (List aux = ), comprobar igualdad entre etiquetas de vértices, ver si la lista auxiliar contiene un identificador dado (aux.Contain(id)), agregar un elemento a una lista (aux.Add(id)) y saber la cantidad de elementos que contiene la lista auxiliar (aux.Count) se pueden hacer El resto del algoritmo consta de 3 ciclos enlazados, en donde recorrer los vértices de es si decimos que , la cantidad de ocurrencias de en es a lo sumo ( ) (⌊ ⌋), ya que el mayor valor que puede alcanzar es y se sabe que( ) alcanza su valor máximo cuando ⌊ ⌋ debido a que ( ) ( ). El tercer ciclo es igual que el primero porque cada ocurrencia de en tiene la misma cantidad de vértices que por tanto SupportCalculation es (⌊ ⁄ ⌋) . 3.4 Extensión más a la derecha en GERM La idea principal de este trabajo es crear GERM partiendo de gSpan y para ello además de lo tratado a lo largo de este capítulo es necesario analizar qué sucederá con GERM si al hacer el crecimiento de patrones sólo se hacen extensiones más a la derecha. La repuesta a esta interrogante es; “nada”. Esto se debe a que para garantizar la completitud del algoritmo haciendo solo extensiones más a la derecha
  • 50. 44 no es necesario que la colección de grafos que se está minando tenga más de un grafo. Además la inclusión de la componente que representa el tiempo en las aristas de los grafos temporizados sólo repercute en la codificación DFS. Esta codificación fue modificada para que, pese al cambio sufrido, siga teniendo un orden lexicográfico entre aristas y entre códigos DFS que mantenga el sentido lógico de la codificación original. El lugar donde se aplica la extensión más a la derecha y toda la teoría que esto trae consigo es en el crecimiento de patrones y la definición de isomorfismo no se utiliza para nada ese proceso. Vale aclarar que la demostración de la Completitud gSpan propuesta por Xifeng y Han en [1] es completamente aplicable a GERM si se utiliza el orden lexicográfico entre aristas y entre códigos DFS, establecidos para grafos temporizados. Después de ver todos los detalles de cómo se forma GERM se propone el algoritmo 6. Para GERMMain y GERM no se especifican los detalles del pseudo-código porque es casi idéntico a gSpan y las pequeñas diferencias son fácilmente visibles en el código propuesto. Algoritmo 6: GERMMain
  • 51. 45 3.5 Grafos cerrados temporizados El objetivo fundamental de este trabajo es crear una versión de GERM que incluya la teoría de Grafos Cerrados, para ello primero se ajustará la definición de Grafo Cerrado que se explica en la sección 2.5. Definición (Grafos Cerrados Temporizados): Se dice que un subgrafo es cerrado en un grafo temporizado si no existe ningún hijo de , que cumpla que Algoritmo 7: GERM
  • 52. 46 Nótese que la definición anterior sólo difiere de la definición original en la manera de calcular el soporte del grafo que se está analizando si es cerrado o no. Para que esta definición sea consecuente con la idea de reducir el conjunto solución del algoritmo devolviendo sólo los subgrafos cerrados, se tiene que cumplir que todos los subgrafos frecuentes sean grafos cerrados temporizados o estén contenidos dentro de algún subgrafo con esta característica. De esta manera se garantiza que con ellos se puedan generar todos los subgrafos frecuentes que existen. Teorema (Completitud de Grafos Cerrados Temporizados) Si un grafo es frecuente en un grafo temporizado se cumple que es cerrado en o es cerrado y frecuente en G. Demostración Sea un Grafo Temporizado y un subgrafo frecuente de . Si es cerrado entonces se cumple el teorema de Completitud de grafos cerrados temporizados. Si no es cerrado entonces existe tal que por lo que también es frecuente en . Tomemos el camino , de descendientes de que cumplen que ̅̅̅̅̅ , por la manera en que se construyó se cumple además que ̅̅̅̅̅̅̅̅̅̅̅ es no cerrado. En este camino pueden pasar dos cosas; 1. es el último vértice porque es una hoja del árbol que representa el espacio de búsqueda y en tal caso seria cerrado porque no tienen hijos.
  • 53. 47 2. es el último vértice porque no tiene ningún hijo que cumpla que es cerrado por definición. En ambos casos además de ser cerrado es frecuente porque todos los vértices que pertenecen a tiene la misma frecuencia que y se sabe que es frecuente. Nótese que siempre tiene al menos un grafo porque .Como es un camino formado por descendientes de se va a cumplir que se cumple que o es cerrado o está contenido en otro grafo que sí lo es. Como se puede ver, el hecho de cambiar la manera de calcular el soporte no interfiere, ni en la definición, ni en la completitud de los subgrafos cerrados. Como se explicó en el capítulo anterior, la teoría de grafos cerrados disminuye el tamaño de la colección de subgrafos frecuentes y se puede utilizar esta teoría para podar el árbol que representa el espacio de búsqueda. Las definiciones de número de ocurrencias y número de Ocurrencias extendidas, se mantienen invariantes con respecto a lo visto en la sección 2.5, pues ellas solo tienen en cuenta la cantidad de subgrafos isomorfos al grafo que se está analizando. Las definiciones de número de correspondencia y número de correspondencia extendida también van a mantenerse, porque hacer el cálculo del
  • 54. 48 número de ocurrencias en un solo grafo es equivalente a hacerlo sobre una colección de grafos que tenga un solo elemento. Es decir, en grafos temporizados y , pues en este caso , por lo que la definición de ocurrencia equivalente también se mantiene invariante. En grafos temporizados, al igual que en grafos etiquetados las ocurrencias equivalentes provocan situaciones de cruces. Para que una situación de este tipo surja no es necesario que la colección a minar tenga más de un grafo, solo que se dé la situación ejemplificada en la figura 9. El algoritmo que se propone para aplicarle la teoría de grafos cerrados a GERM no se aleja casi nada al algoritmo CloseMining visto en el Marco Teórico. Como se explicó en este epígrafe, la teoría se aplica completamente a grafos temporizados siempre que se utilice la función de soporte y los órdenes lexicográficos definidos para este tipo de grafos. Algoritmo 8: GERMCloseMining
  • 55. 49 La explicación del funcionamiento de los algoritmos GERMMining y GERMCloseGraph serán obviadas de este trabajo debido a que es la misma que en CloseGraph. Algoritmo 9: 𝑮𝑬𝑹𝑴𝑪𝒍𝒐𝒔𝒆𝑮𝒓𝒂𝒑𝒉
  • 56. 50 4. Conclusiones Como se pudo ver a lo largo de este trabajo, la implementación de GERM no produjo cambios significativos ni en la generación de candidatos, ni en la codificación DFS. En esta última bastó con hacerle pequeños cambios a las definiciones de los órdenes lexicográficos. Básicamente la mayor modificación se hizo en “el conteo de frecuencias”. Estos cambios no repercutieron en gran medida a la implementación porque fueron consecuentes con la idea general del cálculo de soporte para hacer búsqueda de subgrafos frecuentes. Además no violaron ninguna de las propiedades necesarias para garantizar la correctitud de este tipo de algoritmo; como la propiedad del prefijo y la antimonotonía. Agregarle a GERM la poda de “grafos cerrados” no provocó complicación alguna. Se explicó y en algunos casos hasta se demostró que toda la teoría que acompaña a los grafos cerrados es aplicable a los grafos temporizados, siempre que se preserven los conceptos redefinidos para ese tipo de grafos.
  • 57. 51 5. Referencias [1] X. Yan, J. Han & Y. Li. Mining Frequent Graph Patterns by Subgraph Spanning. Department of Computer Science, University of Illinois at Urbana- Champaign, Urbana, Illinois 61801, U.S.A, April 20, 2005. [2] B. Bringmann & S. Nijssen. What is frequent in a Single Graph? Katholieke Universiteit Leuven Celestijnenlaan 200 A, B 3001, Leuven, Belgium. [3] B. Bringmann, M. Berlingerio, F. Bonchi & A. Gionis, Learning and predicting the Evolution of Social Network. Katholieke Universiteit Leuven, ISTI-CNR, Yahoo Research. IEEE Computer Society, 2010. [4] X. Yan& J. Han. gSpan: Graph-Based Substructure Pattern Mining. Department of Computer Science, University of Illinois at Urbana- Champaign, September 3, 2002 [5] X. Yan & J. Han. CloseGraph: Mining Closed Frequent graph Patterns.Department of Computer Science, University of Illinois at Urbana- Champaign, Urbana, Illinois 61801. [6] A. Gago-Alonso. Minería de subgrafos conexos frecuentes en colecciones de grafos etiquetados. Instituto Nacional de Astrofísica, Óptica y Electrónica. Tonantzintla, Puebla. Enero, 2010. [7] M. R. Garey& D. S Johnson. Computer and Intractability. A guide to the Theory of NP- Completeness, 1979.