Reguły asocjacyjne, algorytm ,,Apriori
Transkrypt
Reguły asocjacyjne, algorytm ,,Apriori
Reguły asocjacyjne, algorytm „Apriori” (przykład dla zbioru „Sodowrażliwość”) Przemysław Kl˛esk [email protected] Zakład Sztucznej Inteligencji Wydział Informatyki, ZUT Reguły asocjacyjne Zastosowania Analiza koszykowa (hipermarkety, sklepy internetowe): pieluszki → piwo i chipsy rozstawianie towarów w sklepie, projektowanie układu katalogów, strategie cenowe na łaczenia ˛ produktów. Bioinformatyka: asocjacje genotyp → fenotyp, cz˛este sekwencje/wzorce w DNA (DNA frequent motifs), reguły wiazania ˛ białek-DNA (protein-DNA binding). Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 2 / 28 Algorytm „Apriori” (Agrawal, 1993) Elementy i poj˛ecia Atrybuty binarne {a1 , a2 , . . . , an } (np. artykuły lub kategorie artykułów w sklepie, genotypy, fenotypy). Zbiór danych D = {di }, np.: d1 : a2 , a3 , a5 , a9 , a12 d2 : a1 , a7 d3 : a3 , a5 , a6 .. . Zbiór przedmiotów (ang. itemset) — dowolny podzbiór zbioru atrybutów. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 3 / 28 Algorytm „Apriori” (Agrawal, 1993) Elementy i poj˛ecia Wsparcie zbioru (ang. support of itemset): liczba rekordów zawierajacych ˛ A liczba wszystkich rekordów #{di ∈ D : A ⊂ di } = #D ≈ P(A). supp(A) = (1) Zaufanie reguły (ang. confidence of rule): liczba rekordów zawierajacych ˛ A∪B liczba rekordów zawierajacych ˛ A #{di ∈ D : (A ∪ B) ⊂ di } = #{di ∈ D : A ⊂ di } ≈ P(B|A). conf(A → B) = Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” (2) 4 / 28 Algorytm „Apriori” (Agrawal, 1993) Elementy i poj˛ecia Zbiór cz˛esty (ang. frequent itemset) — dla zadanej liczby minSupp > 0, mówimy, że A jest zbiorem cz˛estym, wtedy i tylko wtedy, gdy supp(A) > minSupp. Monotoniczność miary wsparcia 1 Każdy podzbiór zbioru cz˛estego jest cz˛esty. 2 Każdy nadzbiór zbioru niecz˛estego jest niecz˛esty. (!) Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 5 / 28 Algorytm „Apriori” (Agrawal, 1993) Dwie główne cz˛eści 1 Znajdowanie zbiorów cz˛estych (dla D i zadanego minSupp) 2 Generowanie reguł asocjacyjnych (na zbiorach cz˛estych dla zadanego minConf ) Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 6 / 28 Znajdowanie zbiorów cz˛estych — cz˛eść 1 Fk — rodzina zbiorów cz˛estych k-elementowych. Ck — rodzina kandydatów na zbiory cz˛este k-elementowe. Algorytm 1 Zlicz wsparcia w D dla zbiorów 1-elementowych: {a1 }, . . . , {an }. 2 Zapami˛etaj w F1 te zbiory 1-elementowe, które spełniaja˛ minSupp. 3 k := 1. 4 Dopóki #Fk > k + 1 powtarzaj: (łaczenie) ˛ 1 Utwórz zbiór kandydatów Ck+1 := Fk × Fk . esty 2 Usuń z Ck+1 tych kandydatów, którzy zawieraja˛ w sobie niecz˛ podzbiór o rozmiarze k (usuwanie poprzez monotoniczność) (koszt rz˛edu #D · #Ck+1 ) 3 Zlicz wsparcia w D kandydatom. 4 Usuń z Ck+1 tych kandydatów, którzy zawieraja˛ nie spełniaja˛ minSupp. (usuwanie na podstawie wsparć) 5 Fk+1 := Ck+1 . 6 k := k + 1. 5 Jeżeli #Fk = 0 to k := k − 1. 6 Zwróć wszystkie zbiory cz˛este: k [ Fi . i=1 Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 7 / 28 Krata zbiorów w algorytmie „Apriori” Dla n atrybutów liczba wszystkich możliwych zbiorów: 2n . Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 8 / 28 Krata — pomijanie niecz˛estych nadzbiorów Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 9 / 28 Generowanie reguł — cz˛eść 2 Algorytm 1 Dla każdego k > 2: 1 (dla których Fk jest określone) Dla każdego f ∈ Fk : 1 Dla każdego g ⊂ f , gdzie g , ∅ i g , f : (podzbiory niepuste i różne od całego f ) Zbuduj reguł˛e g → f \ g, i jeżeli jej zaufanie conf(g → f \ g) = supp(g ∪ f \ g) supp(f ) = > minConf , supp(g) supp(g) (3) (wykorzystujemy wsparcia zliczone w cz˛eści pierwszej) to zapami˛etaj reguł˛e. 2 Zwróć zapami˛etane reguły. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 10 / 28 Monotoniczność miary zaufania Obserwacja Jeżeli conf(A → B, C) > minConf , to także: conf(A, B → C) > minConf , conf(A, C → B) > minConf . (4) (5) Sprawdzenie: supp(A ∪ B ∪ C) supp(A) supp(A ∪ B ∪ C) 6 = conf(A, B → C). supp(A ∪ B) conf(A → B, C) = Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” (6) (7) 11 / 28 Przykład do „r˛ecznego” policzenia Dane: d1 : 1, 2 d2 : 1, 3, 5 d3 : 4 d4 : 1, 2, 4, 5 d5 : 2 d6 : 2, 3 d7 : 3, 4 d8 : 1, 2, 3, 5 d9 : 1, 4, 5 d10 : 1, 3, 4 Znaleźć wszystkie reguły asocjacyjne dla minSupp = 6 . minConf = 10 Przemysław Kl˛esk, ZSI, [email protected] 2 10 Reguły asocjacyjne, algorytm „Apriori” i 12 / 28 Sodowrażliwość Istnieja˛ osoby, które po spożyciu sodu (m.in. sól kuchenna, benzoesan sodu) doświadczaja˛ skoków ciśnienia t˛etniczego. Pojawia si˛e to także u osób, które nie choruja˛ nominalnie na nadciśnienie. Pomorska Akademia Medyczna (obecnie: PUM) zebrała zbiór danych na grupie 106 osób (bez i z sodowrażliwościa). ˛ Eksperyment trwał 3 tygodnie: tydzień na diecie bezsolnej, tydzień na diecie solnej, tydzień na diecie mieszanej. Zbiór danych zawiera: 106 przykładów i 24 atrybuty (wśród atrybutów wejściowych jest 19 genetycznych i 4 inne). (!) Własność: Zakład Biochemii Klinicznej i Molekularnej, Pomorski Uniwersytet Medyczny w Szczecinie (prof. A. Ciechanowicz). Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 13 / 28 Sodowrażliwość — atrybuty 1 płeć — {F, M}, 2 wiek — {< 39.5, > 39.5}, 3 BMI — Body Mass Index {< 23.45, > 23.45}, 4 NT — nadciśnienie t˛etnicze {0, 1}, 5 dSS — wskaźnik sodowrażliwości (atrybut decyzyjny) {< 8, > 8}, 6 PROK — {?, AA, AB, AH, AI, AK, AQ, AR, BB, BH, BI, BK, HI, HK, HQ, IK}, 7 GSL — {?, CC, CT, TT}, 8 BE16 — {AA, AG, GG}, 9 BE27 — {CC, GC, GG}, 10 BE1 — {?, CC, CG, GG}, 11 G3NB — {CC, CT, TT}, 12 ACE — {DD, ID, II}, 13 HPA — {WM, WW}, 14 SYAL — {CC, TC, TT}, 15 ESC — {CC, CG, GG}, 16 ADD — {GG, GT, TT}, 17 AT1R — {AA, AC, CC}, 18 ATG — {AA, AG, GG}, 19 KAL1 — {CC, GC, GG}, 20 KAL3 — {GA, GG}, 21 KAL4 — {AA, AG, GG}, 22 KAL5 — {AA, AC, CC}, 23 eNOS — {GG, GT, TT}. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 14 / 28 „Sodowrażliwość” — binaryzacja atrybutów płeć ∈ {F, M} → GSL ∈ {?, CC, CT, TT} . . . → . . . dwa atrybuty binarne: (płeć = F) ∈ {0, 1}, (płeć = M) ∈ {0, 1} cztery atrybuty binarne: (GSL = ?) ∈ {0, 1}, (GSL = CC) ∈ {0, 1}, (GSL = CT) ∈ {0, 1}, (GSL = TT) ∈ {0, 1} . . . Ostatecznie razem powstało 80 atrybutów binarnych. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 15 / 28 Przebieg indukcji dla minSupp = 30/106 >> tic; [F, supports] = findFrequentItemSets(transactions, 30 / 106); toc; --------------------------------------------------------------------------------------------------------induction at step: (k = 1) -> (k + 1 = 2) candidates generated, #C_2 = 3160 counting supports for candidates... candidates with insufficient support eliminated, F_2 := C_2, #F_2 = 273 --------------------------------------------------------------------------------------------------------induction at step: (k = 2) -> (k + 1 = 3) candidates generated, #C_3 = 3012 candidates with non-frequent subsets eliminated, #C_3 = 1261 counting supports for candidates... candidates with insufficient support eliminated, F_3 := C_3, #F_3 = 470 --------------------------------------------------------------------------------------------------------induction at step: (k = 3) -> (k + 1 = 4) candidates generated, #C_4 = 3664 candidates with non-frequent subsets eliminated, #C_4 = 430 counting supports for candidates... candidates with insufficient support eliminated, F_4 := C_4, #F_4 = 253 --------------------------------------------------------------------------------------------------------induction at step: (k = 4) -> (k + 1 = 5) candidates generated, #C_5 = 1300 candidates with non-frequent subsets eliminated, #C_5 = 59 counting supports for candidates... candidates with insufficient support eliminated, F_5 := C_5, #F_5 = 38 --------------------------------------------------------------------------------------------------------induction at step: (k = 5) -> (k + 1 = 6) candidates generated, #C_6 = 106 candidates with non-frequent subsets eliminated, #C_6 = 0 counting supports for candidates... candidates with insufficient support eliminated, F_6 := C_6, #F_6 = 0 Elapsed time is 100.964000 seconds. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 16 / 28 Reguły asocjacyjne dla minConf = 1 >> tic; [rulesPremises, rulesConsequences, rulesConfidences] = findRules(F, supports, 1.0, numbersToItemsMapper); toc; r1: IF KAL5=AA THEN KAL3=GG. supp(A)=44, supp(A,B)=44, conf(A->B)=1. r2: IF KAL4=AA THEN KAL3=GG. supp(A)=44, supp(A,B)=44, conf(A->B)=1. r3: IF SCA=WM THEN KAL3=GG. supp(A)=31, supp(A,B)=31, conf(A->B)=1. r4: IF SYAL=TC AND ADD=GG THEN KAL3=GG. supp(A)=43, supp(A,B)=43, conf(A->B)=1. r5: IF płeć=M AND G3NB=CT THEN HPA=WW. supp(A)=30, supp(A,B)=30, conf(A->B)=1. r6: IF płeć=M AND BMI=>=23.45 THEN HPA=WW. supp(A)=30, supp(A,B)=30, conf(A->B)=1. r7: IF ESC=CC AND KAL5=AC THEN KAL4=AG. supp(A)=33, supp(A,B)=33, conf(A->B)=1. r8: IF SYAL=TC AND ESC=CC THEN KAL3=GG. supp(A)=33, supp(A,B)=33, conf(A->B)=1. r9: IF KAL4=AA AND KAL5=AA THEN KAL3=GG. supp(A)=43, supp(A,B)=43, conf(A->B)=1. r10: IF ADD=GG AND KAL5=AA THEN KAL3=GG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. r11: IF ADD=GG AND KAL4=AA THEN KAL3=GG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. r12: IF płeć=M AND SYAL=TC THEN KAL3=GG. supp(A)=39, supp(A,B)=39, conf(A->B)=1. r13: IF ADD=GG AND KAL1=GC THEN KAL3=GG. supp(A)=33, supp(A,B)=33, conf(A->B)=1. r14: IF HPA=WW AND KAL5=AA THEN KAL3=GG. supp(A)=37, supp(A,B)=37, conf(A->B)=1. r15: IF G3NB=CT AND ADD=GG THEN KAL3=GG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. r16: IF SYAL=TC AND AT1R=AA THEN KAL3=GG. supp(A)=31, supp(A,B)=31, conf(A->B)=1. r17: IF G3NB=CC AND SYAL=TC THEN KAL3=GG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. r18: IF wiek=<39.5 AND KAL5=AA THEN KAL4=AA. supp(A)=34, supp(A,B)=34, conf(A->B)=1. r19: IF wiek=<39.5 AND KAL4=AA THEN KAL3=GG. supp(A)=35, supp(A,B)=35, conf(A->B)=1. r20: IF SYAL=TC AND ATG=AG THEN KAL3=GG. supp(A)=36, supp(A,B)=36, conf(A->B)=1. r21: IF dSS=>=8 AND SYAL=TC THEN KAL3=GG. supp(A)=33, supp(A,B)=33, conf(A->B)=1. r22: IF HPA=WW AND KAL5=AA THEN KAL4=AA. supp(A)=37, supp(A,B)=37, conf(A->B)=1. r23: IF płeć=M AND G3NB=CT THEN KAL3=GG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. r24: IF ATG=AG AND KAL5=AC THEN KAL4=AG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. r25: IF BE1=CC AND KAL5=AC THEN KAL4=AG. supp(A)=38, supp(A,B)=38, conf(A->B)=1. r26: IF BE1=CC AND KAL1=GC THEN KAL3=GG. supp(A)=32, supp(A,B)=32, conf(A->B)=1. r27: IF wiek=<39.5 AND KAL5=AA THEN KAL3=GG. supp(A)=34, supp(A,B)=34, conf(A->B)=1. r28: IF HPA=WW AND KAL4=AA THEN KAL3=GG. supp(A)=38, supp(A,B)=38, conf(A->B)=1. r29: IF HPA=WW AND KAL5=AA THEN KAL3=GG AND KAL4=AA. supp(A)=37, supp(A,B)=37, conf(A->B)=1. ... Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 17 / 28 Reguły asocjacyjne (c.d.) dla minConf = 1 r30: IF r31: IF r32: IF r33: IF r34: IF r35: IF r36: IF r37: IF r38: IF r39: IF r40: IF r41: IF r42: IF r43: IF r44: IF r45: IF r46: IF r47: IF r48: IF r49: IF r50: IF r51: IF r52: IF r53: IF r54: IF r55: IF r56: IF r57: IF r58: IF r59: IF Elapsed płeć=M AND G3NB=CT THEN HPA=WW AND KAL3=GG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. wiek=<39.5 AND KAL5=AA THEN KAL3=GG AND KAL4=AA. supp(A)=34, supp(A,B)=34, conf(A->B)=1. płeć=M AND HPA=WW AND SYAL=TC THEN KAL3=GG. supp(A)=36, supp(A,B)=36, conf(A->B)=1. BE1=CC AND ADD=GG AND KAL4=AG THEN KAL5=AC. supp(A)=31, supp(A,B)=31, conf(A->B)=1. BE1=CC AND ADD=GG AND KAL5=AC THEN KAL4=AG. supp(A)=31, supp(A,B)=31, conf(A->B)=1. wiek=<39.5 AND BE1=CC AND KAL5=AC THEN KAL4=AG. supp(A)=32, supp(A,B)=32, conf(A->B)=1. HPA=WW AND KAL3=GG AND KAL5=AA THEN KAL4=AA. supp(A)=37, supp(A,B)=37, conf(A->B)=1. HPA=WW AND KAL4=AA AND KAL5=AA THEN KAL3=GG. supp(A)=37, supp(A,B)=37, conf(A->B)=1. BE1=CC AND KAL3=GG AND KAL4=AG THEN KAL5=AC. supp(A)=37, supp(A,B)=37, conf(A->B)=1. BE1=CC AND KAL3=GG AND KAL5=AC THEN KAL4=AG. supp(A)=37, supp(A,B)=37, conf(A->B)=1. wiek=<39.5 AND SYAL=TC AND ADD=GG THEN KAL3=GG. supp(A)=35, supp(A,B)=35, conf(A->B)=1. płeć=M AND G3NB=CT AND HPA=WW THEN KAL3=GG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. płeć=M AND G3NB=CT AND KAL3=GG THEN HPA=WW. supp(A)=30, supp(A,B)=30, conf(A->B)=1. wiek=<39.5 AND KAL3=GG AND KAL5=AA THEN KAL4=AA. supp(A)=34, supp(A,B)=34, conf(A->B)=1. wiek=<39.5 AND KAL4=AA AND KAL5=AA THEN KAL3=GG. supp(A)=34, supp(A,B)=34, conf(A->B)=1. BE16=AG AND KAL3=GG AND KAL4=AG THEN KAL5=AC. supp(A)=30, supp(A,B)=30, conf(A->B)=1. płeć=M AND wiek=<39.5 AND SYAL=TC THEN KAL3=GG. supp(A)=33, supp(A,B)=33, conf(A->B)=1. HPA=WW AND SYAL=TC AND ATG=AG THEN KAL3=GG. supp(A)=33, supp(A,B)=33, conf(A->B)=1. BE1=CC AND HPA=WW AND KAL5=AC THEN KAL4=AG. supp(A)=35, supp(A,B)=35, conf(A->B)=1. HPA=WW AND ESC=CC AND KAL5=AC THEN KAL4=AG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. dSS=>=8 AND HPA=WW AND SYAL=TC THEN KAL3=GG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. HPA=WW AND SYAL=TC AND ADD=GG THEN KAL3=GG. supp(A)=37, supp(A,B)=37, conf(A->B)=1. ESC=CC AND KAL3=GG AND KAL5=AC THEN KAL4=AG. supp(A)=31, supp(A,B)=31, conf(A->B)=1. wiek=<39.5 AND BE1=CC AND KAL3=GG AND KAL4=AG THEN KAL5=AC. supp(A)=31, supp(A,B)=31, conf(A->B)=1 wiek=<39.5 AND BE1=CC AND KAL3=GG AND KAL5=AC THEN KAL4=AG. supp(A)=31, supp(A,B)=31, conf(A->B)=1 płeć=M AND wiek=<39.5 AND HPA=WW AND SYAL=TC THEN KAL3=GG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. BE1=CC AND HPA=WW AND KAL3=GG AND KAL4=AG THEN KAL5=AC. supp(A)=34, supp(A,B)=34, conf(A->B)=1. BE1=CC AND HPA=WW AND KAL3=GG AND KAL5=AC THEN KAL4=AG. supp(A)=34, supp(A,B)=34, conf(A->B)=1. BE1=CC AND ADD=GG AND KAL3=GG AND KAL4=AG THEN KAL5=AC. supp(A)=30, supp(A,B)=30, conf(A->B)=1. BE1=CC AND ADD=GG AND KAL3=GG AND KAL5=AC THEN KAL4=AG. supp(A)=30, supp(A,B)=30, conf(A->B)=1. time is 3.542000 seconds. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 18 / 28 Wybrane reguły dla minConf > 0.9 Dla minConf = 0.95 otrzymano reguł 333. Dla minConf = 0.9 otrzymano reguł 902. Reguły trywialne: r2: IF BMI=<23.45 THEN wiek=<39.5. conf(A->B)=0.9322. r12: IF NT=0 THEN wiek=<39.5. conf(A->B)=0.94737. Reguły „skutek → przyczyna” (?): r56: IF płeć=M THEN HPA=WW AND KAL3=GG. conf(A->B)=0.92537. % złożona konkluzja (rzadkie) r66: IF płeć=M AND NT=1 THEN HPA=WW. conf(A->B)=0.95745. r101: IF dSS=>=8 AND BE16=AG THEN KAL3=GG. conf(A->B)=0.96774. r115: IF wiek=<39.5 AND dSS=>=8 THEN HPA=WW. conf(A->B)=0.91111. r195: IF dSS=>=8 AND ESC=CC THEN HPA=WW. conf(A->B)=0.94595. r210: IF NT=1 AND dSS=>=8 THEN KAL3=GG. conf(A->B)=0.93182. r232: IF dSS=<8 AND BE1=CC THEN KAL3=GG. conf(A->B)=0.94444. r295: IF dSS=>=8 AND ADD=GG THEN KAL3=GG. conf(A->B)=0.95745. r392: IF dSS=>=8 AND KAL1=GG THEN KAL3=GG. conf(A->B)=0.94444. r449: IF NT=0 AND HPA=WW THEN wiek=<39.5 AND KAL3=GG. conf(A->B)=0.91176. r724: IF dSS=<8 AND BE1=CC AND HPA=WW THEN KAL3=GG. conf(A->B)=0.9375. Reguły „korelacje mi˛edzygenowe lub mi˛edzygenotypowe”: r57: IF KAL4=AA THEN KAL3=GG AND KAL5=AA. conf(A->B)=0.97727. r112: IF SCA=WW AND ESC=CC THEN HPA=WW. conf(A->B)=0.90244. r826: IF BE1=CC AND ADD=GG AND KAL5=AC THEN KAL3=GG AND KAL4=AG. conf(A->B)=0.96774. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 19 / 28 Wybrane reguły dla minConf > 0.7 Otrzymano wszystkich reguł 2464. Reguły dla sodowrażliwości (posortowane wg conf ): r19: IF BMI=>=23.45 THEN dSS=>=8. conf(A->B)=0.70213. r736: IF płeć=M AND ADD=GG THEN dSS=>=8. conf(A->B)=0.70213. r486: IF płeć=M AND ESC=CC THEN dSS=>=8. conf(A->B)=0.7381. r564: IF płeć=M AND NT=1 THEN dSS=>=8. conf(A->B)=0.76596. r1769: IF płeć=M AND HPA=WW AND ESC=CC THEN dSS=>=8. conf(A->B)=0.76923. r2343: IF płeć=M AND NT=1 AND HPA=WW AND KAL3=GG THEN dSS=>=8. conf(A->B)=0.76744. r1920: IF płeć=M AND NT=1 AND HPA=WW THEN dSS=>=8. conf(A->B)=0.77778. Reguły dla nadciśnienia (posortowane wg conf ): r132: IF płeć=M THEN NT=1. conf(A->B)=0.70149. r63: IF KAL1=GG THEN NT=1. conf(A->B)=0.7069. r130: IF G3NB=CT THEN NT=1. conf(A->B)=0.73913. r6: IF eNOS=GT THEN NT=1. conf(A->B)=0.7561. r299: IF BE1=CC AND ESC=CC THEN NT=1. conf(A->B)=0.78049. r75: IF BMI=>=23.45 THEN NT=1. conf(A->B)=0.78723. r359: IF BMI=>=23.45 AND ADD=GG THEN NT=1. conf(A->B)=0.81081. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 20 / 28 Przebieg indukcji dla minSupp = 50/106 >> tic; [F, supports] = findFrequentItemSets(transactions, 50 / 106); toc; --------------------------------------------------------------------------------------------------------induction at step: (k = 1) -> (k + 1 = 2) candidates generated, #C_2 = 3160 counting supports for candidates... candidates with insufficient support eliminated, F_2 := C_2, #F_2 = 44 --------------------------------------------------------------------------------------------------------induction at step: (k = 2) -> (k + 1 = 3) candidates generated, #C_3 = 314 candidates with non-frequent subsets eliminated, #C_3 = 35 counting supports for candidates... candidates with insufficient support eliminated, F_3 := C_3, #F_3 = 22 --------------------------------------------------------------------------------------------------------induction at step: (k = 3) -> (k + 1 = 4) candidates generated, #C_4 = 82 candidates with non-frequent subsets eliminated, #C_4 = 3 counting supports for candidates... candidates with insufficient support eliminated, F_4 := C_4, #F_4 = 2 Elapsed time is 37.986000 seconds. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 21 / 28 Reguły asocjacyjne dla minConf = 0.95 Brak reguł dla minConf = 1.0. r1: IF BE1=CC THEN KAL3=GG. supp(A)=69, supp(A,B)=66, conf(A->B)=0.95652. r2: IF AT1R=AA THEN KAL3=GG. supp(A)=57, supp(A,B)=55, conf(A->B)=0.96491. r3: IF ADD=GG THEN KAL3=GG. supp(A)=77, supp(A,B)=74, conf(A->B)=0.96104. r4: IF SYAL=TC THEN KAL3=GG. supp(A)=60, supp(A,B)=59, conf(A->B)=0.98333. r5: IF ESC=CC THEN KAL3=GG. supp(A)=61, supp(A,B)=58, conf(A->B)=0.95082. r6: IF płeć=M THEN KAL3=GG. supp(A)=67, supp(A,B)=65, conf(A->B)=0.97015. r7: IF wiek=<39.5 THEN KAL3=GG. supp(A)=85, supp(A,B)=81, conf(A->B)=0.95294. r8: IF płeć=M THEN HPA=WW. supp(A)=67, supp(A,B)=64, conf(A->B)=0.95522. r9: IF BE1=CC AND ADD=GG THEN KAL3=GG. supp(A)=54, supp(A,B)=52, conf(A->B)=0.96296. r10: IF HPA=WW AND ADD=GG THEN KAL3=GG. supp(A)=68, supp(A,B)=65, conf(A->B)=0.95588. r11: IF płeć=M AND wiek=<39.5 THEN KAL3=GG. supp(A)=58, supp(A,B)=56, conf(A->B)=0.96552. r12: IF płeć=M AND HPA=WW THEN KAL3=GG. supp(A)=64, supp(A,B)=62, conf(A->B)=0.96875. r13: IF płeć=M AND KAL3=GG THEN HPA=WW. supp(A)=65, supp(A,B)=62, conf(A->B)=0.95385. r14: IF wiek=<39.5 AND ADD=GG THEN KAL3=GG. supp(A)=59, supp(A,B)=57, conf(A->B)=0.9661. r15: IF BE1=CC AND HPA=WW THEN KAL3=GG. supp(A)=62, supp(A,B)=59, conf(A->B)=0.95161. r16: IF HPA=WW AND SYAL=TC THEN KAL3=GG. supp(A)=53, supp(A,B)=52, conf(A->B)=0.98113. r17: IF NT=1 AND ADD=GG THEN KAL3=GG. supp(A)=52, supp(A,B)=50, conf(A->B)=0.96154. r18: IF płeć=M AND wiek=<39.5 AND HPA=WW THEN KAL3=GG. supp(A)=55, supp(A,B)=53, conf(A->B)=0.96364. Wśród powyższych reguł, brak reguł dotyczacych ˛ atrybutu dSS (fenotypu sodowrażliwości). Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 22 / 28 Implementacja w MATLABie — wskazówki Przydatne funkcje union — suma zbiorów (podanych jako wektory), intersect — przeci˛ecie zbiorów (cz˛eść wspólna), setdiff — różnica zbiorów, ismember — dla podanych dwóch wektorów (lub macierzy) zwraca wektor (lub macierz) wyników {0, 1} wskazujacych, ˛ czy dany element pierwszego wektora (macierzy) jest elementem drugiego wektora (macierzy). nchoosek — (nazwa ma kojarzyć si˛e z nk ) dla podanego wektora v i liczby k zwraca wszystkie k-elementowe kombinacje (czyli podzbiory) wektora v; wynik zwracany jest jako macierz, gdzie kolejne kombinacje pisane sa˛ wierszami, wyniki union, intersect, setdiff sa˛ posortowane leksykograficznie. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 23 / 28 Implementacja w MATLABie — wskazówki Mapy haszujace ˛ W MATLABie można korzystać ze struktur danych j˛ezyka Java. Do szybkich sprawdzeń „czy pewien podzbiór jest cz˛esty?” warto wykorzystać klas˛e java.util.HashMap — struktura przechowujaca ˛ pary (klucz, wartość), dajaca ˛ szybkość kosztem pami˛eci. Wszystkie istotne operacje sa˛ o stałej złożoności O(1). Zbiory cz˛este można przechować np. jako wektor komórkowy map haszujacych ˛ na zasadzie: F{k}=java.util.HashMap; Podstawowe metody: put(key, value) — dodanie pary do mapy, get(key) — pobranie wartości spod klucza, containsKey(key) — flaga logiczna „czy klucz figuruje w mapie?”, remove(key) — usuni˛ecie wpisu (pary) spod klucza, keySet().toArray() — zwraca zbiór kluczy jako tablic˛e (umożliwia przeiterowanie si˛e po niej w MATLABowe p˛etli for). valueSet().toArray() — zwraca zbiór wartości jako tablic˛e (możliwe iterowanie po niej w MATLABowe p˛etli for). Dokumentacja (Java 6, 7): http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 24 / 28 Implementacja w MATLABie — wskazówki Mapy haszujace ˛ c.d. „Pod spodem” znajduje si˛e tablica o pewnym ustalonym rozmiarze poczatkowym. ˛ Każde włożenie, np. H.put(’toJestPewienKlucz’, 7), realizowane jest poprzez wyznaczenie indeksu w tablicy, pod który ma trafić podana para, poprzez obliczenie funkcji haszujacej ˛ na kluczu. Przykład funkcji haszujacej ˛ dla napisu s: s0 32n−1 + s1 31n−2 + · · · + sn−2 311 + sn−1 mod rozmiar tablicy. (8) Operacja pobrania, np. H.get(’toJestPewienKlucz’), lub sprawdzenia czy klucz istnieje, H.containsKey(’toJestPewienKlucz’), także sprowadza si˛e do wyznaczenia indeksu poprzez funkcj˛e haszujac ˛ a˛ — wstrzelenie si˛e od razu we właściwe miejsce. Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 25 / 28 Implementacja w MATLABie — wskazówki Mapy haszujace ˛ c.d. Dwukrotne włożenie z użyciem tego samego klucza, powoduje nadpisanie starej pary poprzez nowa.˛ W razie konfliktów — gdy dwa różne klucze daja˛ t˛e sama˛ wartość funkcji haszujacej ˛ — elementy tablicy zaczynaja˛ przechowywać krótkie listy wpisanych par (nie ma w tym przypadku nadpisania). Gdy zacznie być „za g˛esto” — dużo krótkich list — mapa haszujaca ˛ dynamicznie rozszerza si˛e (np. podwaja swój rozmiar). Wymaga to alokacji nowej tablicy i przepisania starych wpisów (rehashing). A zatem wi˛ekszość pojedynczych operacji put ma koszt O(1), ale co jakiś czas pewna operacja b˛edzie o koszcie O(n), gdzie n to aktualny rozmiary mapy. Można pokazać, że zamortyzowany koszt przypadajacy ˛ średnio na każdy element ma nadal złożoność stała˛ O(1). Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 26 / 28 Mapy haszujace, ˛ zamortyzowany koszt put Niech poczatkowy ˛ rozmiar wynosi 1, a współczynnik rozszerzania si˛e mapy wynosi 2. Niech liczba elementów, które chcemy włożyć b˛edzie przedstawialna jako n = 2m . Przykład chronologii dopisywania (d) i przepisywania (p) wkładanych elementów: d | p, d | p, p, d, d | p, p, p, p, d, d, d, d | · · · |{z} |{z} | {z } | {z } m=0 m=1 m=2 m=3 Koszt włożenia n elementów: f (n) = 1 + m−1 X 2k + m−1 X 2k = 1 + k=0 k=0 |{z} dopisania m−1 X 2k+1 = 1 + k=0 2 − 2m+1 = 2m+1 − 1. 1−2 (9) |{z} przepisania Zamortyzowany (średni) koszt włożenia elementu: f (2m ) f (n) 2m+1 − 1 1 = m = = 2 − m 6 2, n 2 2m 2 (10) a zatem O(f (n)/n) = O(1). Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 27 / 28 Kombinatoryka Problem Dla n atrybutów, ile jest wszystkich możliwych reguł asocjacyjnych? Przemysław Kl˛esk, ZSI, [email protected] Reguły asocjacyjne, algorytm „Apriori” 28 / 28