Documentos de Académico
Documentos de Profesional
Documentos de Cultura
com
Capítulo 6
Pasaremos en este capítulo a una de las principales familias de técnicas para caracterizar datos: el
descubrimiento de conjuntos de elementos frecuentes. Este problema se ve a menudo como el
descubrimiento de "reglas de asociación", aunque este último es una caracterización más compleja de
los datos, cuyo descubrimiento depende fundamentalmente del descubrimiento de conjuntos de
elementos frecuentes.
La diferencia conduce a una nueva clase de algoritmos para encontrar conjuntos de elementos
frecuentes. Comenzamos con el algoritmo A-Priori, que funciona eliminando la mayoría de los
conjuntos grandes como candidatos, mirando primero conjuntos más pequeños y reconociendo que un
conjunto grande no puede ser frecuente a menos que todos sus subconjuntos lo sean. Luego
consideramos varias mejoras a la idea básica A-Priori, concentrándonos en conjuntos de datos muy
grandes que hacen hincapié en la memoria principal disponible.
213
214 CAPÍTULO 6. CONJUNTOS FRECUENTES
De manera intuitiva, se dice que un conjunto de elementos que aparece en muchas cestas es
"frecuente". Para ser formales, asumimos que hay un número s, llamó al umbral de soporte. Si
I es un conjunto de elementos, el apoyo por I es el número de cestas para las que I es un
subconjunto. Decimos I es frecuente si su apoyo es s o más.
Ejemplo 6.1: En la figura 6.1 hay conjuntos de palabras. Cada juego es una canasta y las palabras son
artículos. Tomamos estos conjuntos buscando en Google gato perro y tomando fragmentos de las
páginas mejor clasificadas. No se preocupe si una palabra aparece dos veces en una canasta, ya que las
canastas son juegos y, en principio, los artículos solo pueden aparecer una vez. Además, ignore las
mayúsculas.
7. {"Perro, y, gato", es, a, jerga, término, usado, por, policía, oficiales, para, a,
relación hombre-mujer}
Figura 6.1: Aquí hay ocho cestas, cada una de las cuales consta de elementos que son palabras.
nada.
Entre los conjuntos singleton, obviamente {gato} y {perro} son bastante frecuentes. “Perro”
aparece en todos menos en canasta (5), por lo que su apoyo es 7, mientras que “gato” aparece
en todos menos (4) y (8), por lo que su apoyo es 6. La palabra “y” también es bastante frecuente;
aparece en (1), (2), (5), (7) y (8), por lo que su apoyo es 5. Las palabras "a" y "formación" aparecen
en tres conjuntos, mientras que "para" y " es ”aparecen en dos cada uno. Ninguna otra palabra
aparece más de una vez.
Supongamos que establecemos nuestro umbral en s = 3. Luego hay cinco frecuentes
conjuntos de elementos singleton: {perro}, {gato}, {y}, {a} y {entrenamiento}.
Ahora, echemos un vistazo a los dobles. Un doubleton no puede ser frecuente a menos que
ambos elementos del conjunto sean frecuentes por sí mismos. Por lo tanto, solo hay diez
posibles dobletonos frecuentes. La figura 6.2 es una tabla que indica qué cestas contienen
que doubletons.
capacitación a y gato
perro 4, 6 2, 3, 7 1, 2, 7, 8 1, 2, 3, 6, 7
gato 5, 6 2, 3, 7 1, 2, 5, 7
y 5 2, 7
a ninguno
Por ejemplo, nosotros vea en la tabla de la Fig. 6.2 que doubleton {perro, adiestramiento}
aparece solo en cestas (4) y (6). Por tanto, su soporte es 2, y no es frecuente. Hay
cinco doubletons frecuentes si s = 3; son
Cada uno aparece al menos tres veces; por ejemplo, {perro, gato} aparece cinco veces.
A continuación, veamos si hay triples frecuentes. Para ser un triple frecuente,
cada par de elementos del conjunto debe ser un doubleton frecuente. Por ejemplo,
{ dog, a, y} no pueden ser un conjunto de elementos frecuentes, porque si lo fuera,
seguramente {a, y} serían frecuentes, pero no lo es. El triple {perro, gato y} puede ser
frecuente, porque cada uno de sus subconjuntos de doubleton es frecuente.
Desafortunadamente, las tres palabras aparecen juntas solo en cestas (1) y (2), por lo que
no es un triple frecuente. El triple {perro, gato, a} puede ser frecuente, ya que todos sus
dobles son frecuentes. De hecho, las tres palabras aparecen en cestas (2), (3) y (7), por lo
que es un triple frecuente. Ningún otro triple de palabras es siquiera candidato a ser un
triple frecuente, ya que para ningún otro triple de palabras son frecuentes sus tres
subconjuntos de doubleton. Como solo hay un triple frecuente, no puede haber
cuádruples frecuentes o conjuntos más grandes. ✷
216 CAPÍTULO 6. CONJUNTOS FRECUENTES
1. Conceptos relacionados: Deje que los elementos sean palabras y que las cestas sean
documentos (por ejemplo, páginas web, blogs, tweets). Una cesta / documento contiene
los elementos / palabras que están presentes en el documento. Si buscamos conjuntos de
palabras que aparecen juntas en muchos documentos, los conjuntos estarán dominados
por las palabras más comunes (palabras vacías), como vimos en el ejemplo 6.1. Allí, a
pesar de que la intención era encontrar fragmentos que hablaran de perros y gatos, las
palabras vacías "y" y "a" eran prominentes entre los conjuntos de elementos frecuentes.
Sin embargo, si ignoramos todas las palabras más comunes, entonces esperaríamos
encontrar entre los pares frecuentes algunos pares de palabras que representen un
concepto conjunto. Por ejemplo, esperaríamos un par como
{ Brad, Angelina} aparecen con sorprendente frecuencia.
2. Plagio: Deje que los artículos sean documentos y las cestas oraciones. Un
artículo / documento está “en” una canasta / oración si la oración está en el
documento. Este arreglo parece al revés, pero es exactamente lo que
necesitamos, y debemos recordar que la relación entre artículos y canastas es
una relación arbitraria de muchos-muchos. Es decir, "en" no tiene por qué
tener su significado convencional: "parte de". En esta aplicación buscamos
pares de artículos que aparezcan juntos en varias cestas. Si encontramos ese
par, entonces tenemos dos documentos que comparten varias oraciones en
común. En la práctica, incluso una o dos frases en común es un buen indicador
de plagio.
3. Biomarcadores: Deje que los elementos sean de dos tipos: biomarcadores como genes o
proteínas sanguíneas y enfermedades. Cada canasta es el conjunto de datos sobre un
paciente: su genoma y análisis de química sanguínea, así como su historial médico de la
enfermedad. Un conjunto de elementos frecuentes que consta de una enfermedad y uno
o más biomarcadores sugiere una prueba para la enfermedad.
La confianza por sí sola puede ser útil, siempre que el apoyo para el lado izquierdo de la regla sea
bastante amplio. Por ejemplo, no necesitamos saber que es inusualmente probable que las personas
compren mostaza cuando compran perritos calientes, siempre que sepamos que mucha gente compra
perritos calientes y mucha gente compra tanto perritos calientes como mostaza. Todavía podemos usar
el truco de la venta de perritos calientes que se discutió en la Sección 6.1.2. Sin embargo, a menudo hay
más valor para una regla de asociación si refleja una relación verdadera, donde el elemento o
elementos de la izquierda afectan de alguna manera al elemento de la derecha.
Ejemplo 6.3: La historia sobre la cerveza y los pañales es en realidad una afirmación de que la regla de
asociación { pañales} → cerveza tiene mucho interés. Es decir, la fracción de compradores de pañales
que compran cerveza es significativamente mayor que la fracción de todos los clientes que compran
cerveza. Un ejemplo de una regla con interés negativo es { Coca} → pepsi.
Es decir, es poco probable que las personas que compran Coca-Cola también compren Pepsi, a
pesar de que una buena fracción de todas las personas compran Pepsi; la gente suele preferir
una u otra, pero no ambas. Del mismo modo, la regla { pepsi} → Coca se puede esperar que
tenga un interés negativo.
Para algunos cálculos numéricos, volvamos a los datos de la figura 6.1. La regla {
perro} → gato tiene confianza 5/7, ya que "perro" aparece en siete cestas, de las cuales
cinco tienen "gato". Sin embargo, "gato" aparece en seis de las ocho canastas, por lo que
esperaríamos que el 75% de las siete canastas con "perro" también tuvieran "gato". Por lo
tanto, el interés de la regla es 5/7. - 3/4 = - 0.036, que es esencialmente
0. La regla { gato} → gatito tiene interés 1/6 - 1/8 = 0,042. La justificación es que una
de las seis canastas con "gato" también tiene "gatito", mientras que "gatito"
6.1. EL MODELO MERCADO-CESTA 219
aparece en sólo una de las ocho cestas. Este interés, aunque positivo, está cerca de 0
y, por lo tanto, indica que la regla de asociación no es muy "interesante". ✷
! Ejercicio 6.1.2: Para los datos de la canasta de artículos del ejercicio 6.1.1, ¿cuál es la canasta más
grande?
Ejercicio 6.1.3: Suponga que hay 100 artículos, numerados del 1 al 100, y también 100
cestas, también numerados del 1 al 100. Artículo I está en la canasta B si y solo si B divide I
sin resto. Por ejemplo, la cesta 12 consta de elementos
! Ejercicio 6.1.4: Esta pregunta involucra datos de los que no se puede aprender nada interesante sobre
conjuntos de elementos frecuentes, porque no hay conjuntos de elementos que estén correlacionados.
Suponga que los artículos están numerados del 1 al 10, y cada canasta se construye incluyendo el
artículo I con probabilidad 1 / I, cada decisión se toma independientemente de todas las demás
decisiones. Es decir, todas las cestas contienen el artículo 1, la mitad contiene el artículo 2, una tercera
contiene el artículo 3, y así sucesivamente. Suponga que el número de cestas es lo suficientemente
grande como para que las cestas se comporten colectivamente como cabría esperar estadísticamente.
Sea el umbral de soporte el 1% de las canastas. Busque los conjuntos de elementos frecuentes.
Ejercicio 6.1.5: Para los datos del ejercicio 6.1.1, ¿cuál es la confianza en las siguientes
reglas de asociación?
(a) {5, 7} → 2.
(b) {2, 3, 4} → 5.
Ejercicio 6.1.6: Para los datos del ejercicio 6.1.3, ¿cuál es la confianza en las siguientes
reglas de asociación?
(b) {2, 3, 4} → 5.
!! Ejercicio 6.1.7: Describe todas las reglas de asociación que tienen un 100% de confianza.
para los datos de la cesta de la compra de:
! Ejercicio 6.1.8: Demuestre que en los datos del ejercicio 6.1.4 no hay reglas de
asociación interesantes; es decir, el interés de toda regla de asociación es 0.
6.2. CESTAS DE MERCADO Y ALGORITMO A-PRIORI 221
Aquí, el personaje {comienza una canasta y el personaje} la termina. Los elementos de una
cesta se representan con números enteros y están separados por comas. Así, la primera
canasta contiene los ítems 23, 456 y 1001; la segunda canasta contiene artículos
3, 18, 92 y 145. ✷
Puede ser que una máquina reciba el archivo completo. O podríamos usar MapReduce
o una herramienta similar para dividir el trabajo entre muchos procesadores, en cuyo caso
cada procesador recibe solo una parte del archivo. Resulta que combinar el trabajo de los
procesadores en paralelo para obtener la colección exacta de conjuntos de elementos que
cumplen con un umbral de soporte global es difícil, y abordaremos esta pregunta solo en
la Sección 6.4.4.
También asumimos que el tamaño del archivo de cestas es lo suficientemente grande como para
que no quepa en la memoria principal. Por lo tanto, un costo importante de cualquier algoritmo es el
tiempo que lleva leer las cestas del disco. Una vez que un bloque de disco lleno de cestas está en la
memoria principal, podemos expandirlo, generando todos los subconjuntos de tamaño k. Dado que
uno de los supuestos de nuestro modelo es que el tamaño promedio de una canasta es pequeño,
generar todos los pares en la memoria principal debería llevar un tiempo mucho menor que el tiempo
que tomó leer la canasta desde el disco. Por ejemplo, si hay 20
20 = 190 pares de artículos en la canasta y un par de
artículos en una canasta, entonces estos 2
se pueden generar fácilmente en un bucles forrados anidados.
A medida que aumenta el tamaño de los subconjuntos que queremos generar, el tiempo requerido
aumenta; de hecho toma aproximadamente tiempo norte k / k! para generar todos los subconjuntos de
tamaño k por una canasta con norte elementos. Finalmente, este tiempo domina el tiempo necesario
para transferir los datos desde el disco. Sin embargo:
222 CAPÍTULO 6. CONJUNTOS FRECUENTES
1. A menudo, solo necesitamos pequeños conjuntos de elementos frecuentes, por lo que k nunca crece más allá de 2
o 3.
2. Y cuando necesitemos los conjuntos de elementos para un tamaño grande k, Por lo general, es
posible eliminar muchos de los artículos de cada canasta por no poder participar en un conjunto
de artículos frecuente, por lo que el valor de norte gotas como k aumenta.
La conclusión que nos gustaría sacar es que el trabajo de examinar cada una de las cestas
generalmente se puede suponer proporcional al tamaño del archivo. Por tanto, podemos medir
el tiempo de ejecución de un algoritmo de conjunto de elementos frecuentes por el número de
veces que se lee cada bloque de disco del archivo de datos.
Además, todos los algoritmos que analizamos tienen la propiedad de que leen el
archivo cesta de forma secuencial. Por tanto, los algoritmos se pueden caracterizar por el
número de pasadas que hacen a través del archivo de la cesta, y su tiempo de ejecución es
proporcional al producto del número de pasadas que hacen a través del archivo de la cesta
por el tamaño de ese archivo. Dado que no podemos controlar la cantidad de datos, solo
importa el número de pasadas realizadas por el algoritmo, y es en ese aspecto del
algoritmo en el que nos centraremos al medir la ejecución.
tiempo de un algoritmo de conjunto de elementos frecuentes.
Sin embargo, hay una segunda cuestión relacionada con los datos que debemos examinar. Todos
Los algoritmos de conjuntos de elementos frecuentes requieren que mantengamos muchos recuentos
diferentes a medida que pasamos por los datos. Por ejemplo, es posible que necesitemos contar la
cantidad de veces que cada par de artículos aparece en las canastas. Si no tenemos suficiente memoria
principal para almacenar cada uno de los recuentos, entonces, agregar 1 a un recuento aleatorio
probablemente requerirá que carguemos una página desde el disco. En ese caso, el algoritmo se
moverá y ejecutará muchos órdenes de magnitud más lento que si estuviéramos seguros de encontrar
cada recuento en la memoria principal. La conclusión es que no podemos contar nada que no quepa en
la memoria principal. Por lo tanto, cada algoritmo tiene un límite en la cantidad de elementos que
puede manejar.
Ejemplo 6.5: Supongamos que un determinado algoritmo tiene que contar todos los pares de elementos,
norte enteros o sobre
y aquí están norte elementos. Por tanto, necesitamos espacio para almacenar
2
norte 2 / 2 enteros. Si los enteros toman 4 bytes, requerimos 2 norte 2 bytes. Si nuestra maquina
tiene 2 gigabytes, o 2 31 bytes de memoria principal, entonces requerimos norte ≤ 2 15, o
aproximadamente n < 33.000. ✷
No es trivial almacenar el los norte2 cuenta de una manera que facilita encontrar
recuento de un par { yo, j}. Primero, que no hemos asumido nada acerca de cómo
los elementos están representados. Por ejemplo, podrían ser cadenas como "pan". Es más
eficiente en el espacio representar elementos por números enteros consecutivos de 1 a norte,
dónde norte es el número de elementos distintos. A menos que los elementos ya estén representados de esta
manera, necesitamos una tabla hash que traduzca los elementos tal como aparecen en el archivo a números
enteros. Es decir, cada vez que vemos un elemento en el archivo, lo codificamos. Si esto es
6.2. CESTAS DE MERCADO Y ALGORITMO A-PRIORI 223
I
k = (yo - 1) norte - + j-I
2
El resultado de este diseño es que los pares se almacenan en orden lexicográfico, es decir, primero {1,
2}, {1, 3},. . . , {1, norte}, luego {2, 3}, {2, 4},. . . , {2, norte}, y así sucesivamente, hasta { norte - 2, norte -
1}, { norte - 2, norte}, y finalmente { norte - 1, norte}.
Existe otro enfoque para almacenar recuentos que puede ser más apropiado, dependiendo de la
fracción de los posibles pares de elementos que realmente aparecen en alguna canasta.
Podemos almacenar recuentos como triples [ yo, j, c], lo que significa que el recuento de pares {
yo, j}, con yo <j, es C. Una estructura de datos, como una tabla hash con I y
j como la clave de búsqueda, se utiliza para que podamos saber si hay un triple para un determinado I y j
y, si es así, encontrarlo rápidamente. A este enfoque lo llamamos método de triples de almacenar
recuentos.
A diferencia de la matriz triangular, el método de triples no requiere que almacenemos
nada si el recuento de un par es 0. Por otro lado, el método de triples requiere que
almacenemos tres enteros, en lugar de uno, por cada par que aparece en alguna canasta.
Además, existe el espacio necesario para la tabla hash u otra estructura de datos utilizada
para respaldar una recuperación eficiente. La conclusión es que la matriz triangular será
mejor si al menos 1/3 de la norte los pares posibles aparecen realmente en alguna
2
canasta,
mientras que si ocurren significativamente menos de 1/3 de los pares posibles,
deberíamos considerar usar el método de los triples.
Ejemplo 6.6: Suponga que hay 100,000 artículos y 10,000,000 canastas de 10 artículos
cada una. Entonces el método de matriz triangular requiere 100000 = 5 × 10 9
2
(aproximadamente) recuentos enteros. 1 Por otro lado, el número total de pares entre
todas las canastas es de 10 7 10 = 4.5
2
× 10 8. Incluso en el caso extremo de que cada par
de elementos apareciera solo una vez, solo podría haber 4.5 × 10 8 pares con
1 Aquí, y a lo largo del capítulo, usaremos la aproximación de que n = norte 2 / 2 para grandes norte.
2
224 CAPÍTULO 6. CONJUNTOS FRECUENTES
Gran parte de la efectividad de los algoritmos que discutiremos está impulsada por una sola
observación, llamada monotonicidad para conjuntos de elementos:
La razón es simple. Dejar J ⊆ I. Luego, cada canasta que contenga todos los artículos en I
seguramente contiene todos los elementos en J. Por lo tanto, el recuento de J debe ser al
menos tan grande como el recuento de I, y si la cuenta para I Por lo menos s, entonces el
recuento de J Por lo menos s. Ya que J puede estar contenido en algunas cestas a las que
les faltan uno o más elementos de I - J es muy posible que el recuento de J es
estrictamente mayor que el recuento de I.
Además de hacer que el algoritmo A-Priori funcione, la monotonicidad nos ofrece una forma de compactar
la información sobre conjuntos de elementos frecuentes. Si nos dan un umbral de soporte s, entonces decimos
que un conjunto de elementos es máximo si no es frecuente ningún superconjunto. Si enumeramos solo los
conjuntos de elementos máximos, entonces sabemos que todos los subconjuntos de un conjunto de elementos
máximo son frecuentes, y ningún conjunto que no sea un subconjunto de algún conjunto de elementos
máximo puede ser frecuente.
Ejemplo 6.7: Reconsideremos los datos del ejemplo 6.1 con umbral de soporte s = 3.
Descubrimos que había cinco solteros frecuentes, aquellos con las palabras "gato", "perro", "a",
"y" y "adiestramiento". Cada uno de estos está contenido en un dobleton frecuente, excepto para
"entrenamiento", por lo que un conjunto de elementos frecuentes máximo es
{ capacitación}. También hay cinco doubletons frecuentes con s = 3, a saber
También encontramos un triple frecuente, {perro, gato, a}, y no hay conjuntos de elementos
frecuentes más grandes. Por lo tanto, este triple es máximo, pero los tres dobles dobles
frecuentes que contiene son no máximo. Los otros doblestonos frecuentes, {perro, y} y {gato, y},
son máximos. Observe que podemos deducir de los dobles tonos frecuentes que los singletonos
como {perro} son frecuentes. ✷
6.2. CESTAS DE MERCADO Y ALGORITMO A-PRIORI 225
Ese argumento no sería suficiente si no fuera posible evitar contar todos los
triples, ya que hay muchos más triples que pares. El trabajo del Algoritmo A-Priori y
los algoritmos relacionados es evitar contar muchos triples o conjuntos más grandes,
y son, como veremos, efectivos al hacerlo. Por tanto, en lo que sigue, nos
concentraremos en algoritmos para calcular pares frecuentes.
En la primera pasada, creamos dos tablas. La primera tabla, si es necesario, traduce los nombres de los
elementos a números enteros de 1 a norte, como se describe en la Sección 6.2.2. La otra tabla es una
matriz de recuentos; los I El elemento de matriz cuenta las apariciones del elemento numerado. I.
Inicialmente, los recuentos de todos los elementos son 0.
A medida que leemos canastas, miramos cada elemento de la canasta y traducimos su nombre a
un número entero. A continuación, usamos ese número entero para indexar en la matriz de conteos, y
agregamos 1 al número entero que se encuentra allí.
226 CAPÍTULO 6. CONJUNTOS FRECUENTES
Después de la primera pasada, examinamos los recuentos de los elementos para determinar
cuáles de ellos son frecuentes como singletons. Puede parecer sorprendente que muchos
singletons no sean frecuentes. Pero recuerda que marcamos el umbral s lo suficientemente alto
como para que no obtengamos demasiadas series frecuentes; un típico s sería el 1% de las
canastas. Si pensamos en nuestras propias visitas a un supermercado, seguramente compramos
ciertas cosas más del 1% del tiempo: quizás leche, pan, Coca-Cola o Pepsi, etc. Incluso podemos
creer que el 1% de los clientes compra pañales, aunque es posible que nosotros no lo hagamos.
Sin embargo, muchos de los artículos en los estantes seguramente no son comprados por el 1%
de los clientes: aderezo cremoso de ensalada César, por ejemplo.
Para la segunda pasada de A-Priori, creamos una nueva numeración del 1 al metro solo por
los artículos frecuentes. Esta tabla es una matriz indexada de 1 a norte, y la entrada para I es 0, si
el elemento I no es frecuente, o un número entero único en el rango de 1 a
metro si el artículo I es frecuente. Nos referiremos a esta tabla como el tabla de artículos frecuentes.
Durante el segundo pase, contamos todos los pares que constan de dos elementos frecuentes.
Recuerde de la Sección 6.2.3 que una pareja no puede ser frecuente a menos que ambos
miembros lo sean. Por lo tanto, no perdemos pares frecuentes. El espacio requerido en el
segundo pase es 2 metro 2 bytes, en lugar de 2 norte 2 bytes, si usamos el método
triangularmatrix para contar. Observe que es necesario volver a numerar solo los elementos
frecuentes si vamos a utilizar una matriz triangular del tamaño correcto. En la figura 6.3 se
muestra el conjunto completo de estructuras de memoria principal utilizadas en el primer y
segundo paso.
También observe que el beneficio de eliminar elementos poco frecuentes se ampli fi ca; si solo la
mitad de los artículos son frecuentes, necesitamos una cuarta parte del espacio para contar. Del mismo
modo, si usamos el método de los triples, necesitamos contar solo los pares de dos elementos
frecuentes que ocurren en al menos una canasta.
La mecánica de la segunda pasada es la siguiente.
1. Para cada canasta, busque en la tabla de artículos frecuentes para ver cuáles de sus artículos son
frecuentes.
2. En un ciclo doble, genere todos los pares de artículos frecuentes en esa canasta.
3. Para cada uno de esos pares, agregue uno a su recuento en la estructura de datos utilizada para
almacenar los recuentos.
La misma técnica utilizada para encontrar pares frecuentes sin contar todos los pares nos permite encontrar
conjuntos de elementos frecuentes más grandes sin un recuento exhaustivo de todos los conjuntos. En
6.2. CESTAS DE MERCADO Y ALGORITMO A-PRIORI 227
Artículo
1 Artículo
1
2 artículo 2 Fre-
nombres nombres
quent
para cuenta para
enteros enteros
elementos
norte norte
por recuentos
de parejas
Pase 1 Pase 2
Figura 6.3: Esquema del uso de la memoria principal durante las dos pasadas del
algoritmo A-Priori
el algoritmo A-Priori, se toma una pasada para cada tamaño de conjunto k. Si no se encuentran conjuntos de elementos
frecuentes de un tamaño determinado, entonces la monotonicidad nos dice que no puede haber conjuntos de elementos
frecuentes más grandes, por lo que podemos detenernos.
C1 L1 C2 L 2 C3 L3
Filtrar Construir Filtrar Construir Filtrar Construir ...
Figura 6.4: El algoritmo A-Priori alterna entre construir conjuntos candidatos y filtrar
para encontrar aquellos que son realmente frecuentes.
228 CAPÍTULO 6. CONJUNTOS FRECUENTES
Empezamos con C 1, que son todos los conjuntos de elementos singleton, es decir, los elementos mismos.
Es decir, antes de examinar los datos, cualquier elemento podría ser frecuente en la medida en que
saber. El primer paso del fi ltro es contar todos los elementos y aquellos cuyos conteos son al
menos el umbral de soporte. s formar el conjunto L 1 de artículos frecuentes.
El conjunto C 2 de pares candidatos es el conjunto de pares cuyos elementos están en L
1; es
decir, son elementos frecuentes. Tenga en cuenta que no construimos C 2
explícitamente. Más bien usamos la definición de C 2, y probamos la membresía en C 2 por
probando si sus dos miembros están en L 1. El segundo paso del algoritmo A-Priori
cuenta todos los pares candidatos y determina cuáles aparecen al menos
s veces. Estos pares forman L 2, las parejas frecuentes.
Podemos seguir este patrón hasta donde queramos. El conjunto C 3 de triples candidatos se
construye (implícitamente) como el conjunto de triples, dos cualesquiera de los cuales es un
emparejar en L 2. Nuestra suposición sobre la escasez de conjuntos de elementos frecuentes,
esbozada en la Sección 6.2.4 implica que no habrá demasiados pares frecuentes, por lo que
se pueden enumerar en una tabla de memoria principal. Asimismo, no habrá demasiados triples
candidatos, por lo que todos pueden contarse mediante una generalización del método de los
triples. Es decir, mientras que los triples se usan para contar pares, nosotros usaríamos
cuádruples, que consisten en los tres códigos de artículo y el conteo asociado, cuando queremos
contar triples. Del mismo modo, podemos contar conjuntos de tamaño k usando tuplas con k + 1
componentes, el último de los cuales es el recuento, y el primero k de los cuales son los códigos
de artículo, en orden.
Para encontrar L 3 hacemos una tercera pasada a través del archivo de cesta. Para cada canasta,
solo necesitamos mirar los artículos que están en L 1. A partir de estos elementos, podemos
examinar cada par y determinar si ese par está o no en L 2. Cualquier artículo de la
cesta que no aparezca en al menos dos pares frecuentes, ambos
consisten en artículos en la canasta, no pueden ser parte de un triple frecuente que contiene la
canasta. Por lo tanto, tenemos una búsqueda bastante limitada de triples que sean a la vez
contenidos en la canasta y son candidatos en C 3. Cualquiera de estos triples encontrados tiene 1
agregado a su recuento.
Ejemplo 6.8: Supongamos que nuestra canasta consta de artículos del 1 al 10. De estos, se
ha encontrado que del 1 al 5 son artículos frecuentes y los siguientes pares se han
encontrado frecuentes: {1, 2}, {2, 3}, {3, 4} y {4, 5}. Al principio, eliminamos los artículos no
frecuentes, dejando solo del 1 al 5. Sin embargo, 1 y 5 aparecen en un solo par frecuente
en el conjunto de artículos y, por lo tanto, no pueden contribuir a un triple frecuente
contenido en la canasta. Por lo tanto, debemos considerar sumar al recuento de triples
que están contenidos en {2, 3, 4}. Solo hay uno de esos triples, por supuesto.
Sin embargo, no lo encontraremos en C 3, porque {2, 4} evidentemente no es frecuente. ✷
1. Definir C k ser todos esos conjuntos de elementos de tamaño k, cada k - 1 de los cuales es un conjunto de
elementos en L k - 1.
6.2. CESTAS DE MERCADO Y ALGORITMO A-PRIORI 229
2. Encuentra L k haciendo un pase a través de las cestas y contando todos y solo los conjuntos
de artículos de tamaño k que estan en C k. Los conjuntos de elementos que cuentan al
menos s estan en L k.
! Ejercicio 6.2.2: En nuestra descripción del método de matriz triangular en la Sección 6.2.2, la
fórmula para k implica dividir un entero arbitrario I por 2. Sin embargo, debemos tener k
ser siempre un número entero. Pruebalo k será, de hecho, un número entero.
! Ejercicio 6.2.3: Dejalo ser I elementos en un conjunto de datos de la cesta del mercado de B cestas.
Suponga que cada canasta contiene exactamente K elementos. Como una función de Yo, b,
y K:
(a) ¿Cuánto espacio ocupa el método de matriz triangular para almacenar los recuentos de
todos los pares de elementos, suponiendo cuatro bytes por elemento de la matriz?
(b) ¿Cuál es el mayor número posible de pares con un recuento distinto de cero?
(c) ¿En qué circunstancias podemos estar seguros de que el método de las triples
utilizará menos espacio que la matriz triangular?
!! Ejercicio 6.2.4: ¿Cómo contarías todos los conjuntos de elementos de tamaño 3 por una generalización?
del método de la matriz triangular? Es decir, organice que en una matriz unidimensional haya
exactamente un elemento para cada conjunto de tres elementos.
! Ejercicio 6.2.5: Suponga que el umbral de soporte es 5. Encuentre los conjuntos de elementos
frecuentes máximos para los datos de:
Ejercicio 6.2.6: Aplicar el algoritmo A-Priori con umbral de soporte 5 a los datos de:
! Ejercicio 6.2.7: Supongamos que tenemos canastas de mercado que satisfacen los
siguientes supuestos:
2. Hay un millón de elementos, representados por los números enteros 0, 1,. . . , 999999.
230 CAPÍTULO 6. CONJUNTOS FRECUENTES
3. Hay norte elementos frecuentes, es decir, elementos que ocurren 10.000 veces o más.
5. Hay 2 METRO pares que ocurren exactamente una vez. De estos pares, METRO constan de dos
elementos frecuentes; el otro METRO cada uno tiene al menos un artículo no frecuente.
Supongamos que ejecutamos el algoritmo A-Priori y podemos elegir en la segunda pasada entre
el método de matriz triangular para contar pares candidatos y una tabla hash de triples de
recuento de elementos-elementos. En el primer caso, descuide el espacio necesario para traducir
entre los números de elementos originales y los números de los elementos frecuentes, y en el
segundo caso descuide el espacio necesario para la tabla hash. Como una función de norte y
METRO, ¿Cuál es el número mínimo de bytes de memoria principal necesarios para ejecutar el
algoritmo A-Priori en estos datos?
El algoritmo A-Priori está bien siempre que el paso con el mayor requisito
para la memoria principal, normalmente el recuento de los pares candidatos C 2 - tiene
suficiente memoria para que pueda lograrse sin golpear (movimiento repetido de
datos entre el disco y la memoria principal). Se han propuesto varios algoritmos
para reducir el tamaño del conjunto de candidatos C 2. Aquí, consideramos el
algoritmo PCY, que aprovecha el hecho de que en el primer paso de A-Priori
normalmente hay mucha memoria principal que no se necesita para el recuento de
elementos individuales. Luego miramos el algoritmo multietapa, que usa el truco PCY
y también inserta pasadas adicionales para reducir aún más el tamaño de C 2.
Artículo
1 Artículo
1
2 artículo 2 Fre-
nombres nombres
quent
para cuenta para
enteros enteros
elementos
norte norte
Mapa de bits
cuenta de parejas
Pase 1 Pase 2
Figura 6.5: Organización de la memoria principal para las dos primeras pasadas del
algoritmo PCY
generamos todos los pares, usando un bucle doble. Hicimos hash en cada par y
agregamos 1 al cubo en el que ese par hace hash. Tenga en cuenta que el par en sí
no va al cubo; el par solo afecta al número entero del cubo.
Al final de la primera pasada, cada cubo tiene un recuento, que es la suma de los
recuentos de todos los pares que hacen hash en ese cubo. Si el recuento de un cubo
es al menos tan grande como el umbral de soporte s, se llama un cubo frecuente.
No podemos decir nada sobre los pares que hacen hash a un cubo frecuente; todos podrían ser
pares frecuentes de la información disponible para nosotros. Pero si el recuento del balde es
menor que s ( un cubo poco frecuente), sabemos que ningún par que tenga hash en este cubo
puede ser frecuente, incluso si el par consta de dos elementos frecuentes. Ese hecho nos da una
ventaja en el segundo pase. Podemos definir el conjunto de
parejas de candidatos C 2 ser esos pares { yo, j} tal que:
Suponga que tenemos un gigabyte de memoria principal disponible para la tabla hash en la
primera pasada. Suponga también que el archivo de datos tiene mil millones de cestas, cada una con
diez elementos. Un depósito es un número entero, normalmente 4 bytes, por lo que podemos
mantener un cuarto de mil millones de depósitos. El número de pares en todas las canastas es 10 9 × 10
2
o 4.5 × 10 10 pares este número también es la suma de los recuentos de los depósitos. Por
lo tanto, el recuento promedio es 4.5 × 10 10 / 2.5 × 10 8, o 180. Si el umbral de apoyo
s es de alrededor de 180 o menos, podríamos esperar que pocos grupos sean infrecuentes. Sin
embargo, si s es mucho más grande, digamos 1000, entonces debe ser que la gran mayoría de
los cubos son poco frecuentes. El mayor número posible de depósitos frecuentes es
4.5 × 10 10 / 1000, o 45 millones de los 250 millones de cubos. ✷
Entre los pases de PCY, la tabla hash se resume como un mapa de bits con un bit por cada
cubo. El bit es 1 si el depósito es frecuente y 0 si no. Por lo tanto, los números enteros de 32 bits
se reemplazan por bits únicos, y el mapa de bits que se muestra en el segundo paso de la figura
6.5 ocupa solo 1/32 del espacio que de otro modo estaría disponible para almacenar recuentos.
Sin embargo, si la mayoría de los depósitos son poco frecuentes, esperamos que el número de
pares que se cuentan en el segundo paso sea mucho menor que el número total de pares de
elementos frecuentes. Por lo tanto, PCY puede manejar algunos conjuntos de datos sin agitar
durante la segunda pasada, mientras que A-Priori se quedaría sin memoria principal y se
agotaría.
Hay otra sutileza con respecto al segundo pase de PCY que afecta la cantidad de
espacio necesario. Si bien pudimos utilizar el método de matriz triangular en la
segunda pasada de A-Priori si lo deseábamos, porque los elementos frecuentes
podrían volver a numerarse de 1 a algunos metro, no podemos hacerlo para PCY. La
razón es que los pares de elementos frecuentes que PCY nos permite evitar contar se
colocan aleatoriamente dentro de la matriz triangular; son los pares que pasan a un
cubo poco frecuente en la primera pasada. No existe una forma conocida de
compactar la matriz para evitar dejar espacio para los pares no contados.
En consecuencia, nos vemos obligados a utilizar el método de las triples en PCY. Es posible que esa
restricción no importe si la fracción de pares de elementos frecuentes que realmente aparecen en los
contenedores fuera pequeña; entonces querríamos usar triples para A-Priori de todos modos. Sin
embargo, si la mayoría de los pares de elementos frecuentes aparecen juntos en al menos un cubo, en
PCY nos vemos obligados a usar triples, mientras que A-Priori puede usar una matriz triangular. Por lo
tanto, a menos que PCY nos permita evitar contar al menos 2/3 de los pares de elementos frecuentes,
no podemos ganar usando PCY en lugar de A-Priori.
Si bien el descubrimiento de pares frecuentes por PCY difiere significativamente de APriori,
las etapas posteriores, donde encontramos triples frecuentes y conjuntos más grandes si se
desea, son esencialmente las mismas que A-Priori. Esta declaración también es válida para cada
una de las mejoras a A-Priori que cubrimos en esta sección. Como resultado, cubriremos solo la
construcción de los pares frecuentes de aquí en adelante.
La etapa múltiple requiere más de dos pasadas para encontrar los pares frecuentes. Un esbozo de
el algoritmo multietapa se muestra en Figura 6.6.
Artículo
1 Artículo
1 Artículo
1
2 artículo 2 Fre- 2 Fre-
nombres nombres nombres
quent quent
para cuenta para para
enteros enteros enteros
elementos elementos
norte norte norte
Mapa de bits 2
Segundo
Tabla de picadillo
Estructura de datos
tabla de picadillo
para cubo
por recuentos
para cubo
cuenta de parejas
cuenta
Figura 6.6: El algoritmo de etapas múltiples utiliza tablas hash adicionales para reducir el
número de pares candidatos
un poco menos de 1/16 de la memoria principal disponible, por lo que todavía hay mucho
de espacio para contar las parejas candidatas en la tercera pasada. Un par { yo, j} es en C 2
si y solo si:
Artículo
1 Artículo
1
2 artículo 2 Fre-
nombres nombres
quent
para cuenta para
enteros enteros
elementos
norte norte
Tabla hash 1
Estructura de datos
por recuentos
de parejas
Tabla hash 2
Pase 1 Pase 2
Figura 6.7: El algoritmo Multihash usa varias tablas hash en una sola pasada
Ejemplo 6.10: Supongamos que si ejecutamos PCY, el depósito promedio tendrá un recuento s/
10, donde s es el umbral de soporte. Entonces, si usamos el enfoque Multihash con dos tablas
hash de la mitad del tamaño, el recuento promedio sería s/ 5. Como resultado, como máximo
1/5 de los depósitos en cualquiera de las tablas hash podrían ser frecuentes, y un par
infrecuente aleatorio tiene como máximo una probabilidad (1/5) 2 = 0.04 de estar en un cubo
frecuente en ambas tablas hash.
Con el mismo razonamiento, el límite superior del par infrecuente que se encuentra en
un depósito frecuente en la tabla hash de una PCY es como máximo 1/10. Es decir,
podríamos esperar tener que contar 2.5 veces más pares infrecuentes en PCY que en la
versión de Multihash sugerida anteriormente. Por lo tanto, esperaríamos que Multihash
tenga un requisito de memoria menor para la segunda pasada que PCY.
Pero estos límites superiores no cuentan la historia completa. Puede haber muchos
menos depósitos frecuentes que el máximo para cualquiera de los algoritmos, ya que la
presencia de algunos pares muy frecuentes sesgará la distribución de los recuentos de
depósitos. Sin embargo, este análisis sugiere la posibilidad de que para algunos datos y
umbrales de soporte, podamos hacerlo mejor ejecutando varias funciones hash en la
memoria principal a la vez. ✷
Para la segunda pasada de Multihash, cada tabla hash se convierte en un mapa de bits, como es
habitual. Tenga en cuenta que los dos mapas de bits para las dos funciones hash de la figura 6.7
ocupan exactamente el mismo espacio que ocuparía un solo mapa de bits para la segunda pasada de
el algoritmo PCY. Las condiciones para un par { yo, j} estar en C 2, y, por lo tanto, para
requerir un conteo en el segundo pase, son los mismos que para el tercer pase de
Multietapa: I y j ambos deben ser frecuentes, y el par debe haberse cifrado en un depósito
frecuente de acuerdo con ambas tablas hash.
236 CAPÍTULO 6. CONJUNTOS FRECUENTES
Así como Multistage no se limita a dos tablas hash, podemos dividir la memoria
principal disponible en tantas tablas hash como queramos en la primera pasada de
Multihash. El riesgo es que si usamos demasiadas tablas hash, el recuento promedio de un
depósito superará el umbral de soporte. En ese momento, puede haber muy pocos
depósitos poco frecuentes en cualquiera de las tablas hash. A pesar de que un par debe
usar hash en un cubo frecuente en cada tabla hash para ser contado, podemos encontrar
que la probabilidad de que un par infrecuente sea un candidato aumenta, en lugar de
disminuir, si agregamos otra tabla hash.
{ 1, 2, 3} { 2, 3, 4} { 3, 4, 5} { 4, 5, 6}
{ 1, 3, 5} { 2, 4, 6} { 1, 3, 4} { 2, 4, 5}
{ 3, 5, 6} { 1, 2, 4} { 2, 3, 5} { 3, 4, 6}
(a) Por cualquier método, calcule el apoyo para cada artículo y cada par de artículos.
Ejercicio 6.3.2: Suponga que ejecutamos el algoritmo de etapas múltiples con los datos del
ejercicio 6.3.1, con el mismo umbral de soporte de 4. El primer paso es el mismo que en
ese ejercicio, y para el segundo paso, hacemos pares de hash de nueve cubos, usando el
hash función que hash { yo, j} a la cubeta yo + j mod 9. Determine los recuentos de cubetas
en la segunda pasada. ¿El segundo paso reduce el conjunto de pares candidatos? Tenga en
cuenta que todos los elementos son frecuentes, por lo que la única razón por la que no se
aplicará el hash a un par en la segunda pasada es si se aplica a un cubo poco frecuente en
la primera pasada.
Ejercicio 6.3.3: Suponga que ejecutamos el algoritmo Multihash con los datos del
ejercicio 6.3.1. Usaremos dos tablas hash con cinco cubos cada una. Por un lado, el
conjunto { yo, j}, se hash al cubo 2 yo + 3 j + 4 mod 5, y para el otro, el conjunto se
hash para yo + 4 j mod 5. Dado que estas funciones hash no son simétricas en I y
j, ordenar los artículos para que yo <j al evaluar cada función hash. Determine los
recuentos de cada uno de los 10 cubos. ¿Qué tan grande debe ser el umbral de
soporte para que el algoritmo multietapa elimine más pares de los que haría el
algoritmo PCY, utilizando la tabla hash y la función descritas en el ejercicio 6.3.1?
6.3. MANEJO DE GRANDES CONJUNTOS DE DATOS EN LA MEMORIA PRINCIPAL 237
! Ejercicio 6.3.4: Suponga que realizamos el algoritmo PCY para encontrar pares frecuentes, con
datos de la canasta de mercado que cumplen las siguientes especificaciones:
2. Hay un millón de elementos, representados por los números enteros 0, 1,. . . , 999999.
3. Hay 250.000 elementos frecuentes, es decir, elementos que ocurren 10.000 veces o
más.
5. Hay PAG pares que ocurren exactamente una vez y constan de dos elementos
frecuentes.
8. Cuando hacemos hash de los pares, se distribuyen entre los depósitos de forma aleatoria, pero de la
forma más uniforme posible; es decir, puede suponer que cada segmento obtiene exactamente su
parte justa del PAG pares que ocurren una vez.
Supongamos que hay S bytes de memoria principal. Para ejecutar el algoritmo PCY con éxito, el
número de depósitos debe ser lo suficientemente grande como para que la mayoría de los
depósitos no sean frecuentes. Además, en la segunda pasada, debe haber suficiente espacio
para contar todas las parejas candidatas. Como una función de S, cuál es el mayor valor de PAG
para lo cual podemos ejecutar con éxito el algoritmo PCY en estos datos?
! Ejercicio 6.3.5: Bajo los supuestos dados en el ejercicio 6.3.4, ¿reducirá el algoritmo
Multihash los requisitos de memoria principal para la segunda pasada? Como una
función de S y PAG , ¿Cuál es el número óptimo de tablas hash para usar en la
primera pasada?
! Ejercicio 6.3.6: Suponga que realizamos el algoritmo multietapa de 3 pasos para encontrar pares
frecuentes, con datos de la cesta de mercado que cumplen las siguientes especificaciones:
2. Hay un millón de elementos, representados por los números enteros 0, 1,. . . , 999999.
Todos los artículos son frecuentes; es decir, ocurren al menos 10,000 veces.
7. Cuando hacemos hash de los pares, se distribuyen entre cubos de forma aleatoria, pero de la
manera más uniforme posible; es decir, puede suponer que cada segmento obtiene
exactamente su parte justa del PAG pares que ocurren una vez.
8. Las funciones hash utilizadas en las dos primeras pasadas son completamente
independientes.
Supongamos que hay S bytes de memoria principal. Como una función de S y PAG , ¿Cuál
es el número esperado de pares candidatos en la tercera pasada del algoritmo de etapas
múltiples?
El riesgo de seleccionar una muestra de una parte de un archivo grande es que los datos
no se distribuyan uniformemente en el archivo. Por ejemplo, suponga que el archivo fuera
una lista del contenido real de la cesta de la compra en una tienda por departamentos,
organizada por fecha de venta. Si solo tomara las primeras cestas del archivo, tendría
datos antiguos. Por ejemplo, no habría iPods en estas cestas, aunque los iPods podrían
haberse convertido en un artículo popular más adelante.
Como otro ejemplo, considere un archivo de pruebas médicas realizadas en
diferentes hospitales. Si cada fragmento proviene de un hospital diferente,
seleccionar fragmentos al azar nos dará una muestra extraída de solo un pequeño
subconjunto de hospitales. Si los hospitales realizan diferentes pruebas o las realizan
de diferentes formas, los datos pueden estar muy sesgados.
Habiendo seleccionado nuestra muestra de las cestas, usamos parte de la memoria principal
para almacenar estas cestas. El saldo de la memoria principal se utiliza para ejecutar uno de los
algoritmos que hemos comentado, como A-Priori, PCY, Multietage o Multihash. Sin embargo, el
algoritmo debe ejecutar pasadas sobre la muestra de la memoria principal para cada tamaño de
conjunto de elementos, hasta que encontremos un tamaño sin elementos frecuentes. No se
necesitan accesos al disco para leer la muestra, ya que reside en la memoria principal. A medida
que se descubren conjuntos de elementos frecuentes de cada tamaño, se pueden escribir en el
disco; esta operación y la lectura inicial de la muestra del disco son las únicas E / S de disco que
hace el algoritmo.
Por supuesto, el algoritmo fallará si cualquier método de la Sección 6.2 o 6.3 que elijamos no
se puede ejecutar en la cantidad de memoria principal que queda después de almacenar la
muestra. Si necesitamos más memoria principal, entonces una opción es leer la muestra del
disco para cada pasada. Dado que la muestra es mucho más pequeña que el conjunto de datos
completo, aún evitamos la mayoría de las E / S de disco que usarían los algoritmos discutidos
anteriormente.
(a) Es probable que los singleton y los pares frecuentes dominen la colección de todos los conjuntos
de elementos frecuentes, y ya teníamos que contarlos todos en una sola pasada.
(b) Ahora tenemos toda la memoria principal disponible, ya que no tenemos que almacenar la
muestra en la memoria principal.
No podemos eliminar los falsos negativos por completo, pero podemos reducir su
número si la cantidad de memoria principal lo permite. Hemos asumido que si s es el
umbral de soporte y la muestra es una fracción pag de todo el conjunto de datos, usamos
PD como umbral de apoyo para la muestra. Sin embargo, podemos usar algo más
pequeño que eso como umbral para la muestra, como 0.9 PD. Tener un umbral más bajo
significa que se tendrán que contar más conjuntos de elementos de cada tamaño, por lo
que aumenta el requisito de memoria principal. Por otro lado, si hay suficiente memoria
principal, identificaremos que tiene soporte al menos 0.9 PD en la muestra casi todos los
conjuntos de elementos que tienen soporte al menos s es el todo. Si luego hacemos un
pase completo para eliminar aquellos conjuntos de elementos que se identificaron como
frecuentes en la muestra pero que no son frecuentes en su totalidad, no tendremos falsos
positivos y es de esperar que tengamos muy pocos falsos negativos o ninguno.
Nuestra próxima mejora evita tanto los falsos negativos como los falsos positivos, a costa de
hacer dos pases completos. Se llama el HIJO Algoritmo según los autores. La idea es dividir el
archivo de entrada en fragmentos (que pueden ser "fragmentos" en el sentido de un sistema de
archivos distribuidos, o simplemente una parte del archivo). Trate cada fragmento como una
muestra y ejecute el algoritmo de la Sección 6.4.1 en ese fragmento. Usamos PD como el umbral,
si cada fragmento es una fracción pag de todo el archivo, y s es el umbral de soporte. Almacene
en el disco todos los conjuntos de elementos frecuentes encontrados para cada fragmento.
Una vez que todos los fragmentos se hayan procesado de esa manera, tome la unión de todos los
conjuntos de elementos que se han encontrado frecuentes para uno o más fragmentos. Estos son los
candidato conjuntos de elementos. Tenga en cuenta que si un conjunto de elementos no es frecuente
en ningún fragmento, entonces su soporte es menor que PD en cada trozo. Dado que el número de
6.4. ALGORITMOS DE PASO LIMITADO 241
trozos es 1 / pag, llegamos a la conclusión de que el apoyo total para ese conjunto de elementos es menor que
(1 / p) ps = s. Por lo tanto, cada conjunto de elementos que es frecuente en el total es frecuente en al menos un
fragmento, y podemos estar seguros de que todos los conjuntos de elementos verdaderamente frecuentes se
encuentran entre los candidatos; es decir, no hay falsos negativos.
Hemos realizado un total de una pasada a través de los datos a medida que leemos cada fragmento y lo
procesamos. En una segunda pasada, contamos todos los conjuntos de elementos candidatos y seleccionamos
aquellos que tienen soporte al menos s como los conjuntos de elementos frecuentes.
Primera función de reducción: A cada tarea de Reducir se le asigna un conjunto de claves, que son
conjuntos de elementos. El valor se ignora y la tarea Reducir simplemente produce esas claves
(conjuntos de elementos) que aparecen una o más veces. Por tanto, la salida de la primera función
Reducir son los conjuntos de elementos candidatos.
Segunda función de mapa: Las tareas de mapa para la segunda función de mapa toman toda la
salida de la primera función de reducción (los conjuntos de elementos candidatos) y una parte
del archivo de datos de entrada. Cada tarea de mapa cuenta el número de apariciones de cada
uno de los conjuntos de elementos candidatos entre las cestas en la parte del conjunto de datos
que se asignó. La salida es un conjunto de pares clave-valor ( CV), dónde C es uno de los
conjuntos candidatos y v es el soporte para ese conjunto de elementos entre las cestas que se
ingresaron en esta tarea de Mapa.
Segunda función de reducción: Las tareas Reducir toman los conjuntos de elementos que se les dan
como claves y suman los valores asociados. El resultado es el soporte total para cada uno de los
conjuntos de elementos para los que se asignó la tarea Reducir. Aquellos conjuntos de elementos cuya
suma de valores es al menos s son frecuentes en todo el conjunto de datos, por lo que
242 CAPÍTULO 6. CONJUNTOS FRECUENTES
la tarea Reducir genera estos conjuntos de elementos con sus recuentos. Conjuntos de
elementos que no tienen soporte total al menos s no se transmiten a la salida de la tarea Reducir.
2
Ejemplo 6.11: Suponga que los elementos son { A B C D E} y hemos encontrado que los
siguientes conjuntos de elementos son frecuentes en la muestra: { A}, {B}, {C}, {D}, {B, C},
{ CD}. Tenga en cuenta que ∅ También es frecuente, siempre que existan al menos tantas
cestas como el umbral de soporte, aunque técnicamente los algoritmos que hemos
descrito omiten este hecho evidente. Primero, { MI} está en el borde negativo, porque no
es frecuente en la muestra, pero es su único subconjunto inmediato, ∅, es frecuente.
Los conjuntos { A, B}, {A, C}, {A, D} y { B, D} están en el borde negativo. Ninguno
de estos conjuntos es frecuente y cada uno tiene dos subconjuntos inmediatos, los
cuales son frecuentes. Por ejemplo, { A, B} tiene subconjuntos inmediatos { A} y { B}.
De los otros seis doubleton, ninguno está en el borde negativo. Los conjuntos { ANTES DE CRISTO}
y { CD} no están en la frontera negativa, porque son frecuentes. Los cuatro pares
restantes son cada uno mi junto con otro elemento, y esos no están en el borde
negativo porque tienen un subconjunto inmediato { MI} eso no es frecuente.
Ninguno de los conjuntos triples o más grandes está en el borde negativo. Por ejemplo,
{ B, C, D} no está en el borde negativo porque tiene un subconjunto inmediato
2 Estrictamente hablando, la función Reducir tiene que producir un valor para cada tecla. Puede producir 1 como
valor para los conjuntos de elementos que se encuentran frecuentes y 0 para los que no lo son.
6.4. ALGORITMOS DE PASO LIMITADO 243
1. Ningún miembro del borde negativo es frecuente en todo el conjunto de datos. En este caso, el
conjunto correcto de conjuntos de elementos frecuentes son exactamente aquellos conjuntos
de elementos de la muestra que se encontraron frecuentes en el conjunto.
Ejercicio 6.4.2: Aplique el algoritmo de Toivonen a los datos del ejercicio 6.3.1, con un
umbral de soporte de 4. Tome como muestra la primera fila de cestas:
{ 1, 2, 3}, {2, 3, 4}, {3, 4, 5} y {4, 5, 6}, es decir, un tercio del archivo. Nuestro soporte
reducido será 1.
(c) ¿Cuál es el resultado de la transferencia a través del conjunto de datos completo? ¿Alguno de los
conjuntos de elementos del borde negativo es frecuente en el conjunto?
!! Ejercicio 6.4.3: Supongamos que el artículo I aparece exactamente s veces en un archivo de norte cestas
dónde s es el umbral de soporte. Si tomamos una muestra de norte/ 100 cestas, y
baje el umbral de soporte para la muestra a s/ 100, ¿cuál es la probabilidad de que I
se encontrará que es frecuente? Puede suponer que ambos s y norte son divisibles
por 100.
1. Podemos utilizar esta colección de conjuntos de elementos frecuentes para cualquier aplicación que
tengamos a mano, pero empezar a ejecutar otra iteración del algoritmo de conjuntos de elementos
frecuentes elegido inmediatamente. Este algoritmo puede:
(a) Reúna periódicamente un nuevo segmento de las cestas del flujo y utilícelo como
archivo de datos para otra iteración del algoritmo de conjuntos de elementos
frecuentes elegido. La nueva colección de elementos frecuentes se forma a partir
del resultado de esta iteración y los conjuntos de elementos frecuentes de la
colección anterior que han sobrevivido a la posibilidad de haber sido eliminados
por volverse poco frecuentes.
Recuerde de la sección 4.7 que una ventana en descomposición en una corriente se forma
seleccionando una pequeña constante C y dando el I th elemento antes del elemento más
reciente el peso (1 - C) I, o aproximadamente mi - ci. La sección 4.7.3 presenta un método para
calcular los elementos frecuentes, siempre que el umbral de apoyo se defina de una manera
algo diferente. Es decir, consideramos, para cada elemento, un flujo que tenía 1 si el elemento
aparecía en un determinado elemento del flujo y 0 en caso contrario. Definimos la “puntuación”
para ese elemento como la suma de las ponderaciones donde su elemento de flujo era 1.
Estábamos obligados a registrar todos los elementos cuya puntuación fuera al menos 1/2. No
podemos usar un umbral de puntuación por encima de 1, porque no iniciamos un recuento de
un elemento hasta que el elemento aparece en la secuencia, y la primera vez que aparece, su
puntuación es solo 1 (ya que 1, o (1 - C) 0, es el peso del artículo actual).
Si deseamos adaptar este método a los flujos de cestas, debemos hacer dos modificaciones. El
primero es sencillo. Los elementos de flujo son cestas en lugar de elementos individuales, por lo que
pueden aparecer muchos elementos en un elemento de flujo determinado. Trate cada uno de esos
elementos como si fueran el elemento "actual" y agregue 1 a su puntaje después de multiplicar todos
los puntajes actuales por 1 - C, como se describe en la Sección 4.7.3. Si algunos elementos de una cesta
no tienen puntuación actual, inicialice las puntuaciones de esos elementos en 1.
Ejemplo 6.12: Suponer I es un conjunto de elementos grande, pero aparece en las novedades
periódicamente, una vez cada 1/2 C cestas. Entonces su puntaje, y el de sus subconjuntos, nunca cae
por debajo de mi - 1/2, que es mayor que 1/2. Por lo tanto, una vez que se crea una puntuación para
algún subconjunto de I, ese subconjunto seguirá puntuándose para siempre. La primera vez I aparece,
solo sus subconjuntos singleton tendrán puntajes creados para ellos. Sin embargo, la prxima vez I
aparece, cada uno de sus subconjuntos de doubleton comenzará a puntuar, ya que cada uno de los
subconjuntos inmediatos de esos doubletons ya está siendo puntuado. Asimismo, el k la vez I aparece,
sus subconjuntos de tamaño k - 1 están siendo puntuados, por lo que iniciamos puntuaciones para
cada uno de sus subconjuntos de tamaño k. Finalmente, alcanzamos el tamaño | Yo |, momento en el
que empezamos a anotar I sí mismo. ✷
6.5. CONTAR ELEMENTOS FRECUENTES EN UNA SECUENCIA 247
Podemos combinar las ideas de las Secciones 6.5.1 y 6.5.2. Por ejemplo, podríamos ejecutar
un algoritmo estándar para conjuntos de elementos frecuentes en una muestra del flujo, con un
umbral convencional de soporte. Los conjuntos de elementos que se encuentran frecuentes por
este algoritmo se tratarán como si todos hubieran llegado en el momento actual. Es decir, cada
uno obtiene una puntuación igual a una fracción fija de su recuento.
Más precisamente, suponga que la muestra inicial tiene B cestas C es la constante de decaimiento
para la ventana decadente, y la puntuación mínima que deseamos aceptar para un conjunto de
elementos frecuentes en la ventana decadente es s. Entonces, el umbral de soporte para la ejecución
inicial del algoritmo de conjunto de elementos frecuentes es bcs. Si un conjunto de elementos I se
encuentra que tiene apoyo t en la muestra, inicialmente se le da una puntuación de t / (bc).
✦ El cuello de botella del conteo de parejas: Para encontrar conjuntos de elementos frecuentes, necesitamos
examinar todas las cestas y contar el número de apariciones de conjuntos de cierto tamaño.
Para los datos típicos, con el objetivo de producir una pequeña cantidad de conjuntos de
elementos que sean los más frecuentes de todos, la parte que a menudo ocupa la mayor parte
de la memoria principal es el recuento de pares de elementos. Por tanto, los métodos para
encontrar conjuntos de elementos frecuentes normalmente se concentran en cómo minimizar
la memoria principal necesaria para contar pares.
✦ Matrices triangulares: Si bien uno podría usar una matriz bidimensional para
contar pares, al hacerlo se desperdicia la mitad del espacio, porque no hay necesidad de
contar pares { yo, j} tanto en el ij y Ji elementos de matriz. Organizando los pares ( yo, j)
para cual yo <j en orden lexicográfico, podemos almacenar solo los recuentos necesarios
en una matriz unidimensional sin desperdicio de espacio y, sin embargo, poder acceder al
recuento de cualquier par de manera eficiente.
✦ Almacenamiento de recuentos de pares como triples: Si menos de 1/3 de los posibles pares
ocurren realmente en cestas, entonces es más eficiente en el espacio almacenar
recuentos de pares como triples ( yo, j, c), dónde C es el recuento del par { yo, j}, y yo <j.
Una estructura de índice como una tabla hash nos permite encontrar el triple de ( yo, j)
eficientemente.
✦ Monotonicidad de conjuntos de elementos frecuentes: Una propiedad importante de los conjuntos de elementos es
que si un conjunto de elementos es frecuente, también lo son todos sus subconjuntos. Aprovechamos
esta propiedad para eliminar la necesidad de contar ciertos conjuntos de elementos mediante el uso de
su contrapositivo: si un conjunto de elementos no es frecuente, tampoco lo son sus superconjuntos.
6.6. RESUMEN DEL CAPITULO 6 249
✦ El algoritmo A-Priori para pares: Podemos encontrar todos los pares frecuentes por
haciendo dos pases sobre las cestas. En la primera pasada, contamos los elementos en sí
mismos y luego determinamos qué elementos son frecuentes. En la segunda pasada,
contamos sólo los pares de elementos que se encuentran frecuentes en la primera
pasada. La monotonicidad justifica que ignoremos a otros pares.
✦ Encontrar conjuntos de elementos frecuentes más grandes: A-Priori y muchos otros algoritmos
permítanos encontrar conjuntos de elementos frecuentes más grandes que pares, si hacemos una pasada sobre
las cestas para cada conjunto de elementos de tamaño, hasta cierto límite. Para encontrar los conjuntos de
elementos frecuentes de tamaño k, La monotonicidad nos permite restringir nuestra atención solo a aquellos
conjuntos de elementos de modo que todos sus subconjuntos de tamaño k - Ya se han encontrado frecuentes.
todos los conjuntos de elementos frecuentes del segmento se puedan encontrar en la memoria principal. Los
conjuntos de elementos candidatos son los que se encuentran frecuentes para al menos un segmento. A
250 CAPÍTULO 6. CONJUNTOS FRECUENTES
El segundo paso nos permite contar todos los candidatos y encontrar la colección exacta de
conjuntos de elementos frecuentes. Este algoritmo es especialmente apropiado en una
configuración de MapReduce.
✦ Algoritmo de Toivonen: Este algoritmo comienza por encontrar conjuntos de elementos frecuentes
en una muestra, pero con el umbral reducido, por lo que hay pocas posibilidades de perder un
conjunto de elementos que es frecuente en el conjunto. A continuación, examinamos todo el
archivo de cestas, contando no sólo los conjuntos de elementos que son frecuentes en la
muestra, sino también el borde negativo: conjuntos de elementos que no se han encontrado
frecuentes, pero todos sus subconjuntos inmediatos sí lo son. Si ningún miembro de la frontera
negativa se encuentra frecuente en el conjunto, entonces la respuesta es exacta. Pero si un
miembro del borde negativo se encuentra con frecuencia, entonces todo el proceso debe
repetirse con otra muestra.
✦ Conjuntos de elementos frecuentes en las transmisiones: Si usamos una ventana en decadencia con constante
C, entonces podemos empezar a contar un artículo cada vez que lo veamos en una cesta.
Comenzamos a contar un conjunto de elementos si lo vemos contenido dentro de la
canasta actual, y todos sus subconjuntos adecuados inmediatos ya se están contando. A
medida que la ventana decae, multiplicamos todos los recuentos por 1. - C y elimine los
que sean menos de la mitad.