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