Está en la página 1de 39

Traducido del inglés al español - www.onlinedoctranslator.

com

Capítulo 6

Conjuntos de elementos frecuentes

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.

Para comenzar, presentamos el modelo de datos de “canasta de mercado”, que es esencialmente


una relación de muchos-muchos entre dos tipos de elementos, llamados “artículos” y “canastas”, pero
con algunas suposiciones sobre la forma de los datos. El problema de los conjuntos de elementos
frecuentes es el de encontrar conjuntos de elementos que aparecen en (están relacionados con)
muchas de las mismas cestas.

El problema de encontrar conjuntos de elementos frecuentes difiere de la búsqueda


de similitudes discutida en el capítulo 3. Aquí nos interesa el número absoluto de cestas
que contienen un conjunto particular de elementos. En el Capítulo 3 queríamos artículos
que tuvieran una gran fracción de sus cestas en común, incluso si el número absoluto de
cestas es pequeño.

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.

A continuación, consideramos algoritmos aproximados que funcionan más rápido pero no se


garantiza que encuentren todos los conjuntos de elementos frecuentes. También en esta clase de
algoritmos están los que explotan el paralelismo, incluido el paralelismo que podemos obtener a través
de una formulación MapReduce. Finalmente, discutimos brevemente cómo encontrar conjuntos de
elementos frecuentes en un flujo de datos.

213
214 CAPÍTULO 6. CONJUNTOS FRECUENTES

6.1 El modelo de la cesta de la compra


los canasta de mercado El modelo de datos se utiliza para describir una forma común
de relación de muchos muchos entre dos tipos de objetos. Por un lado, tenemos
elementos, y por el otro tenemos cestas a veces llamadas "transacciones". Cada canasta
consta de un conjunto de artículos (un itemset), y generalmente asumimos que la cantidad
de artículos en una canasta es pequeña, mucho menor que la cantidad total de artículos.
Por lo general, se asume que el número de cestas es muy grande, más grande de lo que
cabe en la memoria principal. Se supone que los datos están representados en un archivo
que consta de una secuencia de cestas. En términos del sistema de archivos distribuidos
descrito en la Sección 2.1, las cestas son los objetos del archivo y cada cesta es del tipo
"conjunto de elementos".

6.1.1 Definición de conjuntos de elementos 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.

1. {Gato y perro muerde}

2. {Yahoo, noticias, afirmaciones, a, gato, emparejado, con, a, perro y, producido, viable, o ff


primavera}

3. {Gato, asesino, probablemente, es, un, gran, perro}

4. {Asesoramiento profesional, gratuito, sobre, perro, adiestramiento, cachorro, adiestramiento}

5. {Gato y gatito, entrenamiento y comportamiento}

6. {Perro, y, gato, proporciona, perro, adiestramiento, en, Eugene, Oregón}

7. {"Perro, y, gato", es, a, jerga, término, usado, por, policía, oficiales, para, a,
relación hombre-mujer}

8. {Compre, para, su, show, perro, aseo y, suministros para mascotas}

Figura 6.1: Aquí hay ocho cestas, cada una de las cuales consta de elementos que son palabras.

Dado que el conjunto vacío es un subconjunto de cualquier conjunto, el soporte para ∅ es 8.


Sin embargo, generalmente no nos preocuparemos por el conjunto vacío, ya que nos dice
6.1. EL MODELO MERCADO-CESTA 215

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

Figura 6.2: Ocurrencias de doubletons

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

{ perro, a} {perro y} {perro, gato}


{ gato, a} { gato y}

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

Venta al por menor en línea versus minorista de ladrillo y mortero

Sugerimos en la Sección 3.1.3 que un minorista en línea usaría medidas de


similitud para artículos para encontrar pares de artículos que, aunque muchos
clientes no los comprarían, tenían una fracción significativa de sus clientes en
común. Un minorista en línea podría anunciar un artículo del par a los pocos
clientes que habían comprado el otro artículo del par. Esta metodología no
tiene sentido para un minorista tradicional, porque a menos que mucha gente
compre un artículo, no puede ser rentable anunciar una oferta en el artículo.
Por lo tanto, las técnicas del Capítulo 3 no suelen ser útiles para los minoristas
tradicionales.
Por el contrario, el minorista en línea tiene poca necesidad del análisis que
discutimos en este capítulo, ya que está diseñado para buscar conjuntos de artículos que
aparecen con frecuencia. Si el minorista en línea se limitara a conjuntos de artículos
frecuentes, perdería todas las oportunidades que están presentes en la "cola larga" para
seleccionar anuncios para cada cliente individualmente.

6.1.2 Aplicaciones de conjuntos de elementos frecuentes

La aplicación original del modelo de canasta de mercado fue en el análisis de canastas de


mercado reales. Es decir, los supermercados y las cadenas de tiendas registran el contenido de
cada canasta de mercado (carrito de compras físico) que se lleva al registro para el pago. Aquí los
"artículos" son los diferentes productos que vende la tienda, y las "canastas" son los conjuntos
de artículos en una sola canasta de mercado. Una cadena importante podría vender 100.000
artículos diferentes y recopilar datos sobre millones de cestas de mercado.

Al encontrar conjuntos de artículos frecuentes, un minorista puede aprender lo que


comúnmente se compran juntos. Especialmente importantes son los pares o conjuntos más
grandes de artículos que ocurren con mucha más frecuencia de lo que se esperaría si los
artículos se compraran de forma independiente. Discutiremos este aspecto del problema en la
sección 6.1.3, pero por el momento consideremos simplemente la búsqueda de conjuntos de
elementos frecuentes. Descubriremos mediante este análisis que muchas personas compran
pan y leche juntos, pero eso tiene poco interés, ya que ya sabíamos que estos eran artículos
populares individualmente. Podríamos descubrir que muchas personas compran salchichas y
mostaza juntas. Eso, de nuevo, no debería sorprender a las personas a las que les gustan los
perros calientes, pero ofrece al supermercado la oportunidad de hacer un marketing inteligente.
Pueden anunciar una oferta de hot dogs y subir el precio de la mostaza. Cuando la gente viene a
la tienda a comprar perritos calientes baratos, a menudo recuerdan que necesitan mostaza y la
compran también. O no notarán que el precio es alto, o razonan que no vale la pena ir a otro
lugar por mostaza más barata.
El famoso ejemplo de este tipo es "pañales y cerveza". Difícilmente se esperaría que estos dos
artículos estuvieran relacionados, pero a través del análisis de datos, una cadena de tiendas descubrió
que las personas que compran pañales tienen una probabilidad inusual de comprar cerveza. los
6.1. EL MODELO MERCADO-CESTA 217

la teoría es que si compras pañales, probablemente tengas un bebé en casa, y si tienes un


