210 likes | 340 Views
Diplomová práce Systém předzpracování dat pro dobývání znalostí z databází. Hana Kotinová 14.9.2011. Osnova prezentace. Struktura a cíl práce Metody předzpracování dat Systémy předzpracování dat Historie vývoje DPT Jak program pracuje Budoucnost – plány na vylepšení Problémy Závěr.
E N D
Diplomová práceSystém předzpracování dat pro dobývání znalostí z databází Hana Kotinová 14.9.2011
Osnova prezentace Struktura a cíl práce Metody předzpracování dat Systémy předzpracování dat Historie vývoje DPT Jak program pracuje Budoucnost – plány na vylepšení Problémy Závěr
Struktura a cíle práce • Úvod • Dobývání znalostí z databází • Problémy fáze předzpracování • Algoritmy předzpracování dat • Vybrané systémy pro předzpracování dat • Data preprocessingtool • Závěr • Cíl práce – vytvoření programu • Osobní cíl – zdokonalení v programování řešením rozsáhlejšího projektu
Metody předzpracování dat • Transformace dat do strukturované podoby ve formě tabulky • Nastavení jednotného formátu pro data z různých zdrojů • Spojení více tabulek do jedné • Ošetření chybějících hodnot • Výběr atributů • Výběr objektů • Rozdělení dat • Diskretizace a seskupování hodnot
Metody předzpracování dat v DPT • Transformace dat do strukturované podoby ve formě tabulky • Spojení více tabulek do jedné • Nastavení jednotného formátu pro data z různých zdrojů • Ošetření chybějících hodnot • Výběr atributů • Výběr objektů • Rozdělení dat • Diskretizace a seskupování hodnot
Systémy pro předzpracování dat Mining Mart – Case Editor a Koncept Editor SumatraTT
Historie vývoje (1) DPT1 Zdrojové kódy psané v notepadu =>Kurz4IT251 a přechod k BlueJ
Historie vývoje (2) DPT2 po spuštění DPT2 po načtení souboru
Budoucnost – plány na vylepšení • Logování operací • Procedurydiskretizace – doplnění o class sensitive crisp a class sensitive fuzzy • Standardní aplikace s více okny nebo řešení pomocí karet • Zpracování běžných databázových souborů, nejen čistý text v podobě .csv souboru. • Grafy
Problémy • Programátorská zdatnost • Práce na notebooku • (parametry: 14“ obrazovka, 256MB RAM, Pentium III, 750 MHz) • Havárie disku na začátku práce • Čas
Závěrečné srovnání systémů • grafické systémy • práce velkého týmu • Pracují s databázemi • Složité • Využívá jen běžné grafické rozhraní • 1 člověk • Pracuje pouze s textovými soubory (.csv) • Jednodušší Mining Mart a SumatraTT DPT
Závěr • Vývoj aplikace Data preprocessingtool bude pokračovat • Zájem o využití aplikace v České spořitelně, a.s. • Další verze budou dostupné na www.mankala.cz
Děkuji za pozornost. Prostor k dotazům …
Otázky vedoucího a oponenta • Na straně 8 je uvedeno, že z dat pro analýzu je nutné vytvořit pouze jednu (databázovou) tabulku. Opravdu neexistují data-miningové procedury, které mohou pracovat s více než jednou tabulkou najednou? Neexistují dokonce procedury, které pracují s daty v jiné podobě než tabulkové (např. se síťovými grafy, obrázky…)? Jestli ano, tak uveďte příklady. Jestli ne, tak zdůvodněte, proč nemohou existovat. • Použití jedné tabulky je nejčastější, existují však i procedury prostorového data miningu • Podporováno např. Oracle Data Miner, MS SQL Server AnalysisServices
Otázky vedoucího a oponenta • Jsou v sytému DPT implementovány nějaké operace, které nenalezneme v systémech SumatraTT nebo MiningMart? • Procedura NoiseEvaluation • Vysvětlete detailně použitý algoritmus pro funkci NoiseEvaluation.
Procedura NoiseEvaluation - zadání • Účel: zjistitpočetkontradikcí v datech. Kontradikcemi se myslíobjekty, kterémajístejnéhodnotyvstupníchatributů, ale liší se v cílovématributu. Pokud se takovéobjektyvyskytnou, klasifikátor je zařadí to stejné(majoritní) třídy; objektypatřící do ostatních tříd jsou kontradikce. • Vstup: datová tabulka • Výstup: počet kontradikcí, relativní chyba (error) a relativní správnost (accuracy) kterou lze dosáhnout • Parametry: cílový atribut (class), informace, který atribut je váha objektů • Algoritmus: • spočítat počty výskytů objektů, které se shodují v hodnotách vstupních atributů (je-li použita váha objektů, počítá se počet objektů z těchto vah) a jejich rozdělení do tříd • Pro každý objekt spočítat max. možnou správnost (accuracy) jako počet (opět s přihlédnutím k váze) objektů v majoritní třídě • Spočítat celkovou max. možnou správnost jako (objekty správnost objektu)/počet_objektů a min. možnou chybu (error) neboli podíl šumu jako 1 – max. možná správnost
Procedura NoiseEvaluation – řešení (1) public classNoiseEvaluation { public NoiseEvaluation() { } DataKapsadatoveStruktury; public voidnoise() { datoveStruktury = datoveStruktury.getInstance(); TreeMap<String, Double> mo = newTreeMap<String, Double>(); TreeMap<String, Double> moc = newTreeMap<String, Double>(); TreeMap<String, Double> mov = newTreeMap<String, Double>(); for (int x = 2; x <= datoveStruktury.pocetRadkuSouboru ; x++) { String a = ""; String b = "" + datoveStruktury.stavData[x][datoveStruktury.vybranyCil];; for (int y = 1; y <= datoveStruktury.pocetSloupcuSouboru; y++) { if (y!= datoveStruktury.vybranyCil && y!= datoveStruktury.vybranaVaha) { a = a + datoveStruktury.stavData[x][y] + ";"; } } Double freq = mo.get(a); Double freqv = mov.get(a); if (datoveStruktury.vybranaVaha == 0) { mo.put(a, (freq == null) ? 1 : freq + 1); mov.put(a, (freq == null) ? 1 : freq + 1); } else { mo.put(a, (freq == null) ? 1 : freq + 1); mov.put(a, (freqv == null) ? Double.parseDouble(datoveStruktury.stavData[x][datoveStruktury.vybranaVaha]) : freqv + Double.parseDouble(datoveStruktury.stavData[x][datoveStruktury.vybranaVaha])); } a = a + b; freq = moc.get(a); moc.put(a, (freq == null) ? 1 : freq + 1); } // endfor x
Procedura NoiseEvaluation – řešení (2) • if ((mo.size() < moc.size()) ) { • moc.clear(); • Iterator<String> ukazovatko = mo.keySet().iterator(); • while(ukazovatko.hasNext()) { • Stringklic = ukazovatko.next(); • if (mo.get(klic) < 2) { • ukazovatko.remove(); • //mov.remove(klic); • } • } // whileukazovatko • double totalAccuracy = 0; • double tAErr = 0; • Set<Map.Entry<String,Double>> mnozinaDvojic = mo.entrySet(); • for(Map.Entry <String, Double> dvojice : mnozinaDvojic) { • Grafika.oknoVysledku.setText(Grafika.oknoVysledku.getText() + "\n" + "Object: " + dvojice.getKey() + "\n" + " Total in allclasses: " + mov.get(dvojice.getKey()).toString()); • totalAccuracy = totalAccuracy + mov.get(dvojice.getKey()); • } • if (datoveStruktury.sumaVah != 0) { • totalAccuracy = (double)Math.round(100 - (totalAccuracy * 100 / datoveStruktury.sumaVah )) / 100; • } • else { • totalAccuracy = (double)Math.round(100 - (totalAccuracy * 100 / (datoveStruktury.pocetRadkuSouboru - 1) )) / 100; • } • tAErr = (double)Math.round((1-totalAccuracy) * 100) / 100; • Grafika.oknoVysledku.setText(Grafika.oknoVysledku.getText() + "\n" + "maximum accuracy: " + totalAccuracy + ", error: " + tAErr); • } • else { • Grafika.oknoVysledku.setText(Grafika.oknoVysledku.getText() + "\n" + "No sameobjects in differentclasses, maximum accuracy: 1.0, error: 0.0" ); • } • } // noise • } // class