Skip to content

Computer Breakers Analyza

Jaroslav Klaus edited this page Mar 23, 2015 · 25 revisions

#OBJEKTOVÝ NÁVRH APLIKACE


Projekt: Srovnání klasifikační algoritmů pro aplikaci Hádání čísel

Tým: Computer Breakers

Členové:

Vedoucí - Vladimír Láznička, E-mail - laznic@students.zcu.cz

Člen - Jaroslav Klaus, E-mail - jklaus@students.zcu.cz

Člen - Michal Medek, E-mail - mmedek@students.zcu.cz

Člen - Karel Šilhavý, E-mail - silhavyk@students.zcu.cz


Obsah

1. Úvod

2. Kontext a architektura systému

3. Typy informací zpracovávané systémem

4. Návrh systému

5. Přiřazení tříd/modulů programátorům


1. Úvod

Tento dokument slouží ke znázornění návrhu systému a analýze jeho částí pro následnou implementaci. Postupně bude popsán účel systému, jeho kontext spolu s přehledem jednotlivých částí a odůvodněním volby jednotlivých technologií a co za data budou systémem zpracovány. Nakonec budou detailněji rozepsány jednotlivé části na úroveň samotných tříd a také rozpis, který programátor z týmu je bude řešit.

1.1 Účel systému

Účel systému (resp. cíl projektu) je klasifikace EEG buď z poskytnutých offline dat (soubory) nebo z probíhajícího měření. Měření spočívá v zobrazovaní čísla v rozmezí 1 až 9 testované osobě a ta bude na vjem reagovat stimulem, který je zachycen a odeslán ke zpracování. Aplikace pak bude schopna zpracovat vstupní data, ty vyhodnotit implementovanými algoritmy, vypočítat skóre pro možná čísla a určit, na které měřená osoba pravděpodobně myslela.

1.2 Slovníček definic, pojmů a zkratek

Zkratka / Výraz Popis
EEG "Electroencephalography" - proces měření elektrické aktivity na povrchu hlavy.
Epocha Pevně dané okolí stimulu v měřeném signálu.
Komponenta P300 Typ ERP komponenty vznikající při rozhodovacím procesu mozku.
ERP "Event related potencial" - zaznamenaná odpověď mozku na nějakou vnímatelnou událost.

1.3 Odkazy na další dokumenty

2. Kontext a architektura systému

2.1 Kontext systému

Na následujícím digramu je znázorněn kontext systému a jeho využití uživatelem.

Use-Case diagram

2.2 Architektura systému, přehled podsystémů

Aktuální systém se obecně skládá z následujících částí:

  • Uživatelské rozhraní programu
  • Komunikační rozhraní pro vstup dat (TCP protokol)
  • Zpracování vstupních dat
  • Třídy s algoritmy pro extrakci příznaku ze signálu a následnou klasifikaci
  • Rozhraní pro trénování zmíněných algoritmů a jejich testování
  • Třídy pro dodatečnou práci s daty (výpočty, konstantní atributy atd.)

Z uživatelského rozhraní se vyvolávají jednotlivé požadavky na činnost systému, což typicky bývá výběr zdroje dat, který je pak obsloužen komunikačním rozhraním. Přijatá data jsou poté zpracována a signál rozdělen na jednotlivé epochy, které se předávají třídám pro extrakci příznaku a klasifikaci (algoritmy pro klasifikaci také vyžadují vytvoření trénovacích dat). Výsledky klasifikace jsou pak zase vráceny na uživatelské rozhraní. Část pro trénování algoritmů lze pak spouštět mimo hlavní část programu, přičemž využívá již vytvořených vstupních souborů pro trénování, které aplikuje na algoritmy obsažené v části s třídami klasifikace.

Předmětem našeho projektu je pak část uživatelského rozhraní a práce se třídami pro extrakci příznaku a klasifikaci, tyto části tedy budou popsány v kapitole Návrh systému.

2.3 Zvolená technologie, programovací jazyk ad., důvody