bebé, es poco probable que estés bebiendo en un bar; por lo tanto, es más probable que
lleve cerveza a casa. El mismo tipo de táctica de marketing que sugerimos para los hot
dogs y la mostaza podría usarse para los pañales y la cerveza.
Sin embargo, las aplicaciones del análisis de conjuntos de artículos frecuentes no se limitan a las canastas
de mercado. El mismo modelo se puede utilizar para extraer muchos otros tipos de datos. Algunos ejemplos
son:

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.

6.1.3 Reglas de asociación


Si bien el tema de este capítulo es extraer conjuntos frecuentes de elementos de los datos, esta
información a menudo se presenta como una colección de reglas si-entonces, llamadas reglas de
asociación. La forma de una regla de asociación es I → j, dónde I es un conjunto de elementos y j
es un artículo. La implicación de esta regla de asociación es que si todos los elementos en I
aparecer en alguna canasta, entonces j es "probable" que también aparezca en esa canasta.
218 CAPÍTULO 6. CONJUNTOS FRECUENTES

Formalizamos la noción de "probable" definiendo el confianza de la regla


I → j para ser la proporción del apoyo para I ∪ { j} al apoyo de I. Es decir, la confianza
de la regla es la fracción de las canastas con todos los I que tambien contienen j.

Ejemplo 6.2: Considere las cestas de la figura 6.1. La confianza de la regla


{ gato perro} → y es 3/5. Las palabras "gato" y "perro" aparecen en cinco cestas:
(1), (2), (3), (6) y (7). De estos, "y" aparece en (1), (2) y (7), o 3/5 de las canastas.

Para otra ilustración, la confianza de { gato} → gatito es 1/6. La palabra "gato"


aparece en seis cestas, (1), (2), (3), (5), (6) y (7). De estos, solo (5) tiene la palabra
"gatito". ✷

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.

Por lo tanto, de fi nimos el interesar de una regla de asociación I → j ser la


diferencia entre su confianza y la fracción de cestas que contienen j. Es decir, si I no
tiene ninguna influencia en j, entonces esperaríamos que la fracción de cestas que
incluye I que contienen j sería exactamente igual a la fracción de todas las cestas que
contienen j. Tal regla tiene interés 0. Sin embargo, es interesante, tanto en el sentido
informal como técnico, si una regla tiene un interés alto, lo que significa que la
presencia de I en una canasta de alguna manera provoca la presencia de j, o interés
muy negativo, lo que significa que la presencia de I desalienta la presencia de j.

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". ✷

6.1.4 Encontrar reglas de asociación con alta confianza


Identificar reglas de asociación útiles no es mucho más difícil que encontrar conjuntos de elementos
frecuentes. Abordaremos el problema de encontrar conjuntos de elementos frecuentes en el resto de
este capítulo, pero, por el momento, supongamos que es posible encontrar esos conjuntos de
elementos frecuentes cuyo apoyo está en o por encima de un umbral de apoyo. s.
Si buscamos reglas de asociación I → j que se aplican a una fracción razonable de las
cestas, entonces el apoyo de I debe ser razonablemente alto. En la práctica, como para la
comercialización en tiendas físicas, "razonablemente alto" suele ser alrededor del 1% de
las canastas. También queremos que la confianza de la regla sea razonablemente alta,
quizás 50%, o de lo contrario la regla tiene poco efecto práctico. Como resultado, el
conjunto I ∪ { j} también tendrá un apoyo bastante alto.
Supongamos que hemos encontrado todos los conjuntos de elementos que cumplen con un umbral de
soporte y que tenemos el soporte exacto calculado para cada uno de estos conjuntos de elementos. Podemos
encontrar dentro de ellos todas las reglas de asociación que tienen tanto un alto apoyo como una gran
confianza. Es decir, si J es un conjunto de norte elementos que se encuentran frecuentes, solo hay norte
posibles reglas de asociación que involucran este conjunto de elementos, a saber J - { j} → j
para cada j en J. Si J es frecuente, J - { j} debe ser al menos igual de frecuente. Por lo tanto,
también es un conjunto de elementos frecuente, y ya hemos calculado el soporte de ambos J
y J - { j}. Su razón es la confianza de la regla. J - { j} → j.
Se debe suponer que no hay demasiados conjuntos de elementos frecuentes y, por lo tanto,
no hay demasiados candidatos para reglas de asociación de alto apoyo y alta confianza. La razón
es que se debe actuar sobre cada uno de los encontrados. Si le damos al gerente de la tienda un
millón de reglas de asociación que cumplen con nuestros límites de apoyo y confianza, ni
siquiera pueden leerlas, y mucho menos actuar en consecuencia. Del mismo modo, si
producimos un millón de candidatos para biomarcadores, no podemos permitirnos realizar los
experimentos necesarios para comprobarlos. Por lo tanto, es normal ajustar el umbral de
soporte para que no obtengamos demasiados conjuntos de elementos frecuentes. Esta
suposición conduce, en secciones posteriores, a importantes consecuencias sobre la eficiencia
de los algoritmos para encontrar conjuntos de elementos frecuentes.

6.1.5 Ejercicios para la sección 6.1


Ejercicio 6.1.1: 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 I divide B
sin resto. Por lo tanto, el artículo 1 está en todas las canastas, el artículo 2 está en las cincuenta
canastas pares, y así sucesivamente. La canasta 12 consta de los elementos {1, 2, 3, 4, 6, 12}, ya
que estos son todos los números enteros que dividen 12. Responda las siguientes preguntas:

(a) Si el umbral de apoyo es 5, ¿qué elementos son frecuentes?

! ( b) Si el umbral de soporte es 5, ¿qué pares de elementos son frecuentes?


220 CAPÍTULO 6. CONJUNTOS FRECUENTES

! ( c) ¿Cuál es la suma de los tamaños de todas las canastas?

! 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

{ 12, 24, 36, 48, 60, 72, 84, 96}

Repita el ejercicio 6.1.1 para estos datos.

! 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?

(a) {24, 60} → 8.

