Dobývání znalostí z databází

Copyright © leden 2002   Martin Přikryl

Obsah

  1. Získávání znalostí z dat "Onko"
    1. Popis dat
    2. Hledání pravidel (algoritmus Apriori - Weka)
    3. Hledání pravidel (KEX)
    4. Klasifikace (algoritmus J48 - Weka)
  2. Získávání znalostí z dat "ONew"
    1. Popis dat
    2. Hledání pravidel (algoritmus Apriori - Weka)
    3. Klasifikace (algoritmus J48 - Weka)
    4. Porovnání algoritmů (systém Clementine)
    5. Neuronová síť
    6. Rozhodovací strom
    7. GRI (Generalised Rule Induction)
    8. Porovnání výsledků (Clementine)

Získávání znalostí z dat "Onko"

Popis dat

Zpracovávána jsou onkologická data z Bratislavy obsažená v souboru onko.asc. Soubor onko.hd obsahuje názvy jednotlivých atributů a jejich hodnoty. Data obsahují 109 záznamů s devíti atributy a dvěma třídami. Všechny atributy mají 3 hodnoty: a, b, c. Významy těchto hodnot jsou popsány v souboru onko.hd.

Třída (klasifikace)ČetnostRelativní četnost
Minus (-)9587.2%
Plus (+)1413.8%
AtributČetnosti hodnot (a, b, c)
tpsa37, 29, 43
cath-d64, 32, 13
camp34, 21, 54
er48, 25, 36
ps256, 28, 25
stadium43, 59, 7
gr17, 62, 30
prep.tk63, 25, 21
počet uzlin47, 45, 17

Hledání pravidel (algoritmus Apriori - Weka)

Nejdříve jsem asociačním algoritmem Apriori v systému Weka vyhledal potenciálně zajímavá pravidla. Parametry algoritmu byly nastaveny takto:

Minimální podpora:
10 %
Minimální spolehlivost:
90 %

Po 13 cyklech algoritmus nalezl následujících 10 nejlepších pravidel.

  1. pocet-uzlin=a 47 ==> klasifikace=-                 47    conf:(1)
  2. pocet-uzlin=b 45 ==> stadium=b                     45    conf:(1)
  3. pocet-uzlin=b klasifikace=- 44 ==> stadium=b       44    conf:(1)
  4. stadium=a 43 ==> pocet-uzlin=a klasifikace=-       43    conf:(1)
  5. stadium=a pocet-uzlin=a 43 ==> klasifikace=-       43    conf:(1)
  6. stadium=a klasifikace=- 43 ==> pocet-uzlin=a       43    conf:(1)
  7. stadium=a 43 ==> klasifikace=-                     43    conf:(1)
  8. stadium=a 43 ==> pocet-uzlin=a                     43    conf:(1)
  9. pocet-uzlin=b 45 ==> stadium=b klasifikace=-       44    conf:(0.98)
 10. stadium=b pocet-uzlin=b 45 ==> klasifikace=-       44    conf:(0.98)

Nejzajímavější se zdají pravidla 1, 2 a 7.

Hledání pravidel (KEX)

Pravidla jsem hledal také pomocí systému LISp-Miner KEX. V něm je možné rozdělit atributy na sukcedent (atribut "klasifikace") a antecedenty (všechny ostatní atributy). Pro výběr trénovacích dat jsem použil 10-ti násobnou křížovou validaci. Další parametry úlohy jsem nastavil takto:

Minimální podpora:
5 %
Minimální spolehlivost:
85 %
Chi-square test se spolehlivostí:
5 %

Algoritmus vygeneroval 32 hypotéz (včetně defaultního pravidla a ke každé hypotéze i hypotézu opačnou).