Systém je dle požadavků specifikace vyvíjen v programovacím jazyce Java s JDK 1.6. Další požadavky na technologie jsou od toho odvíjeny.

3. Typy informací zpracovávané systémem

Systém pracuje s několika typy vstupních souborů. Konkrétně se jedná o:

  • konfigurační soubory tříd a knihoven na extrakci příznaku a klasifikaci ve formátu XML
  • soubory s naměřenými daty (pro offline testování aplikace) označené koncovkami .avg, .vhdr a .vmrk
  • soubor s daty pro trénování klasifikačních algoritmů - set2

Mezi výstupní data pak patří logy aplikace a výstupy procesu trénování klasifikačních algoritmů (typycky mají koncovku .txt).

4. Návrh systému

Systém vyvíjený v rámci tohoto projektu má za úkol zprostředkovat postup pro extrakci příznaku ze získaných epoch a následnou klasifikaci vektoru příznaku. Úprava stávající aplikace proběhne v balíku icp.application.classification, kam budou přidány třídy zajišťující výše zmíněnou funkčnost. Tyto třídy budou sloužit jako samostatné moduly, nemělo by být zapotřebí provádět úpravy na okolních již implementovaných třídách. Uživatelské rozhraní poté bude upraveno přidáním potřebné funkčnosti do třídy MainFrame v balíku icp.online.gui a vytvořením nové třídy řešící vytvořené nových ovládacích prvků.

Schéma systému je znázorněno na následujícím diagramu:

Class diagram

4.1 Přehled tříd

Balík icp.application.classification:

  • HilbertHuangTransformationFeatureExtraction
  • WaveletTransformFeatureExtraction
  • MatchingPursuitFeatureExtraction
  • KNNClassifier
  • LDAClassifier
  • SVMClassifier
  • CorrelationClassifier
  • KNearestNeighbours
  • LinearDiscriminantAnalysis
  • SupportVectorMachines
  • Correlation

Balík icp.online.gui:

  • MainFrame
  • ClassificationSelector

4.2 Třída HilbertHuangTransformFeatureExtraction

Třída implementující již připravené rozhraní IFeatureExtraction. Slouží k přípravě vektoru příznaku pomocí algoritmu Hilbert-Huangovi transformace z poskytnuté knihovny. Rozhraní stanovuje metody, které bude třída obsahovat.

4.2.1 Konstruktory

Žádný není specifikován (zděděný od třídy Object).

4.2.2 Metody

  • public double[] extractFeatures(double[][] epoch)

Metoda přejme epochu, kterou po jednotlivých kanálech (řádkách dvourozměrného pole) předá příslušné metodě z knihovny zajišťující potřebné algoritmy. Do proměnné typu double[] si pak uloží vektor extrahovaného příznaku a tuto hodnotu pak vrátí.

  • public int getFeatureDimension()

Metoda vracející velikost vektoru extrahovaného příznaku.

4.3 Třída WaveletTransformFeatureExtraction

Třída implementující již připravené rozhraní IFeatureExtraction. Slouží k extrakci příznaků pomocí algoritmu Diskrétní waveletové transformace z poskytnuté knihovny. Rozhraní stanovuje metody, které bude třída obsahovat.

4.3.1 Konstruktory

Žádný není specifikován (zděděný od třídy Object).

4.3.2 Metody

  • public double[] extractFeatures(double[][] epoch)

Metoda přejme epochu, kterou po jednotlivých kanálech (řádkách dvourozměrného pole) předá příslušné metodě z knihovny zajišťující potřebné algoritmy. Do proměnné typu double[] si pak uloží příznakový vektor a tuto hodnotu pak vrátí.

  • public int getFeatureDimension()

Metoda vracející velikost příznakového vektoru.

4.4 Třída MatchingPursuitFeatureExtraction

Třída implementující již připravené rozhraní IFeatureExtraction. Slouží k přípravě vektoru příznaku pomocí algoritmu MatchingPursuit z poskytnuté knihovny. Rozhraní stanovuje metody, které bude třída obsahovat.