(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:

(a) Ejercicio 6.1.1.

(b) Ejercicio 6.1.3.

! 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

6.2 Canastas de mercado y el algoritmo A-Priori


Ahora comenzaremos una discusión sobre cómo encontrar conjuntos de elementos
frecuentes o información derivada de ellos, como reglas de asociación con alto apoyo y
confianza. La mejora original de los algoritmos obvios, conocida como "A-Priori", a partir
de la cual se han desarrollado muchas variantes, se tratará aquí. Las próximas dos
secciones discutirán algunas mejoras adicionales. Antes de discutir el algoritmo Apriori en
sí, comenzamos la sección con un esquema de los supuestos sobre cómo se almacenan y
manipulan los datos cuando se buscan conjuntos de elementos frecuentes.

6.2.1 Representación de datos de la canasta de mercado


Como mencionamos, asumimos que los datos de la canasta de mercado se almacenan en un archivo
canasta por canasta. Posiblemente, los datos están en un sistema de archivos distribuido como en la
Sección 2.1, y las cestas son los objetos que contiene el archivo. O los datos pueden almacenarse en un
archivo convencional, con un código de carácter para representar las cestas y sus artículos.

Ejemplo 6.4: Podríamos imaginar que tal archivo comienza:

{23,456,1001} {3,18,92,145} {...

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.

6.2.2 Uso de la memoria principal para el recuento de conjuntos de elementos

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

ya en la tabla hash, podemos obtener su código entero de su entrada en la tabla. Si el


artículo no está allí, le asignamos el siguiente número disponible (de un recuento del
número de artículos distintos vistos hasta ahora) e ingresamos el artículo y su código
en la tabla.

El método de la matriz triangular

Incluso después de codificar elementos como números enteros, todavía tenemos el


problema de que debemos contar un par { yo, j} en un solo lugar. Por ejemplo, podríamos
pedir el par para que yo <j, y solo usa la entrada a [i, j] en una matriz bidimensional una.
Esa estrategia inutilizaría la mitad de la matriz. Una forma más eficiente en el espacio es
usar un unidimensional matriz triangular. Nosotros almacenar en Alaska] el recuento de la pareja
{ yo, j}, con 1 ≤ yo <j ≤ norte, dónde

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}.

El método de los triples

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

recuentos distintos de cero. Si usáramos el método de triples para almacenar recuentos,


necesitaríamos solo tres veces ese número de enteros, o 1,35 × 10 9 enteros. Por lo tanto, en este
caso, el método de las triples seguramente ocupará mucho menos espacio que la matriz
triangular.
Sin embargo, incluso si hubiera diez o cien veces más canastas, sería normal que
hubiera una distribución suficientemente desigual de artículos que aún sería mejor
utilizar el método de triples. Es decir, algunos pares tendrían conteos muy altos y el
número de pares diferentes que ocurrieron en una o más canastas sería mucho
menor que el número máximo teórico de tales pares. ✷

6.2.3 Monotonicidad de los conjuntos de elementos

Gran parte de la efectividad de los algoritmos que discutiremos está impulsada por una sola
observación, llamada monotonicidad para conjuntos de elementos:

• Si un conjunto I de elementos es frecuente, entonces también lo es cada subconjunto de I.

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

{ perro, a} {perro y} {perro, gato}


{ gato, a} { gato y}

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

6.2.4 Tiranía de contar pares


Como habrás notado, hasta ahora nos hemos centrado en la cuestión de contar pares en la
discusión. Hay una buena razón para hacerlo: en la práctica, se requiere la mayor cantidad de
memoria principal para determinar los pares frecuentes. El número de elementos, aunque
posiblemente muy grande, rara vez es tan grande que no podamos contar todos los conjuntos
de singleton en la memoria principal al mismo tiempo.
¿Qué pasa con los conjuntos más grandes: triples, cuádruples, etc.? Recuerde que para que el
análisis de conjuntos de elementos frecuentes tenga sentido, el resultado debe ser un número pequeño
de conjuntos, o ni siquiera podemos leer todos ellos, y mucho menos considerar su importancia. Por lo
tanto, en la práctica, el umbral de soporte se establece lo suficientemente alto como para que solo sea
un conjunto raro el que sea frecuente. La monotonicidad nos dice que si hay un triple frecuente,
entonces hay tres pares frecuentes contenidos dentro de él. Y, por supuesto, también puede haber
pares frecuentes contenidos en ningún triple frecuente. Por lo tanto, esperamos encontrar pares más
frecuentes que triples frecuentes, triples más frecuentes que cuádruples frecuentes, etc.

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.

6.2.5 El algoritmo A-Priori


Por el momento, concentrémonos en encontrar únicamente los pares frecuentes. Si
tenemos suficiente memoria principal para contar todos los pares, usando cualquiera de
los métodos discutidos en la Sección 6.2.2 (matriz triangular o triples), entonces es una
cuestión simple leer el archivo de cestas en una sola pasada. Para cada canasta, usamos
un bucle doble para generar todos los pares. Cada vez que generamos un par, sumamos 1
a su recuento. Al final, examinamos todos los pares para ver cuáles tienen recuentos
iguales o superiores al umbral de soporte. s; estos son los pares frecuentes.
Sin embargo, este enfoque simple falla si hay demasiados pares de elementos para
contarlos todos en la memoria principal. los A priori El algoritmo está diseñado para
reducir la cantidad de pares que deben contarse, a expensas de realizar dos pasadas sobre
los datos, en lugar de una sola pasada.

El primer paso de A-Priori

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

Entre los pasos de A-Priori

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.

El segundo paso de A-Priori

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.

Finalmente, al final de la segunda pasada, examine la estructura de los conteos para


determinar qué pares son frecuentes.

6.2.6 A-Priori para todos los conjuntos de elementos frecuentes

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

No usado Estructura de datos

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.

El patrón de pasar de un tamaño k al siguiente tamaño k + 1 se puede resumir de la


siguiente manera. Para cada talla k, hay dos conjuntos de conjuntos de elementos:

1. C k es el conjunto de candidato conjuntos de artículos de tamaño k - los conjuntos de


elementos que debemos contar para determinar si de hecho son frecuentes.

2. L k es el conjunto de conjuntos de elementos de tamaño verdaderamente frecuentes k.

El patrón de pasar de un conjunto a la siguiente y de una talla a la siguiente es


sugerido por la Fig. 6.4.

C1 L1 C2 L 2 C3 L3
Filtrar Construir Filtrar Construir Filtrar Construir ...

Todos Frecuente Pares de Frecuente


elementos elementos
frecuente pares
elementos

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. ✷

La construcción de las colecciones de candidatos y conjuntos de elementos frecuentes más grandes


procede esencialmente de la misma manera, hasta que en algún momento no encontramos nuevos conjuntos
de elementos frecuentes y nos detenemos. Es decir:

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.

6.2.7 Ejercicios para la sección 6.2


Ejercicio 6.2.1: Si usamos una matriz triangular para contar pares, y norte, el número de
elementos, es 20, el recuento de qué pares está en a[ 100]?

! 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:

(a) Ejercicio 6.1.1.

(b) Ejercicio 6.1.3.

Ejercicio 6.2.6: Aplicar el algoritmo A-Priori con umbral de soporte 5 a los datos de:

(a) Ejercicio 6.1.1.

(b) Ejercicio 6.1.3.

! Ejercicio 6.2.7: Supongamos que tenemos canastas de mercado que satisfacen los
siguientes supuestos:

1. El umbral de soporte es 10,000.

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.

4. Hay un millón de pares 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.

6. No se producen otros pares en absoluto.

7. Los números enteros siempre están representados por 4 bytes.

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?

6.3 Manejo de conjuntos de datos más grandes en la memoria principal

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.

6.3.1 El algoritmo de Park, Chen y Yu


Este algoritmo, al que llamamos PCY después de sus autores, explota la observación de que
puede haber mucho espacio no utilizado en la memoria principal en la primera pasada. Si hay un
millón de elementos y gigabytes de memoria principal, no necesitamos más del 10% de la
memoria principal para las dos tablas sugeridas en la figura 6.3: una tabla de traducción de
nombres de elementos a números enteros pequeños y una matriz para contar esos números
enteros. . El algoritmo PCY usa ese espacio para una matriz de números enteros que generaliza
la idea de un filtro Bloom (consulte la Sección 4.3). La idea se muestra esquemáticamente en la
figura 6.5.
Piense en esta matriz como una tabla hash, cuyos cubos contienen números enteros en lugar de
conjuntos de claves (como en una tabla hash ordinaria) o bits (como en un filtro Bloom). Los pares de
elementos se cifran en cubos de esta tabla hash. Cuando examinamos una canasta durante la primera
pasada, no solo sumamos 1 al recuento de cada artículo de la canasta, sino que
6.3. MANEJO DE GRANDES CONJUNTOS DE DATOS EN LA MEMORIA PRINCIPAL 231

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

Tabla de picadillo Estructura de datos


para cubo por recuentos

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:

1. I y j son artículos frecuentes.

2. { yo, j} hashes a un cubo frecuente.

Es la segunda condición que distingue a PCY de A-Priori.

Ejemplo 6.9: Dependiendo de los datos y la cantidad de memoria principal disponible, el


uso de la tabla hash en el paso 1 puede resultar beneficioso o no. En el peor de los casos,
todos los depósitos son frecuentes y el algoritmo PCY cuenta exactamente los mismos
pares que A -Priori lo hace en la segunda pasada. Sin embargo, a veces, podemos esperar
que la mayoría de los depósitos sean poco frecuentes. En ese caso, PCY reduce los
requisitos de memoria de la segunda pasada.
232 CAPÍTULO 6. CONJUNTOS FRECUENTES

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.

6.3.2 El algoritmo de etapas múltiples


los Algoritmo de varias etapas mejora PCY mediante el uso de varias tablas hash
sucesivas para reducir aún más el número de pares candidatos. El tradeo ff es que
6.3. MANEJO DE GRANDES CONJUNTOS DE DATOS EN LA MEMORIA PRINCIPAL 233

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 1 Mapa de bits 1

Mapa de bits 2

Segundo
Tabla de picadillo
Estructura de datos
tabla de picadillo
para cubo
por recuentos
para cubo
cuenta de parejas
cuenta

Pase 1 Pase 2 Pase 3

Figura 6.6: El algoritmo de etapas múltiples utiliza tablas hash adicionales para reducir el
número de pares candidatos

La primera pasada de Multietage es la misma que la primera pasada de PCY. Después


de esa pasada, los depósitos frecuentes se identifican y resumen mediante un mapa de
bits, de nuevo igual que en PCY. Pero el segundo pase de Multietage no cuenta los pares
candidatos. Más bien, usa la memoria principal disponible para otra tabla hash, usando
otra función hash. Dado que el mapa de bits de la primera tabla hash ocupa 1/32 de la
memoria principal disponible, la segunda tabla hash tiene casi tantos depósitos como la
primera.
En la segunda pasada de Multietapa, pasamos de nuevo por el archivo de cestas. No es
necesario volver a contar los elementos, ya que tenemos esos recuentos desde la primera
pasada. Sin embargo, debemos conservar la información sobre qué elementos son
frecuentes, ya que la necesitamos tanto en el segundo como en el tercer paso. Durante la
segunda pasada, codificamos ciertos pares de elementos en cubos de la segunda tabla
hash. A un par se le aplica hash solo si cumple los dos criterios para ser contado en la
segunda pasada de PCY; es decir, hash { yo, j} si y solo si I y j son frecuentes, y la pareja se
ha convertido en un cubo frecuente en la primera pasada. Como resultado, la suma de los
recuentos en la segunda tabla hash debe ser significativamente menor que la suma del
primer paso. El resultado es que, aunque la segunda tabla hash tiene sólo 31/32 del
número de depósitos que tiene la primera tabla, esperamos que haya muchos menos
depósitos frecuentes en la segunda tabla hash que en la primera.
Después de la segunda pasada, la segunda tabla hash también se resume como un mapa de bits y
ese mapa de bits se almacena en la memoria principal. Los dos mapas de bits juntos toman
234 CAPÍTULO 6. CONJUNTOS FRECUENTES

Un error sutil en varias etapas

Ocasionalmente, una implementación intenta eliminar el segundo requisito de {


yo, j} para ser un candidato, que tiene que pasar a un cubo frecuente en la
primera pasada. El (falso) razonamiento es que si no hubiera obtenido un hash
en un cubo frecuente en la primera pasada, no habría sido hash en absoluto en
el segundo pase y, por lo tanto, no contribuiría al recuento de su cubo en el
segundo. aprobar. Si bien es cierto que el par no se cuenta en la segunda
pasada, eso no significa que no se hubiera cifrado en un cubo frecuente si
hubiera sido hash. Por lo tanto, es muy posible que { yo, j} consta de dos
elementos frecuentes y hashes en un cubo frecuente en la segunda pasada,
pero no se hash en un cubo frecuente en la primera pasada. Por lo tanto, las
tres condiciones deben verificarse en el pase de conteo de Multietapa.

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:

1. I y j son elementos frecuentes.

2. { yo, j} hash a un cubo frecuente en la primera tabla hash.

3. { yo, j} hash a un cubo frecuente en la segunda tabla hash.

La tercera condición es la distinción entre etapas múltiples y PCY.


Puede resultar obvio que es posible insertar cualquier número de pasadas entre la primera y
la última en el algoritmo de etapas múltiples. Existe un factor limitante de que cada paso debe
almacenar los mapas de bits de cada uno de los pases anteriores. Finalmente, no queda
suficiente espacio en la memoria principal para realizar los recuentos. No importa cuántos pases
usemos, los pares verdaderamente frecuentes siempre se convertirán en un cubo frecuente, por
lo que no hay forma de evitar contarlos.

6.3.3 El algoritmo Multihash


