Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_rbs_ml [2008/06/16 12:30] miw |
pl:miw:miw08_rbs_ml [2019/06/27 15:50] (aktualna) |
====== Opis ====== | ====== Opis ====== |
| __**Projekt zakończony**__ |
| |
Krzysztof Morcinek, <krzysztof.morcinek@gmail.com> | Krzysztof Morcinek, <krzysztof.morcinek@gmail.com> |
| |
| |
[[:pl:miw:miw08_rbs_ml:historia | Historia spotkań ]] | [[:pl:miw:miw08_rbs_ml:historia | Historia spotkań ]] |
| |
| |
| |
| |
| |
| |
| |
* Używane pliki: | * Używane pliki: |
* [[ pl:miw:miw08_rbs_ml:attrchangecollection | attrchangecollection.java]] | * [[ pl:miw:miw08_rbs_ml:attrchangecollection | attrchangecollection.java]] |
* [[ pl:miw:miw08_rbs_ml:attributchange | attributchange .java]] | * [[ pl:miw:miw08_rbs_ml:attributchange | attributchange.java]] |
* [[ pl:miw:miw08_rbs_ml:days | days.java]] | * [[ pl:miw:miw08_rbs_ml:days | days.java]] |
* [[ pl:miw:miw08_rbs_ml:decisiontree | decisiontree.java]] | * [[ pl:miw:miw08_rbs_ml:decisiontree | decisiontree.java]] |
* [[ pl:miw:miw08_rbs_ml:thermostat | thermostat.java]] | * [[ pl:miw:miw08_rbs_ml:thermostat | thermostat.java]] |
* [[ pl:miw:miw08_rbs_ml:writefile | writefile.java]] | * [[ pl:miw:miw08_rbs_ml:writefile | writefile.java]] |
| |
* [[http://student.agh.edu.pl/~morcinek/AGH/MIW|Aktualna implementacja w języku C#]] | |
| |
* ID3 opis mojej implementacji: | * ID3 opis mojej implementacji: |
* Do zbioru uczącego będziemy się odwoływać poprzez indeksy, do funkcji BuildTree() przekażemy listę indeksów opisujących przykłady na podstawie których będzie generowany węzeł. Funkcja BuildTree() pobiera jeszcze zbiór niewykorzystanych testów oraz etykietę większościową dla danego drzewa, a zwraca liść lub węzeł. | * Do zbioru uczącego będziemy się odwoływać poprzez indeksy, do funkcji buildTree() przekażemy listę indeksów opisujących przykłady na podstawie których będzie generowany węzeł. Funkcja buildTree() pobiera jeszcze zbiór niewykorzystanych testów oraz etykietę większościową dla danego drzewa, a zwraca liść lub węzeł. |
* Sprawdzamy Kryterium Stopu - wtedy zwracany jest liść z przypisaną mu etykietą, kryteria: | * Sprawdzamy Kryterium Stopu - wtedy zwracany jest liść z przypisaną mu etykietą, kryteria: |
* Brak przykładów | * Brak przykładów |
* Tworzymy węzeł i przypisujemy do niego wybrany test i kategorię większościową | * Tworzymy węzeł i przypisujemy do niego wybrany test i kategorię większościową |
* W węźle tworzymy słownik w którym każdemu rezultatowi 'r' wybranego testu odpowie węzeł do którego rezultat prowadzi. Nowy węzeł tworzymy poprzez wywołanie rekurencyjnej funkcji buildTree(), do której przekażemy zbiór przykładów spełniających rezultat 'r', kategorę większościową dla tego zbioru oraz zbiór testów pomniejszony o właśnie użyty test. | * W węźle tworzymy słownik w którym każdemu rezultatowi 'r' wybranego testu odpowie węzeł do którego rezultat prowadzi. Nowy węzeł tworzymy poprzez wywołanie rekurencyjnej funkcji buildTree(), do której przekażemy zbiór przykładów spełniających rezultat 'r', kategorę większościową dla tego zbioru oraz zbiór testów pomniejszony o właśnie użyty test. |
| |
* C4.5 opis mojej implementacji: | * C4.5 opis mojej implementacji: |
* Problemem poprzedniego algorytmu była zbyt duża ilość wartości, które mogłyby być pogrupowane. Rozwiązaniem jest np. agregacja atrybutów porządkowych. Godziny, dni tygodnia oraz miesiące nadają się do tego doskonale. | * Problemem poprzedniego algorytmu była zbyt duża ilość wartości, które mogłyby być pogrupowane. Rozwiązaniem jest np. agregacja atrybutów porządkowych. Godziny, dni tygodnia oraz miesiące nadają się do tego doskonale. |
| |
| |
====== Sprawozdanie ====== | |
| |
| ====== Testy praktyczne ====== |
| |
* Metodologia testów: | * Metodologia testów: |
* Losowy zbiór uczący składający sie z 150 przykładów | * Losowy zbiór uczący składający sie z 150 przykładów |
* Dziedzina składa się z 2016 przypadków | * Dziedzina składa się z 2016 przypadków |
* Najpierw algorytm buduje drzewo z 150 przykładów zbioru uczącego, następnie pozostałe 1866 są testowane w zbudowanym drzewie | * Najpierw algorytm buduje drzewo z 150 przykładów zbioru uczącego, następnie pozostałe 1866 są testowane w zbudowanym drzewie. Często wykorzystywane w literaturze, aby nie sprawdzać tym czym uczyliśmy. |
* Wykonujemy 20 testów. | * Wykonujemy 20 testów. |
| |
* Testy algorytmu ID3 | * Testy algorytmu ID3 |
* [[ http://student.agh.edu.pl/~morcinek/AGH/MIW/No_aggregate.gif |Przykładowe drzewo]] które nie zostało w pełni wygenerowane ponieważ program graphviz nie poradził sobie. Było to związane z tym, że atrybuty początkowe zawierały zbyt wiele wartości i każda z nich była w każdym wyniku testu opierającego się o ten atrybut. Czasochłonne i pamięciochłonne było też konstruowanie i przechowywanie w pamięci takiego drzewa. Ilość liści takiego drzewa wynosi 7 (dni) x 24 (godziny) x 12 (miesięcy) = 2016. | * [[:pl:miw:miw08_rbs_ml:no_aggregate | Przykładowe drzewo ]] które nie zostało w pełni wygenerowane ponieważ program graphviz nie poradził sobie. Było to związane z tym, że atrybuty początkowe zawierały zbyt wiele wartości i każda z nich była w każdym wyniku testu opierającego się o ten atrybut. Czasochłonne i pamięciochłonne było też konstruowanie i przechowywanie w pamięci takiego drzewa. Ilość liści takiego drzewa wynosi 7 (dni) x 24 (godziny) x 12 (miesięcy) = 2016. |
* Średnia skuteczność wynosiła 55.3% | * Średnia skuteczność wynosiła 55.3% |
* Poprawnie sklasyfikowane przykłady testowe wahały się od 904 do 1111 | * Poprawnie sklasyfikowane przykłady testowe wahały się od 904 do 1111 |
| |
| |
| |
| |
| |
| |
| ====== Sprawozdanie ====== |
| |
| * Przedstawione problemy to jak metodami uczenia maszynowego //automatycznie// budować model ARD? |
| * Postanowiłem to rozwiązać podczas implementowania uczenia maszynowego dla [[hekate:hekate_case_thermostat|Termostatu]]. |
| * Projekt powstawał etapami na bazię książki "Systemy uczące się" Pawła Cichosza. Najpierw skonstruowany został algorytm ID3 w języku C#. Następnie wobec wymienionych poniżej wad, rozszerzony został o przekształcanie atrybutów (a dokładnie Dyskretyzacje zstępującą). Na koniec musiał całość przerobić na Javę. |
| |
| |