4.4.1 Konstruktory

Žádný není specifikován (zděděný od třídy Object).

4.4.2 Metody

Metoda přejme epochu, kterou po jednotlivých kanálech (řádkách dvourozměrného pole) předá příslušné metodě z knihovny zajišťující potřebné algoritmy. Do proměnné typu double[] si pak uloží příznakový vektor a tuto hodnotu pak vrátí.

4.5 Třída KNearestNeighboursClassifier

Tato třída bude dědit od ERPClassifierAdapter (programová struktura typu adaptér implementující rozhraní IERPClassifier) a řešit konkrétní implementaci jednotlivých metod. Samotný účel třídy je zprostředkovat algoritmus a metody třídy KNearestNeighboursAlgorithms pro klasifikaci extrahovaného příznaku.

4.5.1 Konstruktory

  • public KNearestNeighboursClassifier()

Bezparametrický konstruktor volající ten parametrický, kterému předá defaultní počet nejbližších sousedních prvků (uložený jako konstantní hodnota mezi atributy třídy).

  • public KNearestNeighboursClassifier(int k)

Konstruktor, který bude přejímat počet nejbližších sousedních prvků pro klasifikaci příznaku. Bude vytvářet instanci třídy KNearestNeighboursAlgorithms s tím, že jí předá počet nejbližších sousedních prvků.

4.5.2 Metody

  • public void setFeatureExtraction(IFeatureExtraction fe)

Metoda pro nastavení instance třídy pro extrakci příznaku tomuto klasifikátoru.

  • public double classify(double[][] epoch)

Metoda zajišťující klasifikaci vektoru příznaku extrahovaného s předávané epochy. Nejprve je zavolána metoda pro samotnou extrakci, jejíž výsledek je uložen do pole typu double[]. S tímto polem se pak dále pracuje pomocí metod třídy KNearestNeighboursAlgorithms, která nakonec vrátí výsledek představující skóre daného příznaku. Tento výsledek je pak vrácen i touto metodou.

  • public void train(List<double[][]> epochs, List targets, int numberOfiter, IFeatureExtraction fe)

Metoda zajišťující natrénování algoritmu K Nearest Neighbours a vytvoření souboru, podle kterého bude probíhat klasifikace.

  • public ClassificationStatistics test(List<double[][]> epochs, List targets)

Metoda zpřístupňující testovací rozhraní pro tento klasifikátor. Vrací objekt typu ClassificationStatistics obsahující potřebné výsledky.

  • public void save(String file)

Metoda pro uložení výsledku klasifikace do souboru.

  • public void load(String file)

Metoda pro načtení dat ze souboru pro klasifikaci.

  • public void load(InputStream is)

Metoda pro načtení dat v případě on-line použití aplikace.

4.6 Třída LinearDiscriminantAnalysisClassifier

Tato třída bude dědit od ERPClassifierAdapter (programová struktura typu adaptér implementující rozhraní IERPClassifier) a řešit konkrétní implementaci jednotlivých metod. Samotný účel třídy je zprostředkovat algoritmus a metody třídy LinearDiscriminantAnalysisAlgorithms pro klasifikaci extrahovaného příznaku.

4.6.1 Konstruktory

  • Doplní se po dalším prozkoumání

4.6.2 Metody

  • public double classify(double[][] epoch)

Metoda zajišťující klasifikaci vektoru příznaku extrahovaného s předávané epochy. Nejprve je zavolána metoda pro samotnou extrakci, jejíž výsledek je uložen do pole typu double[]. S tímto polem se pak dále pracuje pomocí metod třídy LinearDiscriminantAnalysisAlgorithms, která nakonec vrátí výsledek představující skóre daného příznaku. Tento výsledek je pak vrácen i touto metodou.

  • public void train(List<double[][]> epochs, List targets, int numberOfiter, IFeatureExtraction fe)

Metoda zajišťující natrénování algoritmu Linear Discriminant Analysis a vytvoření souboru, podle kterého bude probíhat klasifikace.

  • public ClassificationStatistics test(List<double[][]> epochs, List targets)

