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/06/16 12:57]
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>​
  
Linia 5: Linia 7:
  
 [[:​pl:​miw:​miw08_rbs_ml:​historia | Historia spotkań ]] [[:​pl:​miw:​miw08_rbs_ml:​historia | Historia spotkań ]]
 +
 +
 +
 +
  
  
Linia 35: Linia 41:
   * 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]]
Linia 46: Linia 52:
     * [[ 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
Linia 58: Linia 62:
     * 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. ​
Linia 64: Linia 69:
     * Czasami udaję się logicznie podzielić (patrz przykład 1), czasami jednak //losowy// zbiór uczący nie pozwala dobrze zagregować (patrz przykład 2).     * 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.     * 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.
 +
  
  
  
 ====== Testy praktyczne ====== ====== Testy praktyczne ======
- 
-====== Sprawozdanie ====== 
- 
-  * 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ę. 
  
  
Linia 77: Linia 79:
     * 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.
  
Linia 100: Linia 102:
  
  
 +
 +
 +
 +
 +====== 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ę.
  
  
pl/miw/miw08_rbs_ml.1213613845.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