Grupowanie przestrzenne w oparciu o gęstość aplikacji z klastrowaniem hałasu (DBSCAN) w R


9

pytanie to zaczęło się jako „ klastrowanie danych przestrzennych w R ”, a teraz zostało przeniesione do pytania DBSCAN.

Ponieważ odpowiedzi na pierwsze pytanie sugerowały, że szukałem informacji o DBSCAN i czytałem kilka dokumentów na ten temat. Pojawiły się nowe pytania.

DBSCAN wymaga pewnych parametrów, jednym z nich jest „odległość”. Ponieważ moje dane są trójwymiarowe, długość, szerokość i temperatura, jakiej „odległości” powinienem użyć? który wymiar jest związany z tą odległością? Podejrzewam, że powinna to być temperatura. Jak znaleźć tak minimalną odległość za pomocą R?

Kolejnym parametrem jest minimalna liczba punktów potrzebnych do utworzenia klastra. Czy istnieje metoda znalezienia tego numeru? Niestety nie znalazłem.

Przeszukując Google, nie mogłem znaleźć R dla przykładu użycia dbscan w zbiorze danych podobnym do mojego, czy znasz jakieś strony z tego rodzaju przykładami? Więc mogę czytać i próbować dostosować się do mojej sprawy.

Ostatnie pytanie brzmi: moja pierwsza próba R z DBSCAN (bez poprawnej odpowiedzi na poprzednie pytania) spowodowała problem z pamięcią. R mówi, że nie może przydzielić wektora. Zaczynam od siatki o odległości 4 km z 779191 punktami, która kończy się w przybliżeniu 300000 rzędów x 3 kolumny (szerokość, długość i temperatura) podczas usuwania nieważnych punktów SST. Wszelkie wskazówki dotyczące rozwiązania tego problemu z pamięcią. Czy to zależy od mojego komputera, czy od samej DBSCAN?

Dziękujemy za cierpliwość, aby przeczytać długą i prawdopodobnie nudną wiadomość oraz za pomoc.


Istnieje forum poświęcone analizie przestrzennej. Może wspomnij o tym wpisie (pamiętaj, że piszesz krzyżowo). gis.stackexchange.com
Roman Luštrik

Odpowiedzi:


2

Nadal tkwię z tym problemem. Otrzymałem kilka sugestii z listy mailingowej R (dzięki Christianowi Hennigowi), które załączam tutaj:

Czy zastanawiałeś się nad funkcją dbscan w bibliotece fpc , czy może była to kolejna funkcja ? Ta fpc::dbscan()funkcja nie ma parametru „odległość”, ale kilka opcji, z których jedna może rozwiązać problem z pamięcią (sprawdź dokumentację parametru „pamięć”).

Wykorzystanie macierzy odległości dla setek tysięcy punktów jest receptą na katastrofę (pod względem pamięci). Nie jestem pewien, czy funkcja, której użyłeś, to zrobiła, ale fpc::dbscan()mogę tego uniknąć.

To prawda, że fpc::dbscan()wymaga strojenia, które użytkownik musi podać. Niestety nie ma ogólnej zasady, jak to zrobić; konieczne byłoby zrozumienie metody i znaczenia stałych oraz tego, w jaki sposób przekłada się to na wymagania twojej aplikacji.

Możesz wypróbować kilka różnych opcji i przeprowadzić walidację klastra, aby zobaczyć, co działa, ale nie mogę tego łatwo wyjaśnić ogólnie w wiadomości e-mail.

Zrobiłem kilka prób z moimi danymi, ale bez powodzenia:

„Tak, próbowałem dbscan z fpc, ale nadal tkwi w problemie z pamięcią. Jeśli chodzi o twoją odpowiedź, nie jestem pewien, który parametr pamięci powinienem sprawdzić. Poniżej znajduje się kod, który wypróbowałem z parametrami dbscan, może możesz sprawdź, czy jest jakaś pomyłka.

> sstdat=read.csv("sst.dat",sep=";",header=F,col.names=c("lon","lat","sst"))
> library(fpc)
> sst1=subset(sstdat, sst<50)
> sst2=subset(sst1, lon>-6)
> sst2=subset(sst2, lon<40)
> sst2=subset(sst2, lat<46)
> dbscan(sst2$sst, 0.1, MinPts = 5, scale = FALSE, method = c("hybrid"), 
         seeds = FALSE, showplot = FALSE, countmode = NULL)
Error: no se puede ubicar un vector de tamaño  858.2 Mb
> head(sst2)
             lon   lat   sst
1257 35.18 24.98 26.78
1258 35.22 24.98 26.78
1259 35.27 24.98 26.78
1260 35.31 24.98 26.78
1261 35.35 24.98 26.78
1262 35.40 24.98 26.85

W tym przykładzie mam zastosowanie tylko dbscan()do wartości temperatur, a nie lon / lat, więc epsparametr wynosi 0,1. Ponieważ jest to siatkowy zestaw danych, każdy punkt jest otoczony ośmioma punktami danych, dlatego pomyślałem, że co najmniej 5 otaczających punktów powinno znajdować się w odległości zasięgu. Ale nie jestem pewien, czy stosuję właściwe podejście, biorąc pod uwagę tylko temperaturę, może wtedy brakuje mi informacji przestrzennej. Jak postępować z danymi dotyczącymi długości i szerokości geograficznej?

Wymiary sst2to: 152243 rzędy x 3 kolumny ”

Udostępniam tutaj te wiadomości e-mail na wypadek, gdyby ktokolwiek z was mógł podzielić się nieco informacjami na temat R i DBSCAN. Dzięki jeszcze raz


hej, gdzie możesz rozwiązać problem? Utknąłem z podobnymi problemami. czy możesz podzielić się swoimi przemyśleniami?
kumar

Drogi @ kumar, musiałem wrócić do metod klastrowych CLARA. Nie mogłem użyć DBSCAN, przepraszam, nie mogę ci pomóc
pacomet

2

Problem polega na tym ze R . Aby DBSCAN był skuteczny, musisz mieć odpowiednią strukturę indeksu (która musi pasować do twojej odległości). R jednak tak naprawdę nie wykonuje indeksowania. Dodatkowo pakiet fpc jest minimalistyczną implementacją DBSCAN, oferującą jedynie niewielką część jego funkcjonalności.

Jeśli chodzi o funkcję odległości, to tutaj potrzebna jest „wiedza o domenie”. Jeśli masz wystarczająco elastyczną implementację DBSCAN (jest to naprawdę łatwe do wdrożenia, indeks, aby uczynić ją szybszą niżO(n2))jest o wiele trudniejsze!) powinieneś być w stanie pokonać dowolną odległość. Możesz nawet ustawić dwie funkcje odległości i wartości epsilon: punkty muszą być co najwyżej10km z dala, a różnica temperatur musi być mniejsza niż 1K..

Spójrz na „Uogólnioną DBSCAN” po ogólne zasady, których potrzebuje DBSCAN: pojęcie „sąsiedztwa” i pojęcie „głównych punktów” (lub „gęstości”).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.