2010-12-03 17 views
9

así que tengo esta tabla:Operación de minería de datos usando SQL Query (Fuzzy Apriori Algorithm) - ¿Cómo lo codigo usando SQL?

Trans_ID Name Fuzzy_Value Total_Item 
100   I1 0.33333333  3 
100   I2 0.33333333  3 
100   I5 0.33333333  3 
200   I2 0.5    2 
200   I5 0.5    2 
300   I2 0.5    2 
300   I3 0.5    2 
400   I1 0.33333333  3 
400   I2 0.33333333  3 
400   I4 0.33333333  3 
500   I1 0.5    2 
500   I3 0.5    2 
600   I2 0.5    2 
600   I3 0.5    2 
700   I1 0.5    2 
700   I3 0.5    2 
800   I1 0.25    4 
800   I2 0.25    4 
800   I3 0.25    4 
800   I5 0.25    4 
900   I1 0.33333333  3 
900   I2 0.33333333  3 
900   I3 0.33333333  3 
1000   I1 0.2    5 
1000   I2 0.2    5 
1000   I4 0.2    5 
1000   I6 0.2    5 
1000   I8 0.2    5 

Y 2 tabla en blanco:

Table ITEMSET 

"ITEM_SET" "Support" 



Table Confidence 

"ANTECEDENT" "CONSEQUENT" 

Necesito encontrar valor difuso para cada elemento que se producen en cada transacción:

I1 = Sum of (Fuzzy_Value from item I1 in trans 100 until 1000 which is trans: 100,400,500,700,800,900,1000)/Total Trans 
-> (.33333333+0.33333333+0.5+0.5+0.25+0.33333333+0.2)/10 = 0.244999999 


I2 = Sum of (Fuzzy_Value from item I2 in trans 100 - 1000 which is trans:100,200,300,400,600,800,900,1000)/Total Trans 
-> (0.33333333+0.5+0.5+0.33333333+0.5+0.25+0.33333333)/10 = 0.274999999 


I3 -> 0.258333333 
I4 -> 0.103333333 
I5 -> 0.058333333  
I6 -> 0.02  
I8 -> 0.02  

Para EX: uso soporte mínimo 10% -> 0.1
necesito para eliminar I5, I6, I8, ya que es el valor < 0,1 =>paso ciruela

luego almacenar

I1=0.244999999, I2=0.274999999, I3=0.258333333,I4=0.103333333 on new table 'ITEMSET' 

2 COMBINACIÓN

NOTA: esto es el primer paso básico después de esto probablemente necesite repetir o recursivo, ya que el proceso continuará hasta que no haya otra combinación de elementos posible
continuación de lo que queda Necesito encontrar K + 1 conjunto de elementos (que es 2 combinación conjunto de elementos) =>paso Unir

{I1,I2} =Sum of (Fuzzy_Value from item I1 + I2 in trans 100 - 1000 which is trans:100,400,800,900,1000)/Total Trans 
->(0.666666667+0.666666667+0.5+0.666666667+0.4)/9 = 0.29 

*do the same for the rest* 
{I1,I3} =(1+1+0.5+0.666666667)/9 = 0.316666667 
{I1,I4} =(0.666666667+0.4)/9 = 0.106666667 
{I2,I3} =(1+1+0.5+0.666666667)/9 = 0.316666667 
{I2,I4} =(1+0.666666667+0.4)/9 =0.206666667 
{I3,I4} =0 

después haga otra ciruela Paso eliminación de menos de 0,1 valor que es {I3, I4}

Store {I1,I2} = 0.29, {I1,I3} = 0.316666667, {I1,I4} =0.106666667, {I2,I3} = 0.316666667, {I2,I4} = 0.206666667 AT "ITEMSET" TABLE 

3 COMBINACIÓN

Después de que hacer otra paso Unir la combinación de conjunto de elementos que pasan a la poda

{I1,I2,I3} = Sum of (Fuzzy_Value from item I1 + I2 +I3 in trans 100 - 1000 which is trans:800,900)/Total Trans 
-> 0.75+1 = 0.175 
**Same for the rest** 
{I1,I2,I4} = 1+0.6 = 0.16 
{I2,I3,I4} = 0 

hacer otra ciruela Paso la eliminación de menos de 0.1 valor que es {I1, I3, I4}

Store {I1,I2,I3} = 0.176 AND {I1,I2,I4} = 0,16 AT "ITEMSET" TABLE 

4 COMBINACIÓN

Combine conjunto de elementos que pasan a la poda de K + 4 (4 combinación)

{I1,I2,I3,I4} = 0 

** ya que no hay transacción que contenga este artículo

después de detener el proceso ya que no hay po combinación ssible izquierda


en esta base de datos de conjunto de elementos punto tienen:

ITEM_SET   Support 
{I1}    0.244999999 
{I2}    0.274999999  
{I3}    0.258333333  
{I4}    0.103333333 
{I1,I2}   0.29  
{I1,I3}   0.316666667 
{I1,I4}   0.106666667 
{I2,I3}   0.316666667 
{I2,I4}   0.206666667 
{I1,I2,I3}   0.176 
{I1,I2,I4}   0,16 

¿Cómo puedo código que en SQL? muchas gracias

* Nota: puede agregar otra tabla, según sea necesario

+1

Siempre se puede corregir el formato en lugar de disculparse por ello. Comenzaré reemplazando esos ' 's con espacios regulares, y luego resaltaré toda la tabla y presionaré el botón 'código'. El que se parece a dos filas de binario. – meagar

+0

botón de código, thx lo arreglaré ahora – Rico

+0

Allí debería ser mejor, THX otra vez – Rico

Respuesta

2

Paso 1:

CREATE TABLE ITEMSET 
SELECT Name, SUM(Fuzzy_Value)/COUNT(*) Fuzzy_Value 
FROM trans 
GROUP BY ID 
HAVING ROUND(SUM(Fuzzy_Value), 1) >= 0.1 

Nota la función ROUND() - es importante, porque tiene valores como 0,33333 que don 't suma de una manera feliz.

Paso 2:

ALTER TABLE ITEMSET ADD INDEX (Name) 

SELECT a.Name Name1, b.Name Name2, SUM(Fuzzy_Value)/COUNT(*) Fuzzy_Value 
FROM ITEMSET a JOIN ITEMSET b ON (a.Name != b.Name) 
GROUP BY a.Name, b.Name 
HAVING ROUND(SUM(Fuzzy_Value), 1) >= 0.1 

Opps: Acabo de notar que usted pidió este medio hace un año, así que supongo que no hay razón para continuar. Si aún necesita esta respuesta, deje un comentario.

+0

Si comenzó debería haberlo finlandés porque hay otros que pueden necesitarlo. –