Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_rbs_ml [2008/05/27 02:26]
miw
pl:miw:miw08_rbs_ml [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Opis ====== ====== Opis ======
 +__**Projekt zakończony**__
 +
 Krzysztof Morcinek, <​krzysztof.morcinek@gmail.com>​ Krzysztof Morcinek, <​krzysztof.morcinek@gmail.com>​
  
 Uczenie maszynowe w RBS, jako metoda rozbudowy/​rozszerzania istniejącego systemu o nowe reguły, modyfikacja reguł, przykłady. Uczenie maszynowe w RBS, jako metoda rozbudowy/​rozszerzania istniejącego systemu o nowe reguły, modyfikacja reguł, przykłady.
  
 +[[:​pl:​miw:​miw08_rbs_ml:​historia | Historia spotkań ]]
  
  
Linia 13: Linia 16:
  
  
-====== Spotkania ====== 
  
  
Linia 22: Linia 24:
  
  
-===== 080311 ===== 
  
  
-===== 080401 ===== 
-  * jak metodami uczenia maszynowego //​automatycznie//​ budować model ARD? 
-  * jak uczenie maszynowe może prowadzić do rozbudowy bazy reguł? 
  
  
Linia 36: Linia 34:
  
  
 +====== Projekt ======
  
-===== 080520 ===== 
-  * Zaimplementować uczenie maszynowe dla [[hekate:​hekate_case_thermostat|Termostatu]]. 
-    * Zastosowano algorytm ID3, lecz wtedy tworzy sie zbyt wiele gałęzi. ​ 
-    * Pójście w stronę C4.5 na początku następuje agregacja (wartości są uporządkowane) i zmiana atrybutów porządkowych na inne o mniejszej ilości możliwych wartości. 
  
 +  * Projekt pisany jest w języku Java w edytorze Eclipse.
  
 +  * Używane pliki:
 +    * [[ pl:​miw:​miw08_rbs_ml:​attrchangecollection | attrchangecollection.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​attributchange | attributchange.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​days | days.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​decisiontree | decisiontree.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​month | month.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​nominaltest | nominaltest.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​program | program.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​showednode | showednode.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​termostatleaf | termostatleaf.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​termostatnode | termostatnode.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​thermostat | thermostat.java]]
 +    * [[ pl:​miw:​miw08_rbs_ml:​writefile | writefile.java]]
  
 +  * 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ł.
 +    * Sprawdzamy Kryterium Stopu - wtedy zwracany jest liść z przypisaną mu etykietą, kryteria:
 +      * Brak przykładów
 +      * Tylko jedna kategoria docelowa znajduje się w przykładach
 +      * Brak testów
 +    * Wybieramy test na podstawie kryterium Przyrostu Informacji ([[wp>​Information_entropy]])
 +    * 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.
  
 +  * 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. ​
 +    * Używamy dyskretyzacji zstępującej,​ próg wybierając również na podstawie kryterium Przyrostu Informacji ([[wp>​Information_entropy]]).
 +    * Atrybuty są przekształcane na te o mniejszej ilości wartości i poddane z nowymi atrybutami jako wejście algorytmu omówionego powyżej czyli ID3.
 +    * Czasami udaję się logicznie podzielić (patrz przykład 1), czasami jednak //losowy// zbiór uczący nie pozwala dobrze zagregować (patrz przykład 2).
 +    * Najważniejszym parametrem jest tutaj próg entropii (m_entropyTreshhold). Określa od jakiej różnicy informacji oraz entropii występującej w podzielonym zbiorze, próg podziału będzie zaakceptowany.
  
  
  
-===== 080527 ===== 
  
 +====== Testy praktyczne ======
  
-  * Pytania: 
-    * Czy jako zbiór uczący może być cała dziedzina, czyli 'dni x godziny x miesiące'?​ 
-    * Czy musimy obsługiwać przekłamane przykłady uczące i braki (brak któregoś atrybutu)? 
  
-  * Testy ​([[pl:​miw:​miw08_rbs_ml:​nunittests|NUnitTests]] - plik z testem) +  * Metodologia testów
-    * Losowy zbiór uczący składający sie z 126 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 126 przykładów zbioru uczącego, następnie pozostałe ​1890 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.
  
-  * Wyniki: +  * Testy algorytmu ID3 
-    * Wykonano 23 testy +    * [[:​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 ​83.3% +    * Średnia skuteczność wynosiła ​55.3% 
-    * Poprawnie sklasyfikowane przykłady testowe wahały się od 1428 do 1771+    * Poprawnie sklasyfikowane przykłady testowe wahały się od 904 do 1111
  
-====== Projekt ======+  * Testy algorytmu ID3 uzupełnionego o występujące w C4.5 agregowanie wartości porządkowych i zmianę atrybutów na prostsze: 
 +    * [[ :​pl:​miw:​miw08_rbs_ml:​tree1 |Przykładowe drzewo 1]] oraz [[:​pl:​miw:​miw08_rbs_ml:​aggregate1 |Aggregate1.txt]] odwzorowujący atrybuty początkowe na te atrybuty po agregacji 
 +    * [[ :​pl:​miw:​miw08_rbs_ml:​tree2 |Przykładowe drzewo 2]] oraz [[:​pl:​miw:​miw08_rbs_ml:​aggregate2 |Aggregate2.txt]] odwzorowujący atrybuty początkowe na te atrybuty po agregacji 
 +    * Średnia skuteczność wynosiła 91.2% 
 +    * Poprawnie sklasyfikowane przykłady testowe wahały się od 1488 do 1866 (czyli wszystkie rozpoznane prawidłowo) 
 +    * Wyniki uzyskane ulepszonym algorytmem ID3 są lepsze ponieważ już przed rozpoczęciem budowy drzewa zamieniamy wielowartościowe atrybuty na prostsze (mniejsza ilość wartości). Korzystam ze zbioru uczącego się zawierającego 7,4% przykładów (150 / 2016). Zwykły algorytm ID3 dobrze dopasuje każdy ze 150 przykładów,​ lecz zabraknie mu ogólności dla przykładów spoza tego zbioru. Agregacja pozwala nam podzielić wartości zbyt licznych atrybutów i przejść na prostsze biorąc pod uwagę przyrost informacji (entropię). Najbardziej pożądane jest tak podzielić wartości aby w danym zbiorze występowała przewaga jednych pojęć docelowych (np jednego, kilku) nad pozostałymi (najlepiej żeby ich nie było). ​
  
  
-  * Projekt pisany jest w języku C#. 
  
-  * Używane pliki: 
-    * [[pl:​miw:​miw08_RBS_ML:​decisiontree|DecisionTree.cs]] 
-    * [[pl:​miw:​miw08_rbs_ml:​class1|Class1.cs]] 
-    * [[pl:​miw:​miw08_rbs_ml:​enums|Enums.cs]] 
  
  
-  * [[http://​student.agh.edu.pl/​~morcinek/​AGH/​MIW|Aktualna implementacja w języku C#]] 
  
-====== Sprawozdanie ====== 
  
  
Linia 86: Linia 106:
  
  
 +====== 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ę.
  
  
 ====== Materiały ====== ====== Materiały ======
 +**Głównie:​**
 +
 +Książka Systemy uczące sie. Cichosz P., WNT, Warszawa, 2000, zwłaszcza cały rozdział 3. Indukcja drzew decyzyjnych. oraz 7. Przekształcanie atrybutów.
 +
 +[[wp>​ID3_algorithm]] [[wp>​C4.5_algorithm]] [[wp>​Decision_tree]] ​ [[http://​pl.wikipedia.org/​wiki/​Drzewo_decyzyjne|Drzewo decyzyjne na Wikipedii]]
 +
 +Mniej:
 +
 [[http://​idss.cs.put.poznan.pl/​~stefanowski/​mlteaching.html|Wiele linków o ML z Politechniki Poznańskiej]] ​ [[http://​idss.cs.put.poznan.pl/​~stefanowski/​mlteaching.html|Wiele linków o ML z Politechniki Poznańskiej]] ​
  
Linia 96: Linia 128:
  
 [[http://​www.fizyka.umk.pl/​~duch/​indexpl.html|Wodzislaw Duch Home page]] [[http://​www.fizyka.umk.pl/​~duch/​indexpl.html|Wodzislaw Duch Home page]]
-Kolejna polska strona Włodzisława Ducha. ​Zawiera dużo ciekawych linków, informacji na temat lokalnych metod uczenia się, algorytmów ML+Zawiera dużo ciekawych linków, informacji na temat lokalnych metod uczenia się, algorytmów ML
  
  
-Książka Systemy uczące sie. Cichosz P., WNT, Warszawa, 2000, zwłaszcza cały rozdział 3. Indukcja drzew decyzyjnych. oraz 7. Przekształcanie atrybutów. 
- 
-[[wp>​ID3_algorithm]] [[wp>​C4.5_algorithm]] [[wp>​Decision_tree]] ​ [[http://​pl.wikipedia.org/​wiki/​Drzewo_decyzyjne|Drzewo decyzyjne na Wikipedii]] 
  
  
pl/miw/miw08_rbs_ml.1211848016.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0