610 likes | 757 Views
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
E N D
Fuzzy SQL Jaroslav Tykal, Jiří Dokulil
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
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;
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;
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;
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í.
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
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.
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
Funkce příslušnosti • Pro „dobrý prospěch“
Funkce příslušnosti • Pro „dobrou absenci“
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“
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“.
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é
„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
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
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
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
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))
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
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
λ-ř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ů
λ-ř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
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)
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
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
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 λ.
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é’)
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
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
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í
Ú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
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))) υ υ
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
Ř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 …)
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
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
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.
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))
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
Čá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
Čá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
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
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ů)
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