440 likes | 608 Views
Fuzzy Databázy (Computing with words). PDT 2008 Genci. Obsah. Motivácia Fuzzy logika Fuzzy terms (výrazy) Jazykové operátory Fuzzy SQL. Zdroje. [1] Carlo Zaniolo a kol.: Advanced Database Systems , Morgan Kaufman Publishers, San Francisco, 1997 (kapitol y 2-3 ).
E N D
Fuzzy Databázy(Computing with words) PDT 2008 Genci
Obsah • Motivácia • Fuzzy logika • Fuzzy terms (výrazy) • Jazykové operátory • Fuzzy SQL
Zdroje [1]Carlo Zaniolo a kol.: Advanced Database Systems, Morgan Kaufman Publishers, San Francisco, 1997 (kapitoly 2-3). [2] ImrichJ.: Fuzzy databázy. Stav problematiky, dostupný SW, implementácia v relačných DBS. Diplomová práca. 2000. KPI FEI Košice [3] články Jaroslava Kostelanského, pôvodne umiestnené na http://www.kredit.sk/DB-fuzzy.html Mnohé veci nájdete v prezentáciách študentov prof. Pokorného na stránke: http://www.ksi.mff.cuni.cz/~pokorny/dj/
Motivácia • Stredne vysoká budova blízko banky
Príklad • Máme databázu študentov a ich študijné priemery
Hľadáme dobrých študentov (študenti s priemerom >= 3.5) • Dotaz SELECT * FROM STUDENTS WHERE GPA >= 3.5;
Príklad – pokr. • Ďalej požadujeme • Zotriediť študentov od najlepšieho k najhoršiemu. • Zvolíme triedenie podľa priemeru zostupne (DESC) a podľa absencií vzostupne (ASC). • Dotaz SELECT * FROM STUDENTSWHERE (GPA >= 3.5) AND (ABSENCES < 10) ORDER BY GPA DESC, ABSENCES ASC;
Nevýhody riešenia • Nie úplne vyhovujúce radenie študentov. • Student Barry Allen má o málo horší priemer než Billy Kidd. Billy Kidd má však o mnoho horšiu docházku než Barry Allen. • Ktorý z nich je teda lepší študent? • Nie úplne vyhovujúci zoznam študentov • Zoznam neobsahuje študentov, ktorí majú študijný priemer 3.49, ale žiadnú absenciu. • Zoznam neobsahuje študenta, ktorý má študijný priemer 4.00 a má 10 absencií.
Riešenie Aplikácia fuzzy logiky
História vzniku fuzzy logiky • 1965Prof. L. A. Zadeh (Univerzity of California, Berkeley) • Prvých 10 rokov odmietavý postoj • 80-te roky vzostup • Japonsko, 1987 "Predictive Fuzzy Control" , Hitachi • 1989 inštitút LIFE (Laboratory for International Fuzzy Engineering Research) vstupný kapitál - 33 mil. dolárov • 1992 v Japonsku registrovaných viac ako 2000 fuzzy patentov.
Fuzzy množina, funkcia a stupeň príslušnosti Definícia : Nech U je množina a nech L = <1, 0> je interval. Potom fuzzy množina A na univerze U je definovaná nasledovne: A={x/μA (x)| x U, μA : U → L}, pričom μA sa nazýva funkcia príslušnosti fuzzy množiny A. Každému prvku x je priradená hodnota μA (x) L, ktorá sa nazýva stupeň príslušnosti prvku x do fuzzy množiny A. Ak μA (x)=0, potom prvok x určite nepatrí do fuzzy množiny. Ak μA (x)=1, potom prvok určite do množiny patrí. V prípade, že μA (x) {0,1} potom x čiastočne patrí do fuzzy množiny A.
Fuzzy term (výraz) • Fuzzy number • Fuzzy label
Fuzzy label (prívlastok) Energetic (rázny, energický) Membership degree 1 20 24 26 30 Age
Ďalšie fuzzy labels • starý- mladý • vysoký - nízky • blízko - ďaleko • ...
Qualifiers (jazykové operátory) • Medzi najčastejšie požívané jazykové operátory patria: • veľmi (very), • značne (highly), • viac-menej (more or less), • zhruba (roughly), • skôr (rather), • mierne (slightly).
Definícia Nech A U je fuzzy množina a nech L=<1,0> je množina, potom pre x U platí: a) koncentrácia CON(A) = CON(μA(x)) = μA(x) * μA(x) = μA(x)2, b) dilatácia DIL(A) = DIL(μA(x)) = μA(x)0.5 = 2√ μA(x) c) intenzifikácia INT(A) = INT(μA(x)) = 2 * μA(x)2 pre μA(x) <0,0.5>, INT(A) = INT(μA(x)) = 1 - 2 *(1 - μA(x))2 pre μA(x) <0.5,1>.
Modelovanie jazykových operátorov • veľmi veľmi(A) = CON(A) = μA(x)2 • značne značne(A) = μA(x)3 • viac-menej viac-menej(A) = DIL(A) = 2√μA(x) • zhruba zhruba(A) = DIL (DIL(A)) = 4√μA(x) • skôr skôr(A) = INT (CON(A)) • mierne mierne(A) = [2*(μA(x) (1- μA(x)2)] /[√(5)-1]
Operácie nad fuzzy množinami • zjednotenie (A B) x = μA(x) μB(x) = μA(x) μB(x) = max(μA(x), μB(x)) • prienik (A B) x = μA(x) μB(x) = μA(x) μB(x) = min(μA(x), μB(x)) • súčin (obmedzený, alebo odvážny prienik) (A B) x = μA(x) μA(x) = 0 (μA(x) + μB(x) - 1) • doplnok A = μA(x) = 1 - μA(x) • podmnožina A B = uA(x) μB(x),
Fuzzy logika v relačných databázových systémoch • Väčšina fuzzy databázových systémov umožňuje využívať fuzzy logiku iba pri deklarovaní dotazov. • Výsledkom takýchto dotazov je ohodnotená množina záznamov, ktorá obsahuje stĺpec (QCIX-Query Compatibility Index), ktorý určuje do akej miery daný záznam vyhovuje zadanému dotazu.
Fuzzy logika v relačných databázových systémoch (pokr.) • Niektoré databázové systémy umožňujú definovať aj atribúty ako fuzzy atribúty. • Databázový systém OMRON Fuzzy SQL umožňuje deklarovať fuzzy number (fuzzy čislo) a fuzzy label.
Fuzzy SQL Podľa prezentácie Jaroslav Tykal, Jiří Dokulil: Fuzzy SQL (zo stránky prof. Pokorného)
Dotazy • Z fuzzy predikátov a operátorov je pomocou logických spojok vytvorená podmienka WHERE • Je používaná fuzzy implementácia logických spojok • Výsledný dotaz vypadá takto: SELECT A FROM R WHERE fc • Výsledkom dotazu je fuzzy relácia Rf, ku ktorej je priradená funkcia příslušnosti (membership function) určujúca, ako jednotlivé riadky výsledku zodpovedajú podmienke fc.
Vyhodnotenie dotazu • Dotazy chceme vyhodnocovať pomocou relačnej databázy, je teda nutné previesť fuzzy reláciu na bežnú reláciu • Vykonáme λ-rez, teda vezmeme tie n-tice z Rf, pre ktoré je μRf(a)≥ λ SELECT (λ)A FROM R WHERE fc
λ-rez • Aplikácia λ-rezu na rôzne fuzzy distribúcie • (a) definícia predikátu ‘vysoký’ nad cenou produktu • (b) definícia predikátu ‘oveľa menší’ nad rozdielom dvoch atribútov
λ-rez v číslach • Vezmime fuzzy podmienku C a D(C) jej fuzzy stupeň • Následne môžeme vykonávať úpravy výrazu • D(cena=vysoka ۸ dlzka« 100)≥0,8 • min(D(cena=vysoka),D(dlzka « 100)) ≥0,8 • D(cena=vysoka)≥0,8 ۸ D(dlzka « 100) ≥0,8 • (110≤cena≤180) ۸ (dlzka – 100) ≤ -18 • Výslednú podmienku možeme relatívne jednoducho preložiť do SQL
Príklad • Obchod s vínom REGION (nazov_regionu, krajina) PRODUCENT (nazov_prod, adresa_prod, email_prod, web_prod, nazov_regionu) TYP_VINA (nazov_typu, typ, farba) VINO (nazov_vina, nazov_prod, nazov_regionu, kategoria, cru) FLASA(nazov_vina, nazov_prod, rok, dostupnost, cena) • Cudzie kľúče sú PRODUCENT: foreign key (nazov_regionu) references REGION(nazov_regionu) VINO: foreign key (nazov_prod) references PRODUCENT(nazov_prod) VINO: foreign key (nazov_typu) references TYP_VINA(nazov_typu) VINO: foreign key (nazov_regionu) references REGION(nazov_regionu) FLASA: foreign key (nazov_vina, nazov_prod) references VINO(nazov_vina, nazov_prod)
Príklad (pokr.) • Tieto tabuľky sú štrukturované tak, ako to zodpovedá relačným databázam • Zvolená implementácia bude jednoduchšia, keď to všetko bude pohromade CREATE VIEW PRODUKT (nazov_vina, rok, nazov_prod, cena, nazov_typu, farba, kategorie, nazov_regionu, vek) AS SELECT F.nazov_vina, F.rok, F.nazov_prod, F.cena, TV.nazov_typu, TV.typ, TV.farba, V.kategorie, V.nazov_regionu,($CURRENT_YEAR-L.rok) FROM FLASA F, VINO V, TYP_VINA TV WHERE V.nazov_typu=TV.nazov_typu AND L.nazov_vina=V.nazov_vina
Príklad (pokr.) • Definujeme fuzzy operátor podobnosti nad REGION.nazov_regionu a TYP_VINA.nazov_typu, ktoré reprezentujú to, že niektoré druhy vín a oblasti sú si podobné • Zadefinujeme niektoré fuzzy predikáty • Nakonec ešte zadefinujeme operátor oveľa menší než«p nad FLASA.cena
Príklad (pokr.) – zadanie dotazu • Dajme tomu, že zákazník hľadá mladé červené víno od významného výrobcu za strednú cenu, ktorá je omnoho menšia než €40 a má podobné charakteristiky ako víno z Bordeaux. • Zákazník vo formulári určí tieto požiadavky. Zároveň musí určiť hodnotu λ.
Príklad (pokr.) – vytvorenie fSQL dotazu • Ak vezmeme do úvahy, že bola zvolená hodnota λ=0.8 dostaneme tento dotaz: SELECT (0.8) * FROM PRODUKT , REGION WHERE (PRODUKT.nazov_regionu=REGION.nazov_regionu) AND (PRODUKT.nazov_regionu |sim| ‘Bordeaux’) AND (PRODUKT.nazov_prod={vyská_dolezitost}) AND (PRODUKT.cena=[stredny]) AND (PRODUKT.cena «p 40) AND (PRODUKT.vek=[mlade]) AND (PRODUKT.farba=‘červene’)
Máme určenú hodnotu λ=0.8, takže si môžeme znázorniť distribúcie pre cenu a vek Príklad (pokr.) – prevod na SQL
Príklad (pokr.) – prevod na SQL – pokračovanie • Dostávame SQL dotaz SELECT * FROM PRODUKT, REGION WHERE (PRODUKT.nazov_regionu=REGION.nazov_regionu) AND (PRODUKT.nazov_regionu IN (‘Bordeaux’, ‘Juhozapad’)) AND (PRODUKT.nazov_prod IN (‘prod1’, ‘prod2’,… ‘prodN’) AND (PRODUKT.cena BETWEEN 19 AND 31.5) AND (PRODUKT.CENA – 40 <= -18) AND (PRODUKT.vek BETWEEN 0 and 2) AND (PRODUKT.farba=‘červene’) • prod1, prod2, … prodN sú mená producentov, ktorí majú mieru príslušnosti do množiny vyská_dôležitosť väčšiu než 0.8 • Bordeaux a Juhozápad sú jediné regióny, ktorých miera podobnosti s Bordeaux je väčšia než 0.8