Výsledky křížové validace
Správně zařazeno:
104 (95 %)
Špatně zařazeno:
5 (5 %)
Přesnost podle tříd
Třída "plus (+)":
76 %
Třída "mínus (-)":
99 %
Matice záměn
Předpověď/skutečnost"plus (+)""mínus (-)"
Třída "plus (+)"134
Třída "mínus (-)"191
Seznam hypotéz
 1   (Default rule)                             ==> Klasifikace(-)      0.8716
 2   (Default rule)                             ==> Klasifikace(+)      0.1284
 3   Pocetuzlin(a)                              ==> Klasifikace(-)      0.9320
 4   Pocetuzlin(a)                              ==> Klasifikace(+)      0.0680
 5   Pocetuzlin(b)                              ==> Klasifikace(-)      0.8664
 6   Pocetuzlin(b)                              ==> Klasifikace(+)      0.1336
 7   Stadium(a)                                 ==> Klasifikace(-)      0.9261
 8   Stadium(a)                                 ==> Klasifikace(+)      0.0739
 9   Er(a) & Pocetuzlin(c)                      ==> Klasifikace(-)      0.0206
 10  Er(a) & Pocetuzlin(c)                      ==> Klasifikace(+)      0.9794
 11  Er(c) & Pocetuzlin(b) & Ps2(b)             ==> Klasifikace(-)      0.1373
 12  Er(c) & Pocetuzlin(b) & Ps2(b)             ==> Klasifikace(+)      0.8627
 13  Gr(b) & Pocetuzlin(b) & Preptk(b)          ==> Klasifikace(-)      0.1373
 14  Gr(b) & Pocetuzlin(b) & Preptk(b)          ==> Klasifikace(+)      0.8627
 15  Stadium(c)                                 ==> Klasifikace(-)      0.0112
 16  Stadium(c)                                 ==> Klasifikace(+)      0.9888
 17  Camp(a) & Pocetuzlin(c)                    ==> Klasifikace(-)      0.0240
 18  Camp(a) & Pocetuzlin(c)                    ==> Klasifikace(+)      0.9760
 21  Pocetuzlin(c) & Preptk(a)                  ==> Klasifikace(-)      0.0112
 22  Pocetuzlin(c) & Preptk(a)                  ==> Klasifikace(+)      0.9888
 19  Pocetuzlin(c) & Tpsa(c)                    ==> Klasifikace(-)      0.0112
 20  Pocetuzlin(c) & Tpsa(c)                    ==> Klasifikace(+)      0.9888
 23  Camp(c) & Cathd(b) & Pocetuzlin(b)         ==> Klasifikace(-)      0.1200
 24  Camp(c) & Cathd(b) & Pocetuzlin(b)         ==> Klasifikace(+)      0.8800
 27  Camp(c) & Pocetuzlin(b) & Ps2(b)           ==> Klasifikace(-)      0.1200
 28  Camp(c) & Pocetuzlin(b) & Ps2(b)           ==> Klasifikace(+)      0.8800
 25  Cathd(b) & Gr(b) & Pocetuzlin(b)           ==> Klasifikace(-)      0.1200
 26  Cathd(b) & Gr(b) & Pocetuzlin(b)           ==> Klasifikace(+)      0.8800
 29  Camp(c) & Er(c) & Gr(b) & Pocetuzlin(b)    ==> Klasifikace(-)      0.1200
 30  Camp(c) & Er(c) & Gr(b) & Pocetuzlin(b)    ==> Klasifikace(+)      0.8800
 31  Pocetuzlin(c) & Ps2(b)                     ==> Klasifikace(-)      0.0161
 32  Pocetuzlin(c) & Ps2(b)                     ==> Klasifikace(+)      0.9839

Na první pohled je zřetelné, že hypotéza 4 resp. 5 a 7 odpovídá pravidlu 1 resp. 9 a 7 vygenerovanému algoritmem Apriori systému Weka.

Klasifikace (algoritmus J48 - Weka)

Pro klasifikaci dat jsem použil algoritmus J48 systému Weka. Tento algoritmus generuje rozhodovací strom. Pro výběr trénovacích dat jsem opět použil 10-ti násobnou křížovou validaci. Parametry algoritmu byly nastaveny následovně:

