2010-12-03 30 views
9

J'ai donc ce tableau:Opération d'exploration de données à l'aide de SQL Query (algorithme Fuzzy Apriori) - Comment puis-je coder avec 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 

Et 2 Tableau blanc:

Table ITEMSET 

"ITEM_SET" "Support" 



Table Confidence 

"ANTECEDENT" "CONSEQUENT" 

Je dois trouver la valeur FUZZY pour chaque élément qui se produisent dans chaque transaction:

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  

Pour EX: j'utilise un minimum de soutien de 10% -> 0.1
Je dois enlever I5, I6, I8 depuis sa valeur < 0.1 =>pruneau étape

puis stocker

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

2 COMBINAISON

REMARQUE: cela est la première étape de base après ce besoin le plus probable d'utiliser répéter ou récursive, puisque le processus continuera jusqu'à ce qu'aucune autre combinaison possible
alors de ce qui reste, je dois trouver K + 1 itemset (qui est 2 combinaison itemset) =>rejoindre étape

{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 

Ensuite, faites une autre Pruneau Étape enlever moins de 0,1 valeur qui est {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 COMBINAISON

Après cela Effectuer une autre REJOIGNEZ STEP combinant itemset qui passent la taille

{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 

Effectuer une autre étape Pruneau enlever moins de 0.Une valeur qui est {I1, I3, I4}

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

4 COMBINAISON

Moissonneuse jeu d'éléments qui passent à la taille K + 4 (4 combinaison)

{I1,I2,I3,I4} = 0 

** depuis aucune transaction contenant cet article

après l'arrêt du processus car il n'y a pas de po ssibles combinaison gauche


à cette base de données de point de itemset ont:

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 

comment puis-je le code qui en sql? merci beaucoup

* Note: vous pouvez ajouter une autre table au besoin

+1

Vous pouvez toujours corriger la mise en forme au lieu de vous en excuser. Je commencerais par remplacer ces ' ' avec des espaces réguliers, puis en mettant en évidence toute la table et en appuyant sur le bouton 'code'. Celui qui ressemble à deux rangées de binaire. – meagar

+0

bouton de code, thx je vais le réparer maintenant – Rico

+0

Là, il devrait être mieux, encore une fois THX – Rico

Répondre

2

Étape 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 

Notez la fonction ROUND() - il est important, parce que vous avez des valeurs comme 0,33333 que don somme pas d'une manière heureuse.

Étape 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: Je viens de remarquer que vous avez demandé cette moitié il y a un an, donc je suppose qu'il est inutile de continuer. Si vous avez toujours besoin de cette réponse, laissez un commentaire.

+0

Si vous avez commencé, vous devriez l'avoir fini parce qu'il y a d'autres qui peuvent en avoir besoin. –