-
Algoritmo
- AlgoritmoApriori.png
-
Generación de Candidatos
- GeneracionCandidatosApriori.png
-
MS-Apriori
- AlgoritmoMSApriori.png
-
MIS (Minumun Item Supports)
- Cada item tendrá un valor de soporte independiente
- El minimo soporte para las reglas será el menor MIS de todos los items
-
Por ejemplo, sea el conjunto de articulos de un supermercado Pan, Ropa, Electrodomesticos y otros.
MIS(Pan)=2%, MIS(Ropa)=0.2%, MIS(Electrodomesticos)=0.1%, todos los demas tendran un MIS de 50%.
- Ropa -> Pan [sup 0.15% conf 70%] no satisface el minimo soporte.
- Ropa -> Electrodomesticos [sup 0.15% conf 70%] si satisface el minimo soporte.
-
Pero, al tener diferentes soportes pierdo la propiedad Downward closure.
- Sea el conjunto 1,2,3,4
- MIS(1) = 10% MIS(2) = 20% MIS(3) = 5% MIS(4) = 6%.
- Si tengo {1,2} con soporte 9% debería eliminarlo???
-
Restricción de diferencia de soportes
- Usada para que items muy frecuentes e items muy raros aparezcan en el mismo itemset
- Reduce considerablemente el número de itemsets generados.
- No afecta la propiedad Downward closure.
- La operación clave es ordenar los items en I ascendentemente según sus valores de MIS (linea 1).
-
En linea 2 init-pass realiza dos operaciones
- Recorre el conjunto T contando el soporte de cada item en M
- Inserta el primer elemento de M en L, luego recorre M he inserta solo aquellos que superan el MIS del primer elemento.
- En la linea 3 se escogen solo los items que superan su propio MIS
-
Retomando el ejemplo anterior y asumiendo que el conjunto de datos sea de 100 transacciones tenemos...
- {3}.count = 6, {4}.count = 3, {1}.count = 9 and {2}.count = 25.
-
Entonces, L = {3, 1, 2}, y F1 = {{3}, {2}}.
- {4} no esta en L porque 4.count/n < MIS(3) (= 5%)
- {1} no esta en F1 porque 1.count / n < MIS(1) (= 10%).
-
Para cada subsecuente paso (lineas 4 a 18) se realizan 4 operaciones
-
Se usa el conjunto de itemsets frecuentes para generar los candidatos (lineas 5 a 8)
- Para el caso especial de los candidatos tipo 2 se usa la funcion
level2-candidate-gen()
- Para el resto de casos se usa la función
MScandidate-gen()
- Se escanea los datos y se cuenta su soporte (linea 12)
- Se cuenta el soporte del candidato sin su primer elemento
Esto para efectos de la generación posterior de reglas (linea 14).
- Los candidatos que superan el MIS para su primer elemento pasan a ser los nuevos itemsets frecuentes (linea 17)
- Ejemplo completo:
Dadas las siguientes transacciones,
Carne, Pan
Pan, Ropa
Pan, Ropa, Leche
Queso, Botas
Carne, Pan, Queso, Zapatos
Carne, Pan, Queso, Leche
Pan, Leche, Ropa
y MIS(Leche) = 50%, MIS(Pan) = 70%, y 25% para todos los demas.
-
MS-Apriori level2-candidate-gen
- level2-candidate-genMSApriori.png
- Combino de manera muy similar que en Apriori
- sup(l)=l.count/n MIS(l)= es dado por el usuario
-
MS-Apriori candidate-gen
- MScandidate-genMSApriori.png
- El paso de join es identico que en Apriori
- La poda solo se aplica a los subconjuntos que contienen el primer elemento o donde el MIS del primer elemento es igual al del segundo (linea 9)
- Sea F3 = {{1, 2, 3}, {1, 2, 5}, {1, 3, 4},
{1, 3, 5}, {1, 4, 5}, {1, 4,6}, {2, 3, 5}}