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) | Četnost | Relativní četnost |
---|---|---|
Minus (-) | 95 | 87.2% |
Plus (+) | 14 | 13.8% |
Atribut | Četnosti hodnot (a, b, c) |
---|---|
tpsa | 37, 29, 43 |
cath-d | 64, 32, 13 |
camp | 34, 21, 54 |
er | 48, 25, 36 |
ps2 | 56, 28, 25 |
stadium | 43, 59, 7 |
gr | 17, 62, 30 |
prep.tk | 63, 25, 21 |
počet uzlin | 47, 45, 17 |
Nejdříve jsem asociačním algoritmem Apriori v systému Weka vyhledal potenciálně zajímavá pravidla. Parametry algoritmu byly nastaveny takto:
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.
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:
Algoritmus vygeneroval 32 hypotéz (včetně defaultního pravidla a ke každé hypotéze i hypotézu opačnou).
Předpověď/skutečnost | "plus (+)" | "mínus (-)" |
---|---|---|
Třída "plus (+)" | 13 | 4 |
Třída "mínus (-)" | 1 | 91 |
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.
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ě:
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)
Předpověd/skutečnost | "plus (+)" | "mínus (-)" |
---|---|---|
Třída "plus (+)" | 12 | 95 |
Třída "mínus (-)" | 0 | 95 |
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) | Četnost | Relativní četnost |
---|---|---|
A | 27 | 12,2 % |
B | 106 | 48,2 % |
C | 59 | 26,8 % |
? | 28 | 12,8 % |
Atribut | Četnosti hodnot (a, b, c, ?) |
---|---|
rocnik | 37, 54, 128, 1 |
tpsa | 63, 69, 83, 5 |
cath-d | 136, 54, 25, 5 |
tk | 99, 53, 59, 9 |
er | 99, 52, 68, 1 |
ps2 | 127, 49, 39, 5 |
camp | 76, 56, 80, 8 |
st | 99, 102, 7, 12 |
sto | 39, 57, 5, 119 |
Nejdříve jsem asociačním algoritmem Apriori v systému Weka vyhledal potenciálně zajímavá pravidla. Parametry algoritmu byly nastaveny takto:
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.
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ě:
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)
Předpověď/skutečnost | "a" | "b" | "c" |
---|---|---|---|
Třída "a" | 2 | 20 | 5 |
Třída "b" | 5 | 79 | 22 |
Třída "c" | 3 | 38 | 18 |
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).
Předpokládaná přesnost natrénované neuronové sítě je 50,5 %.
ps2 | st | tk | cath-d | camp | er | rocnik | tpsa | sto |
---|---|---|---|---|---|---|---|---|
5,2% | 4,4% | 4,4% | 3,9% | 3,8% | 3,2% | 2,8% | 2,8% | 1,9% |
Předpověď/skutečnost | ? | "a" | "b" | "c" |
---|---|---|---|---|
Třída "b" | 28 | 27 | 106 | 59 |
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
Předpověď/skutečnost | ? | "a" | "b" | "c" |
---|---|---|---|---|
Neznámá hodnota | 20 | 2 | 1 | 1 |
Třída "a" | 0 | 18 | 5 | 3 |
Třída "b" | 6 | 7 | 96 | 18 |
Třída "c" | 2 | 0 | 4 | 37 |
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
Předpověď/skutečnost | ? | "a" | "b" | "c" |
---|---|---|---|---|
Neznámá hodnota | 10 | 2 | 0 | 6 |
Třída "a" | 0 | 6 | 0 | 0 |
Třída "b" | 0 | 2 | 22 | 1 |
Třída "c" | 0 | 2 | 1 | 13 |
Algoritmus | Správně (abs., rel.) | Špatně (abs., rel.) | ||
---|---|---|---|---|
Neuronová síť | 106 | 48,2 % | 114 | 51,2 % |
Rozhodovací strom | 171 | 77,7 % | 49 | 22,3 % |
GRI (Generalised Rule Induction) | 51 | 23,2 % | 169 | 76,8 % |
Pro daná data má největší úspěšnost rozhodovací strom C5.0.