Use laplace:
false
Save instance data:
false
Reduced error pruning:
false
Confidence factor:
0.5
Sub tree raising:
true
Binary splits:
false
Min num obj:
2
Unpruned:
false
Num folds:
3

Vytvořený strom má 10 uzlů, z toho 7 listů.

  pocet-uzlin = a: - (47.0)
  pocet-uzlin = b: - (45.0/1.0)
  pocet-uzlin = c
  |   prep-tk = a: + (7.0)
  |   prep-tk = b: + (2.0)
  |   prep-tk = c
  |   |   stadium = a: - (0.0)
  |   |   stadium = b: - (4.0)
  |   |   stadium = c: + (4.0)
Výsledky křížová validace
Správně zařazeno:
107 (98.2 %)
Špatně zařazeno:
2 (1.8 %)
Přesnost podle tříd
Třída "plus (+)":
97,9%
Třída "mínus (-)":
100,0%
Matice záměn
Předpověd/skutečnost"plus (+)""mínus (-)"
Třída "plus (+)"1295
Třída "mínus (-)"095

Získávání znalostí z dat "ONew"

Popis dat

Soubor onew.asc obsahuje 220 záznamů s devíti atributy a třemi třídami. Všechny atributy mají 3 hodnoty: a, b, c. Významy těchto hodnot jsou popsány v souboru onew.hd. Na rozdíl od dat "onko" se zde vyskytují i nevyplněné hodnoty vyznačené znakem otazník (?).

Třída (klasifikace)ČetnostRelativní četnost
A2712,2 %
B10648,2 %
C5926,8 %
?2812,8 %
AtributČetnosti hodnot (a, b, c, ?)
rocnik37, 54, 128, 1
tpsa63, 69, 83, 5
cath-d136, 54, 25, 5
tk99, 53, 59, 9
er99, 52, 68, 1
ps2127, 49, 39, 5
camp76, 56, 80, 8
st99, 102, 7, 12
sto39, 57, 5, 119

Hledání pravidel (algoritmus Apriori - Weka)

Nejdříve jsem asociačním algoritmem Apriori v systému Weka vyhledal potenciálně zajímavá pravidla. Parametry algoritmu byly nastaveny takto:

Minimální podpora:
0.1
Minimální spolehlivost:
0.9

Po 16 cyklech algoritmus nalezl následujících 10 nejlepších pravidel.

  1. sto=b 57 ==> st=b              57    conf:(1)
  2. er=c 68 ==> rocnik=c           56    conf:(0.82)
  3. tpsa=c cathd=a 60 ==> ps2=a    45    conf:(0.75)
  4. tpsa=c ps2=a 60 ==> cathd=a    45    conf:(0.75)
  5. ps2=a st=a 66 ==> cathd=a      49    conf:(0.74)
  6. rocnik=c st=a 62 ==> cathd=a   45    conf:(0.73)
  7. tpsa=c 83 ==> ps2=a            60    conf:(0.72)
  8. tpsa=c 83 ==> cathd=a          60    conf:(0.72)
  9. cathd=a er=a 64 ==> ps2=a      46    conf:(0.72)
 10. camp=a 76 ==> cathd=a          54    conf:(0.71)

Žádné z nalezených pravidel se nevztahuje k atributu rozlišujícím třídu.

Klasifikace (algoritmus J48 - Weka)

Pro klasifikaci dat jsem použil algoritmus J48 systému Weka. Tento algoritmus generuje rozhodovací strom. Pro výběr trénovacích dat jsem použil 10-ti násobnou křížovou validaci. Parametry algoritmu byly nastaveny následovně:

Use laplace:
false
Save instance data:
false
Reduced error pruning:
false
Confidence factor:
0.1
Sub tree raising:
true
Binary splits:
false
Min num obj:
2
Unpruned:
false
Num folds:
3