Metoda zpřístupňující testovací rozhraní pro tento klasifikátor. Vrací objekt typu ClassificationStatistics obsahující potřebné výsledky.

  • public void save(String file)

Metoda pro uložení výsledku klasifikace do souboru.

  • public void load(String file)

Metoda pro načtení dat ze souboru pro klasifikaci.

  • public void load(InputStream is)

Metoda pro načtení dat v případě on-line použití aplikace.

4.7 Třída SVMClassifier

4.7.1 Konstruktory

4.7.2 Metody

4.8 Třída CorrelationClassifier

4.8.1 Konstruktory

4.8.2 Metody

4.9 Třída KNearestNeighboursAlgorithms

Tato třída bude obsahovat implementaci algoritmu K Nearest Neighbours a bude poskytovat své metody příslušnému klasifikátoru.

4.9.1 Konstruktory

  • public KNearestNeighboursAlgorithms(int k)

Kontruktor přejme počet nejbližších sousedních prvků, podle kterých bude probíhat klasifikace, a vykoná potřebné operace pro použití implementovaných metod.

4.9.2 Metody

Bude postupně specifikováno.

4.10 Třída LinearDiscriminantAnalysisAlgorithms

Tato třída bude obsahovat implementaci algoritmu Linear Discriminant Analysis a bude poskytovat své metody příslušnému klasifikátoru.

4.10.1 Konstruktory

  • Doplní se po dalším prozkoumání

4.10.2 Metody

  • Doplní se po dalším prozkoumání

4.11 Třída SupportVectorMachines

4.11.1 Konstruktory

4.11.2 Metody

4.12 Třída Correlation

4.12.1 Konstruktory

4.12.2 Metody

4.13 Třída MainFrame

Třída MainFrame je již stávající aplikací implementována, naším cílem bude přidat odkaz a vytvořit instanci pro naší vlastní část GUI (třída GUIForParameters)

4.13.1 Konstruktory

  • public MainFrame()

Již implementovaný kontruktor, nemělo by být zapotřebí do něj zasahovat.

4.13.2 Metody

  • public void setClassifier(IERPClassifier classifier)

Metoda pro nastavení konkrétního klasifikátoru, bude volána v rámci nějaké akce na novém GUI. Zároveň bude zapotřebí zrušit parametr final u atributu pro uchování klasifikátoru.

Pozn.: v konstruktoru je aktuálně přiřazen jeden z již implementovaných klasifikátorů... ten bude nastaven defaultně pro případ, že uživatel pomocí GUI, žádný nezvolí.

  • public void setFeatureExtraction(IFeatureExtraction fe)

Metoda pro nastavení konkrétní instance třídy pro extrakci příznaku danému klasifikátoru. Bude z ní zavolána metoda public void setFeatureExtraction(IFeatureExtraction fe) z daného klasifikátoru.

Pozn.: podobně jako u klasifikátoru je i u extrakce příznaku jedna z jichž implementovaných tříd přiřazena defaultně v konstruktoru.

4.14 Třída GUIForParameters

Bude doplněno po zpracování návrhu GUI.

4.14.1 Konstruktory

4.14.2 Metody

5. Přiřazení tříd/modulů programátorům

Třída Programátor
HilbertHuangTransformationFeatureExtraction Michal Medek / Vladimír Láznička
WaveletTransformFeatureExtraction Jaroslav Klaus
MatchingPursuitFeatureExtraction Karel Šilhavý
KNNClassifier Vladimír Láznička
LDAClassifier Jaroslav Klaus
SVMClassifier Michal Medek
CorrelationClassifier Karel Šilhavý
KNearestNeighbours Vladimír Láznička
LinearDiscriminantAnalysis Jaroslav Klaus
SupportVectorMachines Michal Medek
Correlation Karel Šilhavý
MainFrame Vladimír Láznička
ClassificationSelector Michal Medek

Clone this wiki locally