A veces, podemos obtener la mayor parte del beneficio de las pasadas adicionales del
algoritmo multietapa en una sola pasada. Esta variación de PCY se llama Algoritmo
Multihash. En lugar de usar dos tablas hash diferentes en dos pasadas sucesivas, use dos
funciones hash y dos tablas hash separadas que compartan la memoria principal en la
primera pasada, como sugiere la figura 6.7.
El peligro de usar dos tablas hash en una pasada es que cada tabla hash tiene la mitad
de cubos que la tabla hash grande de PCY. Siempre que el recuento promedio de un
depósito para PCY sea mucho más bajo que el umbral de soporte, podemos operar dos
tablas hash de tamaño medio y aún esperar que la mayoría de los depósitos de ambas
tablas hash sean poco frecuentes. Por lo tanto, en esta situación bien podríamos elegir el
enfoque de multihash.
6.3. MANEJO DE GRANDES CONJUNTOS DE DATOS EN LA MEMORIA PRINCIPAL 235

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 1 Mapa de bits 2

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.

6.3.4 Ejercicios para la sección 6.3


Ejercicio 6.3.1: Aquí hay una colección de doce cestas. Cada uno contiene tres de
los seis elementos del 1 al 6.

{ 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}

Suponga que el umbral de apoyo es 4. En la primera pase del algoritmo PCY


usamos una tabla hash con 11 cubos y el conjunto { yo, j} está hash al cubo I × j
mod 11.

(a) Por cualquier método, calcule el apoyo para cada artículo y cada par de artículos.

(b) ¿Qué pares de hash con qué cubos?

(c) ¿Qué cangilones son frecuentes?

(d) ¿Qué pares se cuentan en la segunda pasada del algoritmo PCY?

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:

1. El umbral de soporte es 10,000.

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.

4. Hay un millón de pares que ocurren 10,000 veces o más.

5. Hay PAG pares que ocurren exactamente una vez y constan de dos elementos
frecuentes.

6. No se producen otros pares en absoluto.

7. Los números enteros siempre están representados por 4 bytes.

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:

1. El umbral de soporte es 10,000.

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.

3. Hay un millón de pares que ocurren 10,000 veces o más.

4. Hay PAG pares que ocurren exactamente una vez.

5. No se producen otros pares en absoluto.

6. Los números enteros siempre están representados por 4 bytes.


238 CAPÍTULO 6. CONJUNTOS FRECUENTES

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?

6.4 Algoritmos de paso limitado


Los algoritmos para conjuntos de elementos frecuentes discutidos hasta ahora utilizan un paso para cada
tamaño de conjunto de elementos que investigamos. Si la memoria principal es demasiado pequeña para
almacenar los datos y el espacio necesario para contar conjuntos de elementos frecuentes de un tamaño, no
parece haber ninguna forma de evitarlo. k pasa para calcular la colección exacta de conjuntos de elementos
frecuentes. Sin embargo, hay muchas aplicaciones en las que no es esencial descubrir todos los conjuntos de
elementos frecuentes. Por ejemplo, si buscamos artículos comprados juntos en un supermercado, no vamos a
realizar una venta basada en cada conjunto de artículos frecuentes que encontremos, por lo que es suficiente
encontrar la mayoría, pero no todos, los conjuntos de artículos frecuentes.
En esta sección exploramos algunos algoritmos que se han propuesto para encontrar todos
los conjuntos de elementos o los más frecuentes utilizando como máximo dos pasadas.
Comenzamos con el enfoque obvio de usar una muestra de los datos en lugar de todo el
conjunto de datos. Un algoritmo llamado SON usa dos pasos, obtiene la respuesta exacta y se
presta a la implementación por MapReduce u otro régimen de cómputo paralelo. Finalmente, el
algoritmo de Toivonen usa dos pasadas en promedio, obtiene una respuesta exacta, pero rara
vez puede no terminar en un período de tiempo determinado.

6.4.1 El algoritmo simple y aleatorio


En lugar de utilizar todo el archivo de cestas, podríamos elegir un subconjunto aleatorio de las
cestas y pretender que es el conjunto de datos completo. Debemos ajustar el umbral de soporte
para reflejar el menor número de canastas. Por ejemplo, si el umbral de soporte para el conjunto
de datos completo es s, y elegimos una muestra del 1% de las canastas, luego debemos
examinar la muestra en busca de conjuntos de elementos que aparecen en al menos s/ 100 de
las cestas.
La forma más segura de elegir la muestra es leer el conjunto de datos completo y, para cada
canasta, seleccionar esa canasta para la muestra con alguna probabilidad fija pag. Supongamos
que hay metro cestas en todo el archivo. Al final, tendremos una muestra cuyo tamaño es muy
cercano a pm cestas. Sin embargo, si tenemos razones para creer que las cestas ya aparecen en
un orden aleatorio en el archivo, entonces ni siquiera tenemos que leer el archivo completo.
Podemos seleccionar el primero pm cestas para nuestra muestra. O, si el archivo es parte de un
sistema de archivos distribuido, podemos seleccionar algunos fragmentos al azar para que
sirvan como muestra.
6.4. ALGORITMOS DE PASO LIMITADO 239

¿Por qué no elegir la primera parte del archivo?

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.

6.4.2 Evitar errores en los algoritmos de muestreo


Debemos tener en cuenta el problema con el algoritmo simple de la Sección 6.4.1: no se puede confiar
en él para producir todos los conjuntos de elementos que son frecuentes en todo el conjunto de datos,
ni producirá solo conjuntos de elementos que son frecuentes en el conjunto. Un conjunto de elementos
que es frecuente en el conjunto pero no en la muestra es un falso negativo, mientras que un conjunto
de elementos que es frecuente en la muestra pero no en el conjunto es un
falso positivo.
Si la muestra es lo suficientemente grande, es poco probable que haya errores graves. Es decir, un
conjunto de elementos cuyo apoyo es mucho mayor que el umbral casi seguramente se identificará a
partir de una muestra aleatoria, y es poco probable que un conjunto de elementos cuyo apoyo sea
mucho menor que el umbral aparezca frecuente en la muestra. Sin embargo, es probable que un
conjunto de elementos cuyo apoyo en su conjunto esté muy cerca del umbral
240 CAPÍTULO 6. CONJUNTOS FRECUENTES

ser frecuente en la muestra como no.


Podemos eliminar los falsos positivos pasando por el conjunto de datos completo y
contando todos los conjuntos de elementos que se identificaron como frecuentes en la muestra.
Mantenga como frecuentes solo los conjuntos de elementos que fueron frecuentes en la
muestra y también frecuentes en el conjunto. Tenga en cuenta que esta mejora eliminará todos
los falsos positivos, pero un falso negativo no se cuenta y, por lo tanto, permanece sin descubrir.
Para realizar esta tarea en una sola pasada, necesitamos poder contar todos los conjuntos
de elementos frecuentes de todos los tamaños a la vez, dentro de la memoria principal. Si
pudiéramos ejecutar el algoritmo simple con éxito con la memoria principal disponible, entonces
es muy probable que podamos contar todos los conjuntos de elementos frecuentes a la vez,
porque:

(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.

6.4.3 El algoritmo de Savasere, Omiecinski y Navathe

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.

6.4.4 El algoritmo SON y MapReduce


El algoritmo SON se presta bien a un entorno de computación en paralelo. Cada uno de los
fragmentos se puede procesar en paralelo y los conjuntos de elementos frecuentes de cada
fragmento se pueden combinar para formar los candidatos. Podemos distribuir los candidatos a
muchos procesadores, hacer que cada procesador cuente el soporte para cada candidato en un
subconjunto de las cestas y, finalmente, sumar esos soportes para obtener el soporte para cada
conjunto de elementos candidato en todo el conjunto de datos. Este proceso no tiene que
implementarse en MapReduce, pero existe una forma natural de expresar cada uno de los dos
pases como una operación de MapReduce. Resumiremos esto
MapReduce-MapReduce secuencia a continuación.

Primera función de mapa: Tome el subconjunto asignado de las cestas y encuentre el


conjuntos de elementos subconjunto usando el algoritmo de la Sección 6.4.1. Como
frecuentes en el escrito allí, baje el umbral de apoyo desde s para PD si cada tarea del mapa obtiene
fracción pag del archivo de entrada total. La salida es un conjunto de pares clave-valor ( F, 1),
donde F es un conjunto de elementos frecuente de la muestra. El valor es siempre 1 y es
irrelevante.

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

6.4.5 Algoritmo de Toivonen


Este algoritmo utiliza la aleatoriedad de una manera diferente al algoritmo de muestreo simple
de la Sección 6.4.1. El algoritmo de Toivonen, dada la suficiente memoria principal, utilizará una
pasada sobre una muestra pequeña y una pasada completa sobre los datos. No dará ni falsos
negativos ni positivos, pero existe una probabilidad pequeña, aunque distinta de cero, de que no
produzca ninguna respuesta. En ese caso, debe repetirse hasta que dé una respuesta. Sin
embargo, el número medio de pasadas necesarias antes de que produzca todos y solo los
conjuntos de elementos frecuentes es una pequeña constante.
El algoritmo de Toivonen comienza seleccionando una pequeña muestra del conjunto de
datos de entrada y encontrando a partir de ella los conjuntos de elementos frecuentes
candidatos. El proceso es exactamente el de la Sección 6.4.1, excepto que es esencial que el
umbral se establezca en algo menor que su valor proporcional. Es decir, si el umbral de soporte
para todo el conjunto de datos es s, y el tamaño de la muestra es una fracción pag, luego,
cuando busque conjuntos de elementos frecuentes en la muestra, utilice un umbral como 0,9 PD
o 0,8 PD. Cuanto menor sea el umbral, más memoria principal necesitaremos para calcular todos
los conjuntos de elementos que son frecuentes en la muestra, pero es más probable que
evitemos la situación en la que el algoritmo no proporciona una respuesta.
Habiendo construido la colección de conjuntos de elementos frecuentes para la muestra, a
continuación construimos el borde negativo. Esta es la colección de conjuntos de elementos que no son
frecuentes en la muestra, pero todos sus subconjuntos inmediatos ( subconjuntos construidos
eliminando exactamente un elemento) son frecuentes en la muestra.

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

{ B, D} eso no es frecuente. Por tanto, el borde negativo consta de cinco conjuntos:


{ E}, {A, B}, {A, C}, {A, D} y { B, D}. ✷

Para completar el algoritmo de Toivonen, pasamos por todo el conjunto de datos,


contando todos los conjuntos de elementos que son frecuentes en la muestra o están en
el borde negativo. Hay dos posibles resultados.

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.

2. Algún miembro de la frontera negativa es frecuente en el conjunto. Entonces no podemos


estar seguros de que no haya algunos conjuntos aún más grandes, ni en el borde
negativo ni en la colección de conjuntos de elementos frecuentes para la muestra, que
también sean frecuentes en el conjunto. Por lo tanto, no podemos dar ninguna respuesta
en este momento y debemos repetir el algoritmo con una nueva muestra aleatoria.

6.4.6 Por qué funciona el algoritmo de Toivonen


Claramente El algoritmo de Toivonen nunca produce un falso positivo, ya que solo refrecuencia los
puertos como conjuntos de elementos que se han contado y se ha encontrado que son frecuentes.
en el conjunto. Para argumentar que nunca produce un falso negativo, debemos demostrar que
cuando ningún miembro del borde negativo es frecuente en el todo, entonces no puede haber
ningún conjunto de elementos que sea:

1. Frecuente en general, pero

2. Ni en el borde negativo ni en la recopilación de conjuntos de elementos frecuentes para la


muestra.

Supongamos lo contrario. Es decir, hay un conjunto S que es frecuente en el conjunto,


pero no en el borde negativo y poco frecuente en la muestra. Además, esta ronda del
algoritmo de Toivonen produjo una respuesta, que ciertamente no incluiría S entre los
conjuntos de elementos frecuentes. Por monotonicidad, todos los subconjuntos de S
también son frecuentes en el conjunto. Dejar T ser un subconjunto de S que es del tamaño más
pequeño posible entre todos los subconjuntos de S que no son frecuentes en la muestra.
Afirmamos que T debe estar en el borde negativo. Seguramente T cumple una de las
condiciones para estar en el borde negativo: no es frecuente en la muestra. También
cumple la otra condición por estar en el borde negativo: cada uno de sus subconjuntos
inmediatos es frecuente en la muestra. Porque si algún subconjunto inmediato de
T no fueran frecuentes en la muestra, entonces habría un subconjunto de S que es mas
pequeño que T y no frecuentes en la muestra, lo que contradice nuestra selección de T
como un subconjunto de S eso no era frecuente en la muestra, pero tan pequeño como cualquier conjunto de este tipo.

Ahora vemos eso T está en el borde negativo y es frecuente en todo el conjunto de


datos. En consecuencia, esta ronda del algoritmo de Toivonen no produjo una respuesta.
244 CAPÍTULO 6. CONJUNTOS FRECUENTES

6.4.7 Ejercicios para la sección 6.4


Ejercicio 6.4.1: Suponga que hay ocho elementos, A, B,. . . , H, y los siguientes son los
conjuntos de elementos frecuentes máximos: { A, B}, {B, C}, {A, C}, {A, D}, {E}, y
{ F}. Encuentra el borde negativo.

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.

(a) ¿Cuáles son los conjuntos de elementos frecuentes en la muestra?

(b) ¿Qué es el borde negativo?

(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.

6.5 Contar elementos frecuentes en una secuencia


Suponga que en lugar de un archivo de cestas tenemos un flujo de cestas, de las que queremos extraer
los conjuntos de elementos frecuentes. Recuerde del Capítulo 4 que la diferencia entre una secuencia y
un archivo de datos es que los elementos de la secuencia solo están disponibles cuando llegan y, por lo
general, la tasa de llegada es tan grande que no podemos almacenar la secuencia completa de una
manera que permita una consulta sencilla. Además, es común que las transmisiones evolucionen con el
tiempo, por lo que los conjuntos de elementos que son frecuentes en la transmisión de hoy pueden no
serlo mañana.
Una distinción clara entre secuencias y archivos, cuando se consideran conjuntos de
elementos frecuentes, es que no hay final para una secuencia, por lo que eventualmente un
conjunto de elementos excederá el umbral de soporte, siempre que aparezca repetidamente en
la secuencia. Como resultado, para las transmisiones, debemos pensar en el umbral de soporte s
como una fracción de las cestas en las que debe aparecer un conjunto de elementos para que se
considere frecuente. Incluso con este ajuste, todavía tenemos varias opciones con respecto a la
porción de la corriente sobre la que se mide esa fracción.
En esta sección, discutiremos varias formas en las que podemos extraer conjuntos de
elementos frecuentes de una secuencia. Primero, consideramos formas de utilizar las técnicas de
muestreo de la sección anterior. Luego, consideramos el modelo de ventana decreciente de la
Sección 4.7 y ampliamos el método descrito en la Sección 4.7.3 para encontrar elementos
“populares”.
6.5. CONTAR ELEMENTOS FRECUENTES EN UNA SECUENCIA 245

6.5.1 Métodos de muestreo para arroyos


En lo que sigue, asumiremos que los elementos de flujo son cestas de artículos. Quizás el enfoque más
simple para mantener una estimación actual de los conjuntos de elementos frecuentes en un flujo es
recolectar una cierta cantidad de cestas y almacenarlas como un archivo. Ejecute uno de los algoritmos
de conjuntos de elementos frecuentes que se analizan en este capítulo, mientras tanto, ignore los
elementos de flujo que llegan o almacénelos como otro archivo para analizarlos más adelante. Cuando
finaliza el algoritmo de conjuntos de elementos frecuentes, tenemos una estimación de los conjuntos
de elementos frecuentes en la secuencia. Entonces tenemos varias opciones.

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) Utilice el archivo que se recopiló mientras se ejecutaba la primera iteración


del algoritmo. Al mismo tiempo, recopile otro archivo para usar en otra
iteración del algoritmo, cuando esta iteración actual termine.

(b) Empiece a recopilar otro archivo de cestas ahora y ejecute el algoritmo


cuando se haya recopilado un número adecuado de cestas.

2. Podemos continuar contando el número de ocurrencias de cada uno de estos conjuntos de


elementos frecuentes, junto con el número total de cestas vistas en la secuencia, desde que
comenzó el conteo. Si se descubre que algún conjunto de elementos se encuentra en una
fracción de las canastas que está significativamente por debajo de la fracción de umbral
s, entonces este conjunto puede eliminarse de la colección de conjuntos de elementos
frecuentes. Al calcular la fracción, es importante incluir las ocurrencias del archivo original
de cestas, del cual se derivaron los conjuntos de elementos frecuentes. De lo contrario,
corremos el riesgo de encontrarnos con un breve período en el que un conjunto de
elementos verdaderamente frecuente no aparece con la suficiente frecuencia y lo
desechamos. También deberíamos permitir alguna forma de agregar nuevos conjuntos
de elementos frecuentes a la colección actual. Las posibilidades incluyen:

(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.

(b) Agregue algunos conjuntos de elementos aleatorios a la colección actual y cuente su


fracción de ocurrencias por un tiempo, hasta que tenga una buena idea de si son
frecuentes o no. En lugar de elegir nuevos conjuntos de elementos completamente
al azar, uno podría centrarse en conjuntos con elementos que aparecen en muchos
conjuntos de elementos que ya se sabe que son frecuentes. Por ejemplo, una
buena opción es seleccionar nuevos conjuntos de elementos del borde negativo
(Sección 6.4.5) del conjunto actual de conjuntos de elementos frecuentes.
246 CAPÍTULO 6. CONJUNTOS FRECUENTES

6.5.2 Conjuntos de elementos frecuentes en ventanas en descomposición

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.

La segunda modificación es más complicada. Queremos encontrar todos los conjuntos de


elementos frecuentes, no solo los conjuntos de elementos únicos. Si tuviéramos que inicializar un
recuento para un conjunto de elementos cada vez que lo viéramos, tendríamos demasiados recuentos.
Por ejemplo, una canasta de 20 artículos tiene más de un millón de subconjuntos, y todos estos
deberían iniciarse para una canasta. Por otro lado, como mencionamos, si usamos un requisito por
encima de 1 para iniciar la puntuación de un conjunto de elementos, nunca obtendríamos ningún
conjunto de elementos y el método no funcionaría.
Una forma de lidiar con este problema es comenzar a puntuar ciertos conjuntos de elementos tan
pronto como veamos una instancia, pero sea conservador acerca de los conjuntos de elementos que
comenzamos. Podemos tomar prestado del truco A-Priori y solo comenzar un conjunto de elementos I
si ya se están puntuando todos sus subconjuntos adecuados inmediatos. La consecuencia de esta
restricción es que si I es realmente frecuente, eventualmente comenzaremos a contarlo, pero nunca
comenzamos un conjunto de elementos a menos que sea al menos un candidato en el sentido usado en
el algoritmo A-Priori.

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

6.5.3 Métodos híbridos


El enfoque de la Sección 6.5.2 ofrece ciertas ventajas. Requiere una cantidad limitada de trabajo
cada vez que llega un elemento de flujo y siempre proporciona una imagen actualizada de lo que
es frecuente en la ventana en decadencia. Su gran desventaja es que nos obliga a mantener
puntuaciones para cada conjunto de elementos con una puntuación de al menos 1/2. Podemos
limitar el número de conjuntos de elementos que se puntúan aumentando el valor del parámetro
C. Pero el mas grande C es decir, más pequeña es la ventana de descomposición. Por lo tanto,
podríamos vernos obligados a aceptar información que sigue demasiado de cerca las
fluctuaciones locales de frecuencia, en lugar de integrarse durante un período prolongado.

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).

Ejemplo 6.13: Suponer c = 10 - 6 y la puntuación mínima que deseamos aceptar en la


ventana decreciente es 10. Supongamos también que tomamos una muestra de 10 8
cestas del arroyo. Luego, al analizar esa muestra, usamos un umbral de soporte de 10
8 × 10 - 6 × 10 = 1000.

Considere un conjunto de elementos I que tiene soporte 2000 en la muestra. Luego, la


puntuación inicial que usamos para I es 2000 / (10 8 × 10 - 6) = 20. Después de este paso de
iniciación, cada vez que una canasta llega a las novedades, la puntuación actual se multiplicará
por 1. - c = 0.999999. Si I es un subconjunto de la canasta actual, luego agregue 1 a la
puntuación. Si la puntuación de I va por debajo de 10, entonces se considera que ya no es
frecuente, por lo que se elimina de la colección de conjuntos de elementos frecuentes. ✷

Lamentablemente, no tenemos una forma razonable de iniciar la puntuación de nuevos conjuntos


de elementos. Si no tenemos puntaje para el conjunto de elementos I, y 10 es el puntaje mínimo que
queremos mantener, no hay forma de que una sola canasta pueda aumentar su puntaje de 0 a más de
1. La mejor estrategia para agregar nuevos conjuntos es ejecutar un nuevo cálculo de conjuntos de
elementos frecuentes en una muestra de la secuencia, y agregue a la colección de conjuntos de
elementos que se puntúan cualquiera que cumpla con el umbral para esa muestra pero que no se
hayan puntuado previamente.

6.5.4 Ejercicios para la sección 6.5


!! Ejercicio 6.5.1: Suponga que contamos conjuntos de elementos frecuentes en una ventana en decadencia.
dow con una constante de decaimiento C. Supongamos también que con probabilidad pag, un dado
248 CAPÍTULO 6. CONJUNTOS FRECUENTES

elemento de flujo (cesta) contiene ambos elementos I y j. Además, con probabilidad


pag la canasta contiene I pero no j, y con probabilidad pag contiene j
pero no I. Como una función de C y pag, cuál es la fracción de tiempo que
puntuaremos el par { yo, j}?

6.6 Resumen del Capítulo 6


✦ Datos de la cesta de mercado: Este modelo de datos asume que hay dos tipos de
entidades: articulos y cestas. Existe una relación de muchos, muchos entre artículos y cestas. Por lo
general, las cestas están relacionadas con pequeños conjuntos de artículos, mientras que los artículos
pueden estar relacionados con muchas cestas.

✦ Conjuntos de elementos frecuentes: El soporte para un conjunto de elementos es el número de cestas.


que contiene todos esos elementos. Los conjuntos de elementos con soporte que es al menos un
umbral se denominan conjuntos de elementos frecuentes.

✦ Reglas de asociación: Estas son implicaciones de que si una canasta contiene un


cierto conjunto de elementos I, entonces es probable que contenga otro elemento en particular
j así como. La probabilidad de que j también está en una canasta que contiene
I se llama la confianza de la regla. El interés de la regla es la cantidad en la que
la confianza se desvía de la fracción de todas las cestas que contienen j.

✦ 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.

✦ El algoritmo PCY: Este algoritmo mejora A-Priori al crear


una tabla hash en la primera pasada, usando todo el espacio de la memoria principal que no es
necesario para contar los elementos. A los pares de elementos se les aplica hash, y los depósitos de la
tabla hash se utilizan como recuentos de números enteros del número de veces que un par se ha
aplicado mediante hash a ese depósito. Luego, en la segunda pasada, solo tenemos que contar pares
de elementos frecuentes que se han codificado en un cubo frecuente (uno cuyo recuento es al menos el
umbral de soporte) en la primera pasada.

✦ El algoritmo multietapa: Podemos insertar pases adicionales entre el


primera y segunda pasada del algoritmo PCY para hacer pares hash con otras tablas hash
independientes. En cada pase intermedio, solo tenemos que codificar pares de elementos
frecuentes que se han codificado en cubos frecuentes en todos los pases anteriores.

✦ El algoritmo Multihash: Podemos modificar la primera pasada del algoritmo PCY.


rithm para dividir la memoria principal disponible en varias tablas hash. En la segunda
pasada, solo tenemos que contar un par de elementos frecuentes si se han codificado en
depósitos frecuentes en todas las tablas hash.

✦ Algoritmos aleatorios: En lugar de pasar por todos los datos,


podemos elegir una muestra aleatoria de las cestas, lo suficientemente pequeña como para que
sea posible almacenar tanto la muestra como los recuentos necesarios de conjuntos de
elementos en la memoria principal. El umbral de apoyo debe reducirse proporcionalmente.
Entonces podemos encontrar los conjuntos de elementos frecuentes para la muestra y esperar
que sea una buena representación de los datos en su conjunto. Si bien este método utiliza como
máximo una pasada a través de todo el conjunto de datos, está sujeto a falsos positivos
(conjuntos de elementos que son frecuentes en la muestra pero no en la totalidad) y falsos
negativos (conjuntos de elementos que son frecuentes en el conjunto pero no en la muestra).

✦ El algoritmo SON: Una mejora en el algoritmo aleatorio simple


rithm consiste en dividir todo el archivo de cestas en segmentos lo suficientemente pequeños como para que

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.

6.7 Referencias del Capítulo 6


El modelo de datos de la cesta de la compra, incluidas las reglas de asociación y el
algoritmo A-Priori, son de [1] y [2].
El algoritmo PCY es de [4]. Los algoritmos multietapa y multhash se encuentran
en [3].
El algoritmo SON es de [5]. El algoritmo de Toivonen aparece en [6].

1. R. Agrawal, T. Imielinski y A. Swami, "Asociaciones mineras entre conjuntos de


elementos en bases de datos masivas", Proc. Internacional ACM SIGMOD Conf.
sobre Gestión de Datos, págs. 207–216, 1993.

2. R. Agrawal y R. Srikant, "Algoritmos rápidos para reglas de asociación minera",


Intl. Conf. en bases de datos muy grandes, págs. 487–499, 1994.

3. M. Fang, N. Shivakumar, H. García-Molina, R. Motwani y JD Ullman, "Computing


iceberg queries e ffi ciently", Intl. Conf. en bases de datos muy grandes, págs.
299-310, 1998.

4. JS Park, M.-S. Chen y PS Yu, “Un algoritmo eficaz basado en hash


para las reglas de la asociación minera " Proc. Internacional ACM SIGMOD Conf. en el hombre
gestión de datos, págs. 175-186, 1995.

5. A. Savasere, E. Omiecinski y SB Navathe, "Un algoritmo eficiente para las reglas de


asociación minera en grandes bases de datos", Intl. Conf. en bases de datos muy
grandes, págs. 432–444, 1995.
6.7. REFERENCIAS DEL CAPÍTULO 6 251

6. H. Toivonen, "Sampling large database for association rules", Intl. Conf.


en bases de datos muy grandes, págs. 134-145, 1996.

También podría gustarte