1 / 61

Fuzzy SQL

Fuzzy SQL. Jaroslav Tykal, Jiří Dokulil. Proč Fuzzy. Přesné vs. „nepřesné“ hodnoty Kdo má nejvyšší plat Kdo má vysoký pla t Výhody přesnosti Jednoznačná odpověď na zadanou otázku Nevýhody přesnosti Odpověď právě na to, na co js m e se ptali. Příklad . Máme

holleb
Download Presentation

Fuzzy SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fuzzy SQL Jaroslav Tykal, Jiří Dokulil

  2. Proč Fuzzy • Přesné vs. „nepřesné“ hodnoty • Kdo má nejvyšší plat • Kdo má vysoký plat • Výhody přesnosti • Jednoznačná odpověď na zadanou otázku • Nevýhody přesnosti • Odpověď právě na to, na co jsme se ptali

  3. Příklad • Máme • Databáze studentů a jejich studijní průměry • Hledáme • Dobré studenty (studenti s průměrem >= 3.5) • Dotaz • SELECT * FROM STUDENTS WHERE GPA >= 3.5;

  4. Příklad – modifikace • Máme • Databáze studentů a jejich studijní průměry • Záznamy o absenci studentů • Hledáme • Dobré studenty („dobrý student“ je student, který má GPA >= 3.5 a počet zameškaných dnů < 10) • Dotaz • SELECT * FROM STUDENTS WHERE GPA >= 3.5 AND ABSENCES < 10;

  5. Výsledek dotazu

  6. Příklad • Dále požadujeme • Setřídit tyto studenty od nejlepšího k nejhoršímu. • Zvolíme třízení podle průměru sestupně a podle absencí vzestupně. • Dotaz • SELECT * FROM STUDENTSWHERE (GPA >= 3.5) AND (ABSENCES < 10) ORDER BY GPA DESC, ABSENCES ASC;

  7. Výsledek dotazu

  8. Nevýhody řešení • Ne zcela vyhovující řazení studentů. • Student Barry Allen má o málo horší průměr než Billy Kidd. Billy Kidd má však o mnoho horší docházku než Barry Allen. • Který z nich je však lepší student? • Ne zcela vyhovující seznam studentů • Seznam neobsahuje studenty, kteří mají studijní průměr 3.49, ale žádnou absenci. • Seznam neobsahuje studenta, který má studijní průměr 4.00 a má 10 absencí.

  9. Cíl • Definovat způsob • který využije atributy GPA a ABSENCES • s jejich pomocí vytvořit hodnotu, která bude vyjadřovat „dobrého studenta“ • hodnota „dobrý student“ lépe vyjadřuje naší představu o dobrém studentovi

  10. Fuzzy množiny • Základní pojmy • Množina – výraz (např. „dobrý prospěch“), který určuje nějakou vlastnost. • Stupeň náležení – do množiny může daný prvek patřit do dané množiny. Nabývá hodnot <0, 1>. • Funkce příslušnosti – pro daný prvek vrací hodnotu stupeň náležení. • Příklad • Studenti s průměrem 4.0 budou patřit do skupiny výborný prospěch se stupněm 1. • Studenti s průměrem 3.01 budou patřit do skupiny výborný prospěch se stupněm blízkým k nule.

  11. Upravený dotaz • Definujeme množiny • Dobrý prospěch • Minimální hodnota pro náležení do množiny: 3.0 • Maximální hodnota pro náležení do množiny: 4.0 • Tvar křivky: klasické S • Dobrá absence • Minimální hodnota: 0 • Maximální hodnota: 13 • Alpha Cut: 0.1 • Tvar křivky: směr klesajícího S

  12. Funkce příslušnosti • Pro „dobrý prospěch“

  13. Funkce příslušnosti • Pro „dobrou absenci“

  14. Dotaz pomocí Fuzzy množin • Dotaz • SELECT * FROM STUDENTS WHERE (GPA is „Dobrý prospěch“) and (ABSENCES is „Dobrá absence“) • Výsledek • studenti, kteří patří do množiny „dobrý student“ • ve výsledku je sloupec, jehož hodnoty označují stupeň náležení do „dobrý student“

  15. Dotaz pomocí Fuzzy množin

  16. Poznámky • Řazení podle náležení do skupiny „dobrý student“ více odpovídá naší představě o výsledku dotazu. • Studenti, kteří jsou si bližší ve smyslu být „dobrý student“, jsou vedle sebe. • Ve výsledku jsou i studenti, kteří mají horší průměr i velkou absenci. Tito studenti však mají nízkou hodnotu náležení do skupiny a proto nemá smysl je považovat za „dobré studenty“.

  17. Aplikace v e-business • Problém prohledávání elektronických katalogů zboží • Tradiční relační databáze podporují vyhledávání na základě přesných podmínek • Jsou vráceny právě výrobky přesně odpovídající zadané podmínce • Zákazník se většinou zeptá „špatně“ • Příliš nepřesná podmínka vracející obrovský počet záznamů • Příliš detailní specifikace (ovespecification), která nic nevrátí • Nejasná představa zákazníka • Neví, jak přesně popsat, co chce • Má o tom jen nejasnou představu • „Mělo by to stát něco pod 1500“ • Má to být celkem malé

  18. „Lepší“ přístupy • Nearest-Neighbour • Metriky pro jednotlivé atributy, sloučeny váženým způsobem do výsledné podobnosti • k-NN algoritmus vrátí k nejpodobnějších • Fuzzy • Místo vzdálenosti používá přijatelnost (acceptance) • Přijatelnost má obvykle tvar nějaké fuzzy distribuce • Kombinace lokálních přijatelností probíhá pomocí fuzzy operátorů, tedy má bohatší možnosti než NN. • Výsledná hodnota přijatelnosti určí, jestli má být výrobek zobrazen zákazníkovi • Umožňuje přiřadit výrobkům fuzzy atributy

  19. Jeden konkrétní systém • Cíle • Využití existujících relačních databází • Data už v nich bývají uložena • Jsou již dobře zažité, odladěné a vyspělé • Umožní mimo jiné efektivní práci nad velmi rozsáhlými daty • Při použití rozšíření jazyka SQL bude možné dotazy v něm zapsané převést na běžné SQL, které tak bude efektivně vyhodnoceno • Jazyk fSQL

  20. Architektura systému

  21. Reprezentace dat • Atributy výrobků jsou uloženy v relační databázi, takže jsou „normální“, tedy ne fuzzy množiny • Nad nimi jsou definovány fuzzy predikáty • Fuzzy predikát nad spojitou doménou • Fuzzy predikát nad diskrétní doménou • Spojitá distribuce nad uspořádanou doménou • Diskrétní distribuce nad neuspořádanou množinou • Nad těmito predikáty můžou být definovány fuzzy operátory • Spojité fuzzy operátory • Spojitá fuzzy distribuce nad funkcí operandů (např. jejich rozdílem) • Diskrétní fuzzy operátory • Podobnost definovaná pomocí matice podobnosti

  22. Dotazy • Z fuzzy predikátů a operátorů je pomocí logických spojek vytvořena podmínka WHERE. • Je používána fuzzy implementace logických spojek • Výsledný dotaz vypadá takto: SELECT A FROM R WHERE fc

  23. Spojky • Negace • Realizováno jako doplněk do jedné • μnot A(x)=1-μA(x) • Konjunkce • Minimum z obou ohodnocení • μA۸B(x)=min(μA(x), μB(x)) • Disjunkce • Maximum z obou ohodnocení • μA٧B(x)=max(μA(x), μB(x))

  24. Výsledek dotazu SELECT A FROM R WHERE fc • Výsledkem dotazu je fuzzy relace Rf, ke které je přiřazena funkce příslušnosti (membership function) určující, jak jednotlivé řádky výsledku odpovídají podmínce fc. μRf(a)=sup(xєR)۸(x.A=a)μfc(x) • Význam: Projekce na sloupce A může způsobit, že jeden řádek výsledku vznikne z více řádků R. Takovému řádku je přidělena největší hodnota členství ze všech odpovídajících řádků R

  25. Vyhodnocení dotazu • Dotazy chceme vyhodnocovat pomocí relační databáze, je tedy nutné převést fuzzy relaci na běžnou relaci • Provedeme λ-řez, tedy vezmeme ty n-tice z Rf, pro které je μRf(a)≥ λ SELECT (λ)A FROM R WHERE fc

  26. λ-řez • Aplikace λ-řezu na různé fuzzy distribuce • (a) definice predikátu ‘vysoký’ nad cenou produktu • (b) definice predikátu ‘mnohem menší’ nad rozdílem dvou atributů

  27. λ-řez v číslech • Vezměme fuzzy podmínku C a D(C) její fuzzy stupeň • Pak lze provádět úpravy výrazu • D(cena=vysoká ۸ délka «100)≥0,8 • min(D(cena=vysoká),D(délka « 100)) ≥0,8 • D(cena=vysoká)≥0,8 ۸ D(délka «100) ≥0,8 • (110≤cena≤180) ۸ (délka – 100) ≤ -18 • Tuto podmínku lze již snadno přeložit do SQL

  28. Konkrétní příklad • Obchod s vínem REGION (jméno_regionu, země) PRODUCENT (jméno_prod, adresa_prod, email_prod, web_prod, jméno_regionu) TYP_VÍNA (jméno_typu, typ, barva) VÍNO (jméno_vína, jméno_prod, jméno_typu, jméno_regionu, kategorie, cru) LÁHEV (jméno_vína, jméno_prod, rok, dostupnost, cena) • Cizí klíče jsou PRODUCENT: foreign key (jméno_regionu) references REGION(jméno_regionu) VÍNO: foreign key (jméno_prod) references PRODUCENT(jméno_prod) VÍNO: foreign key (jméno_typu) references TYP_VÍNA(jméno_typu) VÍNO: foreign key (jméno_regionu) references REGION(jméno_regionu) LÁHEV: foreign key (jméno_vína,jméno_prod) references VÍNO(jméno_vína, jméno_prod)

  29. Konkrétní příklad – pokračování • Tyto tabulky jsou strukturované tak, jak to odpovídá relačním databázím • Zvolená implementace fuzzy dotazů si však lépe poradí, když je to vše pohromadě • CREATE VIEW PRODUKT (jméno_vína, rok, jméno_prod, cena, jméno_typu, barva, kategorie, jméno_regionu, věk) AS SELECT L.jméno_vína, L.rok, L.jméno_prod, L.cena, TV.jméno_typu, TV.typ, TV.barva, V.kategorie, V.jméno_regionu,($CURRENT_YEAR-L.rok) FROM LÁHEV L, VÍNO V, TYP_VÍNA TV WHERE V.jméno_typu=TV.jméno_typu AND L.jméno_vína=V.jméno_vína

  30. Konkrétní příklad - fuzzy • Dále definujeme fuzzy operátor podobnosti nad REGION.jméno_regionu a TYP_VÍNA.jméno_typu, které elegantně reprezentují to, že některé druhy vín a oblasti jsou si podobné • Definujeme také některé fuzzy predikáty • Nakonec ještě definujeme z dřívějška známý operátor mnohem menší než«p nad LÁHEV.cena

  31. Konkrétní příklad – zadání dotazu • Dejme tomu, že zákazník hledá mladé červené víno od významného výrobce za středí cenu, která je mnohem menší než €40 a má podobné charakteristiky jako víno z Bordeaux. • Zákazník v nějakém formuláři určí tyto požadavky. Dále je potřeba určit hodnotu λ.

  32. Konkrétní příklad – vytvoření fSQL dotazu • Vezmeme-li, že byla zvolena hodnota λ=0.8 dostaneme tento dotaz: SELECT (0.8) * FROM PRODUKT , REGION WHERE (PRODUKT.jméno_regionu=REGION.jméno_regionu) AND (PRODUKT.jméno_regionu |sim| ‘Bordeaux’) AND (PRODUKT.jméno_prod={vyská_důležitost}) AND (PRODUKT.cena=[střední]) AND (PRODUKT.cena «p 40) AND (PRODUKT.věk=[mladé]) AND (PRODUKT.barva=‘červené’)

  33. Konkrétní příklad – převod na SQL • Máme určenou hodnotu λ=0.8, takže si můžeme znázornit distribuce pro cenu a věk

  34. Konkrétní příklad – převod na SQL - pokračování • Dostáváme SQL dotaz SELECT * FROM PRODUKT, REGION WHERE (PRODUKT.jméno_regionu=REGION.jméno_regionu) AND (PRODUKT.jméno_regionu IN (‘Bordeaux’, ‘Jihozápad’)) AND (PRODUKT.jméno_prod IN (‘prod1’, ‘prod2’,… ‘prodN’) AND (PRODUKT.cena BETWEEN 19 AND 31.5) AND (PRODUKT.CENA – 40 <= -18) AND (PRODUKT.věk BETWEEN 0 and 2) AND (PRODUKT.barva=‘červené’) • prod1, prod2, … prodN jsou právě jména producentů, kteří mají míru příslušnosti do množiny vyská_důležitost větší než 0.8 • Bordeaux a Jihozápad jsou jediné regiony, jejichž míra podobnosti s Bordeaux je větší než 0.8

  35. Jiné implementace fuzzy SQL • Samozřejmě existují i jiné možnosti, jak přidat fuzzy logiku do SQL • Základ bývá stejný, ale pokročilejší funkce různé • Podívejme se na některé zajímavějšírozšíření

  36. Úvodem pár drobností • Protože každému řádku výsledku je přiřazena míra splnění podmínky, lze snadno místo λ-řezu vracet n nejlepších kandidátů • Nad fuzzy podmínkami lze užívat další modifikátory (alteration) • verypodmínka (x)=(μpodmínka(x))2 • notpodmínka (x)=1-μpodmínka(x) • Agregační funkce – protože fuzzy relace je nakonec převedena na běžnou relaci, není problém na ní pak pustit normální agregační funkce

  37. Množinové operace nad fuzzy relacemi • union μAυB(x)=max(μA(x), μB(x)) • intesect μA B(x)=min(μA(x), μB(x)) • except μA-B(x)= μA B(x)=min(μA(x),(1-μB(x))) υ υ

  38. group by a having • V jedné z implementací bylo umožněno i použití group by a fuzzy podmínky having, ovšem pak podmínka za where musela být klasická. SELECT 10 číslo_oddělení FROM zaměstnanci WHERE zařazení=‘účetní’ GROUP BY číslo_oddělení HAVING around(avg(plat+bonus),1000) • oddělení, ve kterých účetní berou plat kolem 1000

  39. Řešní „kolizí“ při projekci • Už dříve jsme narazili na problém, že jeden řádek výsledné fuzzy relace může vzniknout díky projekci na vybrané atributy z více řádků, které mají různou míru splnění fuzzy podmínky. • Situaci lze řešit různě • neřešit a vrátit více řádků (SELECT …) • vrátit největší míru splnění (SELECT unique …) • vrátit nejmenší míru splnění (SELECT unimin …) • vrátit průměr měr (SELECT uniavg …)

  40. Neúplná informace • Mějme doménu atributu D, pak definujeme • Unknown={1/d : dєD} • Undefined={0/d : dєD} • NULL={1/Unknown, 1/Undefined} • Poznámka ke značení: a/b znamená, že b náleží do množiny se stupněm a

  41. Fuzzy operátory porovnání • Mimo klasických operátorů porovnání jako =,>,≥,… lze definovat i fuzzy verze • Navíc je možné uvažovat dvě možnosti • porovnání na možnost • porovnání na nutnost Porovnání na možnost je volnější (porovnání na nutnost vrací méně n-tic) • Příklad pro rovnost; U je doména, nad kterou je postavena fuzzy doména D, což je doména atributů A a B • možná rovnost je definována jako μA FEQ B(x)=sup min(μd(x[A]), μd(x[B])) • nutná rovnost jako μA NFEQ B(x)=inf max(1 – μd(x[A]), μd(x[B])) dєU dєU

  42. Efektivní zpracování vnořených Fuzzy SQL dotazů

  43. Fuzzy spojení • Značení • = zkoumá podobnost predikátů a vrací hodnotu z <0, 1> •  zkoumá identitu a vrací hodnoty 0 nebo 1 • Spojení R R.X=S.X S • R, S relace • X atribut, který může být hodnota nebo výraz pro fuzzy množinu • Pro libovolné r z R a s z S může být stupeň R.X = S.X, tj. d(r.X = s.X), mezi 0 a 1. • Dvojice je generována pokud d(…) > 0.

  44. Fuzzy spojení • Příklad • r.X = „kolem 30 let“, s.X „mladý“ • Osoby reprezentované r a s tedy mohou mít stejný věk • pokud se provádí spojení pouze s touto podmínkou, pak stupeň náležení bude min(R(r), S(s), d(r.X = s.X))

  45. Klasické metody pro spojení • Spojení hašováním • využívá rozdělení menší tabulky na skupiny (pomocí hašovací funkce) • bere záznamy z větší tabulky a pomocí hašovací funkce se snaží najít záznam z menší tabulky • efektivní metoda u klasického SQL, příliš se však nehodí pro Fuzzy SQL • Spojení sléváním • spojení tabulek podle sloupce, podle kterého jsou obě tabulky řazeny • modifikovaný algoritmus použijeme i pro spojení Fuzzy SQL

  46. Částečné uspořádání • fuzzy množina v reprezentuje interval [b(v), e(v)] • b(v) – začátek intervalu, e(v) – konec intervalu • jedna hodnota je definována b(v)=e(v)=v • pro n-tice r z R, s z S a X použijeme r.X a s.X k určení jejich fuzzy hodnoty. r.X  s.X reprezentuje obvyklý množinový průnik

  47. Částečné uspořádání • Definice • pro dvě hodnoty v1 a v2 definujeme • v1 < v2 jestliže (b(v1) < b(v2)) || ((b(v1)=b(v2)) && (e(v1)<e(v2))) • v1 v2 jestliže v1 < v2 && v1  v2 • pro n-tice r1 a r2 definujeme • r1 < r2 jestliže (r1.X < r2.X) • r1  r2 jestliže r1.X  r2.X

  48. Spojení sléváním - Fuzzy SQL • pomocí definovaného uspořádání můžeme získat setřízené záznamy • definice pomocných funkcí • pro n-tici r z R e sml(r) nejmenší hodnota v taková, která je v S.X a r.X  v  a lrg(r) je největší hodnota v, která je v S.X a r.X  v  • rozsah n-tice Rng(r) = {s:s S a sml(r) s.X lrg(r)}, Rng(r) = jestliže r.X  v  pro všechna v v S.X • pokud nebude s v Rng(r), pak je d(r.X = s.X) = 0

  49. Spojení sléváním - Fuzzy SQL • Průběh • načte se jedna stránka s n-ticemi r do paměti • pro každé r se berou všechna s z S, na které lze provést spojení s R (tj. s je v Rng(r)) • s jsou také seřazeny a načítány postupně • Časová složitost • záznamy jsou načítány a slévány postupně • časová složitost je lineární vzhledem k většímu počtu záznamů (stránek pro uložení záznamů)

  50. Implementace dotazů • Vybrané typy SQL dotazů • Typ [A]gregate • Typ [J]oin • Typ [N]ot join • Typ [JA] – Join, Agregate • Rozdělení na typy převzato z W.Kim, On Optimizing an SQL-Like Nested Query

More Related