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:
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 ? )
Dla zbioru treningowego mamy poprawność 98.382821 % (błąd 1.617179 %). Poszczególne reguły klasyfikują następujące ilości przypadków:
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