Working log: Applications of CI in medical diagnosis

Dates: 26.03.1997 - [KG] pierwsze streszczenie
            12.05.1997 - [KG] dopisane wyniki przesuwania granic dla hypothyroid
            21.05.1997 - [KG] dodatkowe wyniki przesuwania granic dla hypothyroid


Appendictis

Zaczynamy z jednym neuronem ukrytym. Powstają trzy reguly (kolejne literki oznaczają kolejne przedzialy wynikajace z dyskretyzacji na podstawie histogramow):
Mamy wówczas dokładność 91.509434 %, czyli błąd 8.490566 %. Poszczególne reguły klasyfikują     następujące ilości przypadków: Dodanie kolejnego neuronu pozwala douczyć trzech nowych przypadków, ale powstają 4 nowe reguly, (po automatycznym uproszczeniu zostają 3) z których tylko dwie są rzeczywiście potrzebne. Pierwsza klasyfikuje dwa przypadki, a druga jeden. W takiej sytuacji mamy dokładność 94.339623 % czyli błąd 5.660377 %

Przy próbie uczenia pozostałych wyjątków powstaje bardzo dużo reguł (otrzymalimy na przyklad 32 bardzo złożone reguły ratujące 4 wyjątki), ewentualnie można by doprowadzić do sytuacji, w której dostawiamy tyle neuronów
ukrytych ile jest wyjatków i każdy nauczy sie dokładnie jednego przykladu.

Literki pojawiające się w regułach oznaczają kolejne przedziały wynikające z dyskretyzacji dokonanej na podstawie analizy histogramów. Próby przesuwania granic doprowadziły do sytuacji, w której zamiast trzech pierwszych reguł mamy dwie, które dają ten sam współczynnik błędu:


Cancer

Breast cancer, 286 przypadków, 9 atrybutów, 2 klasy (UCI, to nie jest breast cancer Wisconsin!)
Nauczona sieć ma 1 neuron ukryty, z którego powstają trzy reguły: Takie rozwiązanie daje poprawność 77.62 % (błąd 22.38 %)

Douczanie kolejnych przykladów konczy sie tym, że dołozony neuron uczy się tylko jednego przykładu, więc dla każdego dodatkowego przykładu mielibyśmy nową regułę dokładnie do niego dopasowaną.

Reguły Weissa:

        Blad na 70% training %  Blad na test, random 30% of data

Neares Neighb.          0               34.7
Bayes                       24.1            28.2
MLP z BP                24.3            28.5
PVM rule                  22.6            22.9
CART                      22.6            22.9

Rule:  Involved_Nodes > 0 and deg_malig = 3
(Involved_Nodes > 0-2 ? )


Hypothyroid

Jeden neuron ukryty realizuje pierwszą klasę. Wychodzą z niego trzy reguły. O dziwo druga z nich klasyfikuje tylko jeden przykład i to błędnie, więc po jej wyrzuceniu mamy lepszą klasyfikację. Reguly:
Dwa neurony ukryte realizują klasę drugą, każdy z nich daje jedną regułę. Reguły: Znów podobnie jak w poprzednich przypadkach douczanie daje marne rezultaty bardzo dużo reguł albo uczenie pojedynczych przypadków.

Dla zbioru treningowego mamy poprawność 98.382821 % (błąd 1.617179 %). Poszczególne reguły klasyfikują następujące ilości przypadków:

Dla zbioru testowego mamy poprawność 97.957993 % (błąd 2.042007 %). Poszczególne reguły klasyfikują następujące ilości przypadków: Manipulowanie granicami, które pojawiają się w regułach pozwala na poprawę klasyfikacji. Analizowalimy po kolei wszystkie granice, przesuwając je i sprawdzając wartoci błędu. Po ustaleniu optymalnych wartości granicznych przedziałów zmieniła się dyskretyzacja danych (wyeliminowalimi kilka zbędnych podziałów) i ponownie nauczylimy sieć (nie pamiętam czy Rafał uczył od początku, czy douczał istniejącą sieć [KG]). Po ponownym wytrenowaniu sieci raz jeszcze przesuwalimy granice.UWAGA! Dla 100-procentowej pewności co do szczegółów muszę skonsultować je z Rafałem. [KG}

TSH >= 0.02 /\ FTI < 0.065
TSH in [0.0065, 0.02) /\ FTI < 0.065 /\ T3 in [0.008, 0.01)

0.0065 <= TSH < 0.015 /\ on_thyroxine = false
on_thyroxine = false /\ TSH > 0.16 /\ 0.065 <= FTI < 0.105

W pierwszym etapie zmieniły się następujące granice:
Dla cechy TSH
- granica 0.02 -> 0.015
- granica 0.0065 -> 0.0061
Dla cechy FTI
- granica 0.105 -> 0.18
Dla cechy T3
- granica 0.008 -> 0.000 (zbędny podział)

Po kolejnym nauczeniu sieci wyciągnęlimy reguły jeszcze raz otrzymując następujące:

Dla klasy pierwszej dwie reguły:
TSH >= 0.032 /\ FTI < 0.063
TSH in [0.0061, 0.032) /\ FTI < 0.063 /\  T3 < 0.02

Dla klasy drugiej reguła i wyjątek:
on_thyroxine=no /\ 0.063 <= FTI < 0.018 /\ TSH >= 0.0061
thyroid_surgery=yes /\  TSH in [0.0061, 0.015)

Kolejne przesuwanie granic dało dalsze zmiany:

Dla cechy TSH (F17)
- granica 0.032 -> 0.025
Dla cechy T3 (F18)
- granica 0.01 -> 0.00 (zbędny podział, ale i tak tylko w regule, która nic nie klasyfikuje)

Teraz reguły wyglądają następująco:

Dla klasy pierwszej dwie reguły:
TSH >= 0.025 /\ FTI < 0.063
TSH in [0.0061, 0.025) /\ FTI < 0.063 /\  T3 < 0.02

Dla klasy drugiej reguła i wyjątek:
on_thyroxine=no /\ FTI in [0.063, 0.018) /\ TSH >= 0.0061
thyroid_surgery=yes /\ TSH in [0.0061, 0.015)

Pozwalają klasyfikować poprawnie 99.52% przykładów treningowych i 98.98% przykładów testowych.

Poprawiony kod prologowy pozwala na dokładniejsze manipulowanie granicami. Okazuje się, że z reguł, które mamy można wyciągnąć jeszcze więcej. Przesuwając dla cechy TSH granicę 0.015 do 0.029 (w związku z tym granicę 0.025 też zmieniamy na 0.029) oraz dla cechy FTI granicę 0.063 do 0.0644 dostajemy 12 błędów na zbiorze treningowym (99.68% poprawności). Na zbiorze testowym mamy dokładność 99.07%.
Okazuje się też, że drugą przesłankę wyjątku dla klasy drugiej można bezkarnie usunąć (bez zmiany wyników klasyfikacji). Wyjątek ma więc tylko jedną przesłankę. Można go więc zastąpić doklejeniem jego zaprzeczenia do reguły dla klasy drugiej.
Dostajemy więc:

Dla klasy pierwszej dwie reguły:
TSH >= 0.029 /\ FTI < 0.063
TSH in [0.0061, 0.029) /\ FTI < 0.063 /\  T3 < 0.02

Dla klasy drugiej jedna reguła:
on_thyroxine=no /\ FTI in [0.063, 0.018) /\ TSH >= 0.0061 /\ thyroid_surgery=no