Vytvořený strom má 19 uzlů, z toho 13 listů.

  rocnik = a
  |   camp = a
  |   |   cathd = a
  |   |   |   tk = a: a (3.0)
  |   |   |   tk = b: c (3.0/1.0)
  |   |   |   tk = c: a (0.0)
  |   |   cathd = b: b (4.0/2.0)
  |   |   cathd = c: a (2.0/1.0)
  |   camp = b: b (7.0/1.0)
  |   camp = c
  |   |   st = a: c (6.5/2.5)
  |   |   st = b: b (6.5/1.0)
  |   |   st = c: b (0.0)
  rocnik = b
  |   ps2 = a: c (26.0/10.0)
  |   ps2 = b: b (6.0/2.0)
  |   ps2 = c: b (11.0/2.0)
  rocnik = c: b (117.0/49.0)
Výsledky křížové validace
Správně zařazeno:
99 (51,6 %)
Špatně zařazeno:
93 (48,4 %)
Přesnost podle tříd
Třída "a":
20,0 %
Třída "b":
57,7 %
Třída "c":
40,0 %
Matice záměn
Předpověď/skutečnost"a""b""c"
Třída "a"2205
Třída "b"57922
Třída "c"33818

Porovnání algoritmů (systém Clementine)

V systému Clementine jsem na data použil tři vybrané modely: neuronová síť (Neural Network), C5.0 (rozhodovací strom), GRI (Generalised Rule Induction). Následují výstupy všech tří algoritmů a v závěru je porovnána jejich úspěšnost (přesnost).

Neuronová síť

Počty neuronů v síti
Vstupní vrstva:
36
Skrytá vrstva:
9
Výstupní vrstva:
4

Předpokládaná přesnost natrénované neuronové sítě je 50,5 %.

Relativní význam atributů
ps2sttkcath-dcamperrocniktpsasto
5,2%4,4%4,4%3,9%3,8%3,2%2,8%2,8%1,9%
Matice záměn
Předpověď/skutečnost?"a""b""c"
Třída "b"282710659

Rozhodovací strom

Vytvořený rozhodovací strom:

  sto c -> a
  sto a
        rocnik ? -> b
        rocnik c -> b
        rocnik a
        rocnik b
  sto b
        tpsa ? -> b
        tpsa a -> b
        tpsa b-> b
        tpsa c
  sto ?
        camp ? -> ?
        camp b
        camp a
        camp c
Matice záměn
Předpověď/skutečnost?"a""b""c"
Neznámá hodnota20211
Třída "a"01853
Třída "b"679618
Třída "c"20437

GRI (Generalised Rule Induction)

Vygenerovaná pravidla

  Rules for a:
        Rule #1 for a:
                if ps2 == b and camp == a and sto == ? then -> a
        Rule #2 for a:
                if ps2 == b and camp == a and st == a then -> a
        Rule #3 for a:
                if tk == a and ps2 == b and sto == ? then -> a
        Rule #4 for a:
                if cath-d == a and ps2 == b and sto == ? then -> a
  Rules for b:
        Rule #1 for b:
                if er == b and camp == b and st == a then -> b
        Rule #2 for b:
                if cath-d == a and ps2 == b and sto == b then -> b
        Rule #3 for c:
                if cath-d == a and ps2 == b and sto == b then -> b
  Rules for c:
        Rule #1 for c:
                if rocnik == b and ps2 == a and sto == a then -> c
        Rule #2 for c:
                if tpsa == c and cath-d == b and sto == b then -> c
Matice záměn
Předpověď/skutečnost?"a""b""c"
Neznámá hodnota10206
Třída "a"0600
Třída "b"02221
Třída "c"02113

Porovnání výsledků (Clementine)

AlgoritmusSprávně (abs., rel.)Špatně (abs., rel.)
Neuronová síť10648,2 %11451,2 %
Rozhodovací strom17177,7 %4922,3 %
GRI (Generalised Rule Induction)5123,2 %16976,8 %

Pro daná data má největší úspěšnost rozhodovací strom C5.0.