Plan wykładu Przyspieszenie knn Ulepszone metody indeksowania przestrzeni danych: R-drzewo, R*-drzewo, SS-drzewo, SR-drzewo. Klasyfikacja w oparciu o przykładach Problem indeksowania przestrzeni obiektów Struktura przestrzeni obiektów R-tree Operacje na R drzewie Insert Delete Search Wyszukiwania k najbliszych ssiadów w oparciu o R- drzewie Ulepszenia Klasyfikacja w oparciu o przykładach Algorytm klasyfikacji Wejcie: Tablica decyzyjna D, nowy obiekt x q Wyjcie: Klasa decyzyjna, do której naley x q (czyli Dec(x q )) Parametry: k - liczba ssiadów, funkcja odległoci d IBL: k najbliszych ssiadów Reguły decyzyjne Krok 1: Szukaj w zbiorze D, k najbliej połoonych obiektów {x 1, x 2,..., x k } Krok 2: Wyznacz klas dla x q na podstawie Dec(x 1 ), Dec(x 2 ),..., Dec(x k ) Funkcja odległoci Problematyki zwizane z klasyfikacj w oparciu o przykładach Niech kady obiekt x bdzie zdefiniowany wektorem wartoci: <a 1 (x),...,a k (x)> Odległo Euklidesowa: d( x, y) = ( a ( x) 2 a ( y) ) i i i Funkcja odległo Szukanie k najbliszych ssiadów Strategia głosowanie Dla atrybutów symbolicznych a i : 0 ai ( x) ai ( y) = 1 a ( x) = a ( y) a ( x) a ( y) Atrybuty rzeczywiste: Unormowa i i i i 1
Wyszukiwanie k najbliszych ssiadów Tablica danych: Sekwencyjne poszukiwanie: O(n) (n liczba obiektów w zbiorze D) Strukturalny zbiór danych (indeksowany zbiór danych): Struktura: Obiekty s prezentowane jako punkty w przestrzeni R n Przestrze obiektów jest podzielona na małe fragmenty Fragmenty s zapamitane w strukturze drzewiastym Wyszukiwanie: Przegldaj drzewo i wybieraj fragmenty, gdzie mog zawiera najbliszych ssiadów dla danego obiektu Szuka w znalezionych fragmentach najbliszych ssiadów Czas wyszukiwania: O(logn) Podział przestrzeni obiektów Przestrze obiektów jest podzielona na n-wymiarowe prostokty (niekoniecznie rozłczne). Prostokty pokrywaj wszystkie obiekty w zbiorze danych Prostokty s minimalne (MBR - Minimum Bounding Rectangle) Opis prostokta: I = {[a 1, b 1 ],...,[a n, b n ]} Struktura R-drzewa Własnoci R - drzewa Drzewo zrównowaone Wzeł wewntrzny zawiera klucze (opis prostokta I) i wskaniki do synów Wzeł zewntrzny zawiera list obiektów zawierajcych si w odpowiednim prostokcie Korze ma co najmniej dwóch synów Kady wzeł wewntrzny ma pomidzy m a M synów Kady li zawiera pomidzy m a M obiektów Wszystkie licie znajduj si na jednym poziomie drzewa m: minimalna liczba rozgałzienia w wle M: maksymalna liczba rozgałzienia w wle 2 m M Wzeł przepełniony: zawiera wicej ni M rekordów (kluczy) Wzeł niedomiarowy: zawiera mniej ni m rekordów Figure 1 Collections of Rectangles Operacje na drzewie Wstawianie (insert) Usuwanie (delete) Wyszukiwanie (search) Wstawianie obiektu do drzewa Wejcie: T dane R-drzewo, x new nowy obiekt do wstawiania Wyjcie: R-drzewo T zawierajce obiekt x new 2
Wstawianie obiektu do drzewa Wejcie: T: R - drzewo, x new - obiekt do wstawiania Wyjcie: T z obiektem x new Algorytm Insert: Krok 1. Wybieraj odpowiedni li L do wstawiania x new uywajc ChooseLeaf Krok 2. Jeli jest miejsce w L, wstaw x new w L wpp. 2.1 Wstaw x new w L 2.2 Podziel L na L 1 i L 2 2.3 Modyfikuj drzewo uywajc AdjustTree Krok 3. Jeli korze musi by podzielony, utwórz nowy korze, którego synami s dwie czci poprzedniego korzenia Funkcja ChooseLeaf Wejcie: T: R - drzewo, x new - obiekt do wstawiania Wyjcie: odpowiedni li L dla x new (funkcja rekurencyjna) Krok 1. L korze(t) Krok 2. if L jest liciem return L; else // L jest wzłem wewntrznym wybierz prostokt F k L lecy najbliej obiektu x new Jeli takich jest kilka, wybierz najmniejszy prostokt Krok 3. Zastosuj ChooseLeaf dla F k Funkcja AdjustTree Zadania: Powiksza istniejce prostokty, eby zawierały nowy obiekt Podzieli due wzły na mniejsze, jeli zawieraj wicej ni M elementów Wejcie: T: drzewo, L li, od którego drzewo ma by modyfikowane Wyjcie: T spełniajce ograniczenia R-drzewa Funkcja AdjustTree Funkcja AdjustTree(L) Krok 1. ActiveNode L Krok 2. if ActiveNode jest korzeniem stop else P = ActiveNode.Parent(); Powiksz prostokt w P zwizany z ActiveNode, eby zawierał on wszystkie prostokty w ActiveNode; Krok 3. if P zawiera wicej ni M elementów SpliteNode (P); AdjustTree (P.Parent()); Funkcja Splite Funkcja Splite (c.d.) Zadanie: Podzieli przepełniony wzeł na dwa nowe wzły Kryterium: Nowe powstajce prostokty s małe Idea: Wybierz rdzenia nowych grup: wybierz dwa najdalej połoone prostokty i wstaw je do rónych wzłów Rozdziel pozostałe elementy: wstaw p do tej grupy, która wymaga najmniejszego powikszania, aby zawierała p Dobry podział Zły podział rdzenia 3
Algorytm Splite Usuwanie obiektu z drzewa Wejcie: Wzeł w zawiera M+1 elementów Wyjcie: Dwa wzły, kady zawiera pomidzy m a M elementów Krok 1: Wybierz rdzenia grup i wstaw je do dwóch nowych wzłów Krok 2: repeat przydziel elementy until wszystkie elementy s przydzielone do grup lub jedna grupa ma m (lub M+1-m) elementów Krok 3: dołcz pozostałe elementy do drugiej grupy Algorytm usuwania obiektu Wejcie:T: R - drzewo, x - obiekt do usuwania Wyjcie: T : drzewo bez x Krok 1: Szukaj licia L, który zawiera x (uywajc FindLeaf) Krok 2: Usu x z L Krok 3: Modyfikuj drzewo uywajc CondenseTree Krok 4: Jeli korze zawiera tylko jednego syna, usu stary korze, syn bdzie korzeniem. Funkcja FindLeaf Wejcie:T: R-drzewo, x: obiekt Wyjcie: li, który zawiera x Krok 1: Jeli T jest liciem zwracaj T Krok 2: Dla kadego syna T.s, jeli prostokt zawiera x to FindLeaf(T.s) Krok 3: Jeli T jest liciem, sprawd, czy w nim x wystpuje. Jeli tak, zwracaj T Funkcja CondenseTree Wyszukiwanie k najbliszych ssiadów za pomoc R- drzewa Wejcie:T: R - drzewo, L li, od którego drzewo ma by poprawione Wyjcie: T: skondensowane drzewo Krok 1: N = L; Jeli N nie jest korzeniem P = N.Parent() Krok 2: if N zawiera mniej ni m synów usu N z drzewa zapisz wszystkie elementy N na licie Q Krok 3: if N jest dobry zmniejsz prostokt w N, eby prostokt w N był MBR Krok 4: N = P; goto Krok 1 Krok 5: Wstaw wszystkie elementy Q do drzewa. 4
MBR Minimal Bounding Rectangle Własno MBR MBR jest n-wymiarowym prostoktem uywanym w R-drzewie, który ogranicza obiekty. Własno MBR: Kadaciana prostokta zawiera co najmniej jeden punkt bazy danych. Funkcje odległoci uywane do wyszukiwania k-nn MINDIST (p, R): minimalna odległo punktu p do prostokta R. MINDIST(p, R) = min o R d(p,o) Własnoci: Jeli p znajduje si wewntrz prostokta, to MINDIST(p,R) = 0 Dla kadego o D R, MINDIST(p, R) d(p,o) Funkcje odległoci uywane do wyszukiwania k-nn MINMAXDIST (p, R) jest minimalna odległo punktu p do najdalszych punktów cian prostokta R Jeli d*(p,s) oznacza odległo p do najdalszego punktu ciany S, to MINMAXDIST (p, R) = min S:ciana R d*(p,s) Własno: Istnieje obiekt w R, którego odległo do p jest mniejsza ni MINMAXDIST o D R d(p,o) MINMAXDIST(p, R) MINDIST & MINMAXDIST MINDIST(p,R) <= NN(p) <= MINMAXDIST(p,R) Algorytm szukanie najbliszego ssiada Idea: Przegldaj drzewo od korzenia w dół. Dla kadego wzła usu rozgałzienia, które nie powinny zawiera najbliszego ssiada Jeli doidziesz do licia, szukaj w nim najbliszego ssiada. 5
Usuwanie zbdnych rogałzie MINDIST vs MINMAXDIST Zasada 1: Prostokt R nie zawiera najbliszego ssiada dla p (wic bdzie usuwany) jeli istnieje prostokt R taki, e: MINDIST(p,R ) > MINMAXDIST(p,R) Zasada 2: Obiekt o nie jest najbliszym ssiadem p jeli istnieje prostokt R taki, e d(p,o) > MINIMAXDIST(p,R) Zasada 3: Prostokt R nie zawiera najbliszego ssiada punktu p jeli istnieje obiekt o taki, e MINDIST(p,R) > d(p,o) Zasada 1 Zasada 2 Zasada 3 R R p MINDIST MINMAXDIST R p d(p,o) o MINMAXDIST R MINDIST p o NN Search Algorithm Ulepszanie Krok 1: Inicjalizuj odległo do najbliszego ssiada = ; Krok 2: Obchod drzewo od korzenia w dół. Przy kadym nieodwiedzonym wle t sortuj prostokty zapisane w t rosnco wzgldem MINDIST i zapisz jego synów w licie ABL (Active Branch List) Krok 3: Usu z ABL zbdne rozgałzienia stosujc strategie przycinania 1 i 2. Krok 4: Dla kadego wzła t z ABL rekurencyjnie szukaj najbliszego ssiada p; Usu wzeł t z ABL Krok 5: Jeli wzeł jest liciem, poszukaj najbliszego ssiada. Aktualizuj odległo do najbliszego ssiada. Krok 6: Po powrocie z rekursji skorzystaj z zasady przycinania 3 w celu usunicia niezbdnych rozgałzie Krok 7: Jeli ABL = zwró najbliszego ssiada. Tylko zasada przycinania 3 jest stosowana; Tylko MINDIST jest potrzebny; Przycinanie tylko gdy nowy ssiad jest znaleziony Szukanie k najbliszych ssiadów Zapamita k aktualnych ssiadów w uporzdkowanym buforze (wg. rosncej odległoci ssiada od punktu p) Przycinanie wzgldem najdalszego punktu na licie Modyfikacje R-drzew R*- tree: Modyfikacja operacja insert, zmniejsza cz wspóln midzy regionami SS tree: przestrze obiektów jest pokryta sferami Zaleta: prostszy opis Wada: regiony zachodz si SR tree: kombinacja R-tree i SS tree X tree: regiony nie maj czsci wspólnej 6
Struktura R*-drzewa R*-drzewo Struktura i główne operacje Podobiestwo do R - drzewa: Uywa prostoktów MBR (Minimal Bounding Rectangle) do grupowania punktów w przestrzeni danych Drzewo ma wszelkie własnoci jak R-tree (ograniczenia na liczb rozgałzie,...) Rónica: ulepszony wariant R-drzewa Minimalizuje czci wspólne midzy prostoktami (regionami) na jednym poziomie drzewa Minimalizuje pola (objtoci) prostoktów (regionów) Minimalizuje wielko drzewa Struktura R* - drzewa (c.d.)- Modyfikacje Modyfikacja operacji Insert: Optymalna heurystyka podziału wzła (inna kryterium oceny jakoci podziału) Nowa operacja do rekonstrukcji drzewa: wymuszone wstawianie (forced re-insert) Podstawowe oznaczenia Pole prostokta (objto prostopadłocianu): area(r) Obwód prostokta (powierzchnia prostopadłocianu): margin(r) Pokrycie (overlap): prostoktami w wle t: p gdzie R 1, R 2,...,R p s rekordami wzła t ( R. Rectangle R Rectangle ) overlap ( Rk ) = area k i. i= 1, k i Pojcia podstawowe Ilustracja Podstawowe operacje na prostoktach Powikszanie prostokta: (enlargement(r,x)) Zwiksza prostokt R minimalnie, eby pokrywa obiekt x Area(R) Margin(R) x R Enlargement(R,x) overlap(r) 7
Podstawowe operacje na drzewach Wstawianie (insert) Usuwanie (delete) Wyszukiwanie (search) Wstawianie Ogólny schemat: Szukaj licia do wstawiania (ChooseLeaf(x) ) Wstaw nowy obiekt Modyfikuj drzewo ChooseLeaf Idea Przegldaj drzewo top-down: W kadym wle wewntrznym: wybierz poddrzewo zawierajce prostokt, który wymaga najmniejszego powikszenia, eby pokrywa nowy obiekt W kadym wle zewntrznym (li): wybierz prostokt, który po powikszaniu ma najmniejsze pokrycie (overlap) z innymi prostoktami tego samego licia ChooseLeaf Ilustracja (7,5;70) (7,5;70) (7,5;70) Li znaleziony przez R * drzewo Li znaleziony przez R drzewo Funkcja ChooseLeaf Wejcie: T: R* - drzewo, x - obiekt do wstawiania Wyjcie: odpowiedni li L dla x Krok 1. L korze(t) Krok 2. if L jest liciem wybierz prostokt R taki, e enlargement (R,x) ma najmniejsz cz wspóln z innymi prostoktami w tym liciu; else // L jest wzłem wewntrznym wybierz syna S, który jest zwizany z prostoktem R o najmniejszym enlargement (R,x) Krok 3. Zastosuj ChooseLeaf dla S Modyfikuj drzewo Ogólny schemat Jeli li L nie jest przepełniony to Powiksz prostokt w L, do którego nowy obiekt był wstawiany Rekurencyjnie powiksz wszystkie prostokty w przodkach L, eby zawierały prostokty w liciu L. Jeli li L jest przepełniony to Podziel li L na 2 licie L 1 i L 2 lub Wykonuj re-insert dla czci prostoktów w L W sposób rekurencyjny modyfikuj ojca L 8
Podzieli przepełniony wzeł - Idea Krok 1: Wybierz o S, wzgldem której podział ma by wykonywany Krok 2: Wybierz na osi S najlepszy podział Krok 3: Podziel obiekty Oceny jakoci podziału Niech P oznacza podział zbioru prostoktów S na dwa rozłczne podzbiory S 1 i S 2 bb(s i ): najmniejszy prostokt zawierajcy S i area-value(p) = area[bb(s 1 )] + area[bb(s 2 )] margin-value(p) = margin[bb(s 1 )] + margin[bb(s 2 )] overlap-value(p) = area[bb(s 1 ) bb(s 2 )] Podział P jest dobry, jeli wartoci area, margin i overlap s małe Algorytm wyboru osi Krok 1: Dla kadej osi X Uporzdkuj prostokty wzgldem X Oblicz warto margin-value(x): suma margin-value wszystkich podziałów na X Krok 2: Wybierz o o najmniejszej wartoci margin-value margin-value(x) = = margin-value(p 1 )+margin-value(p 2 )+margin-value(p 3 ) Algorytm wyboru miejsca podziału Dla wybranej osi X Dla kadego podziału P na X oblicz overlap-value(p) Wybierz podział o najmniejszej wartoci overlap-value Jeli istnieje kilka podziałów o najmniejszej wartoci overlapvalue, wybierz ten z najmniejsz area-value R 4 R 1 R 2 R 3 P 1 P 2 P 3 X P 1 P 2 P 3 overlap-value(p 2 ) Rekonstrukcja drzewa W R-drzewie: regiony s niezmienne podczas wstawiania obiektu (chyba e jest podzielony na dwa regiony); Wstawianie z rekonstrukcj - Ilustracja m = 2, M = 5 Wada: utworzone na pocztku prostokty s optymalne dla pierwszych obiektów, ale nie s optymalne dla nowych wstawianych obiektów Potrzeba narzdzi do rekonstrukcji drzewa R*-tree proponuje operacj wymuszonego wstawiania (forced reinsert) Regiony przed wstawianiem R drzewo: regiony po wstawianiu R* -drzewo: regiony po wstawianiu 9
Idea algorytmu reinsert (Przy wstawianiu nowego obiektu) Jeli wzeł t jest przepełniony (ma M+1 synów) i t nie był reorganizowany to Krok 1: wytnij p synów wzła t Krok 2: zmniejsz prostokt w t tak, eby nadal zawierał pozostałych synów Krok 3: wstaw z powrotem prostokty zwizane z wybranymi synami. Algorytm reinsert Dla przepełnionego wzła t (ma M+1 synów): Krok 1: Dla kadego syna s, oblicz odległo rodka prostokta zwizanego z s do rodka prostokta w t Krok 2: Uporzdkuj malejco synów wzgldem odległoci od swojego rodka do rodka prostokta w t Krok 3: Wybierz p pierwszych synów na licie Krok 4: Usu je i zmniejsz prostokt w t Krok 5: Wstaw z powrotem p usunitych prostoktów Reinsert - Ilustracja Ocena R * -drzewa R*- drzewo jest stabilny wobec złoliwych danych redni koszt wstawiania i usuwania na R*- drzewie jest niszy ni na R- drzewie Czas wyszukiwania jest szybszy ni na R- drzewie Regiony przed operacj reinsert Obiekty wybrane do ponownego wstawiania, p=3 Regiony po operacji reinsert Struktura SS-drzewo SS-drzewo Struktura i główne operacje Podobna struktura do R-drzewa Regiony s kołami Opis regionu: para (rodek, promie) rodek:rodek cikoci figury tworzonej przez rodki kół zapisanych w synach promie: odległo do najdalszego koła zapisanego w synach. 10
Struktura SS-drzewo Algorytm Insert Krok 1. Szukaj licia L do wstawiania Krok 2. Wstaw nowy obiekt x do L Krok 3. Modyfikuj drzewo (*od licia L do korzenia*) 3.1 Jeli zbadany wzeł t nie jest przepełniony Powiksz promie w t 3.2 Jeli wzeł t jest przepełniony i t nie był rekonstruowany re-insert (t) 3.3 Jeli t jest przepełniony i t był rekonstruowany splite (t) Algorytm podziału: Splite Cel: Podziel zbiór kół na dwa podzbiory, których koła ograniczajce maj małe promienie i jak najmniej zachodz si na siebie Krok 1: Wybierz o S, wzgldem której podział ma by wykonywany Krok 2: Wybierz na osi S najlepszy podział Krok 3: Podziel obiekty Ocena podziału Niech X bdzie osi współrzdnych Niech S bdzie zbiorem kół variance(s,x) = odległo midzy rodkami dwóch najdalszych kół na osi X Niech P oznacza podział zbioru kół S na dwa rozłczne podzbiory S 1 i S 2 variance(p) = variance(s 1 )+variance(s 2 ) Podział P jest dobry jeli variance(p) jest minimalny Wybór osi Szukanie miejsca podziału Dla kadej osi X Uporzdkuj koła wzgldem X Oblicz odległo najdalszych koł na osi X. ozn. variance(x) Wybierz o z najwiksz wartoci variance Dla wybranej osi X Dla kadego podziału P na X oblicz variance(p) Wybieraj podział o najmniejszej wartoci variance najlepszy podział variance(x) X P 1 P 2 P 3 X 11
Ocena SS -drzewa Zaleta: Mała informacja potrzebna do opisu koła ni prostokata rednica koła zwiksza si do wolno wzgldem wzrostu wymiaru danych (liczby atrybutów) szybki czas wyszukiwania w jednym regionie. Wada: Koło ma wiksz objto ni prostokt wiksza cz wspólna z innymi kołami (more overlap) SR-drzewo Struktura i główne operacje Obserwacja Prostokty dziel przestrze danych na regiony o małej objtoci, ale maj one du rednic ni koło Koła dziel przestrze danych na regiony o małej rednicy, ale ich objtoci s wiksze ni prostokty Rozwizanie: kombinacja prostoktów i kół SR - drzewo Struktura SR - drzewa Podobna struktura do R-drzewa Region jest przeciciem koła i prostokta Opis regionu: para (prostokt, koło) Prostokt : I =[(a 1,b 1 ),...,(a k,b k )] Koło: (rodek, promie) Algorytm: Insert Prostokt jest aktualizowany tak jak w R*- drzewie Koło wle t jest aktualizowane: (C 1,...,C k koła zwizane z synami t ) rodek: Algorytm Insert (c.d.) Promie: d s : maksymalna odległo rodka koła w wle t do kół w synach d r : maksymalna odległo rodka koła w wle t do prostoktów w synach gdzie C i : koło zwizane z i-tym synem C i.x i : i-ta współrzdna rodka koła C i C i.w: liczba obiektów zawartych w kole C i rodek koła Promie r 12
Szukanie najbliszego ssiada Odległo d punktu P do regionu zapisanego w wle C k jest definiowana: d s. : minimalna odległo punktu P do koła w wle C k d r : minimalna odległo punktu P do prostokta w wle C k x d r d s P Ocena SR-drzewa Zaleta: Zmniejsza i objto i rednic regionu w porównaniu z R*-drzewem i SS-drzewem Czas wyszukiwania krótszy ni SS-drzewo i R*- drzewo Wada: Koszt budowania SR-drzewa jest wikszy ni SSdrzewa. Rozmiar wzła wikszy od rozmiaru wzła SSdrzewa i R*-drzewa d = max(d s.,d r ) Podsumowanie R*-drzewo: ulepszony wariant R-drzewa Nowa heurystyka dla optymalizacji podziału -> modyfikacja w funkcji splite Nowa operacja rekonstrukcji drzewa: re-insert SS-drzewo: regiony s kołami SR-drzewo: regiony s przecicem prostokta i koła 13