Skip to content

Instantly share code, notes, and snippets.

@evertheylen
Created January 8, 2017 19:21
Show Gist options
  • Select an option

  • Save evertheylen/55e9da820a1f5bcfcd28b895a049ef4c to your computer and use it in GitHub Desktop.

Select an option

Save evertheylen/55e9da820a1f5bcfcd28b895a049ef4c to your computer and use it in GitHub Desktop.
# Stap 0: Wat voorbereiding
turn transaction DB {TID -> {item}} into items {item -> {TID}} (aka tidlists)
freq_itemsets = { {}: <alle TIDs> }
eclat({}, items)
# Het resultaat van het algoritme is freq_itemsets
def eclat(items, alpha):
while items not empty:
item, item_tidlist = items.pop()
beta = alpha + {item}
# Stap 1: Voeg nieuwe regel to aan freq_itemsets
# (heeft op zich niets te maken met stap 2)
new_tidlist = freq_itemsets[alpha] AND item_tidlist
if |new_tidlist| >= minsup:
freq_itemsets[beta] = new_tidlist
# Stap 2: Maak de nieuwe beta-conditional database
new_items = []
for new_item, item_tidlist2 in items:
new_item_tidlist = item_tidlist AND item_tidlist2
if |new_item_tidlist| >= minsup:
new_items[new_item] = new_item_tidlist
# Stap 3: Recursie!
eclat(new_items, beta)
# Deze manier van recursie gaat dan als volgt:
# Stel dat we de items A, B en C hebben (in die volgorde).
# Dan kunnen we een boom maken als volgt:
# --+-- A --+-- B ----- C
# | |
# | +-- C
# |
# +-- B ----- C
# |
# +-- C
# Het algoritme zijn 'alpha' varieert dan in deze volgorde (indentie is recursie):
# {}
# {A}
# {A B}
# {A B C}
# {A C}
# {B}
# {B C}
# {C}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment