R'de gürültü (DBSCAN) kümelemesi olan uygulamaların yoğunluk tabanlı uzamsal kümelenmesi


9

Bu soru " R'deki uzamsal verileri kümeleme " olarak başladı ve şimdi DBSCAN sorusuna taşındı.

İlk soruya verilen yanıtların önerdiği gibi, DBSCAN hakkında bilgi aradım ve hakkında bazı belgeleri okudum. Yeni sorular ortaya çıktı.

DBSCAN bazı parametreler gerektirir, bunlardan biri "mesafe" dir. Verilerim üç boyutlu, boylam, enlem ve sıcaklık olduğundan, hangi "mesafeyi" kullanmalıyım? hangi boyut bu mesafeyle ilişkilidir? Sanırım sıcaklık olmalı. R ile bu kadar minimum mesafeyi nasıl bulabilirim?

Başka bir parametre, bir küme oluşturmak için oluşturulan minimum nokta sayısıdır. Bu numarayı bulmak için herhangi bir yöntem var mı? Ne yazık ki bulamadım.

Google'da arama Yapma Benimkine benzer bir veri kümesinde dbscan kullanmak için bir R örneği bulamadım, bu tür örneklere sahip herhangi bir web sitesi biliyor musunuz? Böylece okuyabilir ve durumuma uyum sağlamaya çalışabilirim.

Son soru, DBSCAN ile ilk R girişimimin (önceki sorulara uygun bir cevap olmadan) bir hafıza problemine yol açmasıdır. R vektörü ayıramadığını söylüyor. Geçerli SST noktalarını kaldırırken yaklaşık 300000 satır x 3 sütun (enlem, boylam ve sıcaklık) ile biten 779191 noktalı 4 km aralıklı bir ızgara ile başlıyorum. Bu bellek sorununa yönelik herhangi bir ipucu. Bilgisayarıma veya DBSCAN'ın kendisine mi bağlı?

Uzun ve muhtemelen sıkıcı bir mesaj okuduğunuz için teşekkür ederiz.


Mekansal analize adanmış bir forum var. Belki bu yazıyı orada belirtin (çapraz gönderi yaptığınızdan emin olun). gis.stackexchange.com
Roman Luštrik

Yanıtlar:


2

Hala bu problemle sıkışıp kaldım. Buraya eklediğim R posta listesinden (Christian Hennig sayesinde) bazı öneriler aldım:

Eğer kütüphane içinde dbscan fonksiyon düşündünüz mü FPC , yoksa başka bir oldu? fpc::dbscan()Fonksiyonu ( "hafıza" parametresinin belgelerine bakmak) bellek sorunu çözebilir biri bir "mesafe" parametresi ama çeşitli seçenekler, yok.

Yüz binlerce nokta için bir mesafe matrisi kullanmak felaket için bir reçetedir (bellek açısından). Kullandığınız işlevin bunu yapıp yapmadığından emin değilim, ancak bundan fpc::dbscan()kaçınabilir.

fpc::dbscan()Kullanıcının sağlaması gereken sabitleri ayarlamayı gerektiren doğrudur . Ne yazık ki bunun nasıl yapılacağı konusunda genel bir kural yoktur; sabitlerin yöntemini ve anlamını ve bunun başvurunuzun gereksinimlerine nasıl dönüştüğünü anlamak gerekli olacaktır.

Neyin işe yaradığını görmek için birkaç farklı seçenek deneyebilir ve küme doğrulaması yapabilirsiniz, ancak bunu genel olarak e-posta yoluyla kolayca açıklayamam.

Verilerimle bazı girişimlerde bulundum ancak başarılı olamadım:

"Evet, fpc den dbscan denedim ama hala bellek sorunu üzerinde sıkışmış. Cevabınızla ilgili olarak, hangi bellek parametresine bakmalıyım emin değilim. Aşağıdaki dbscan parametreleri ile denedim kodu, belki sen bir hata olup olmadığına bakın.

> 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

Bu örnekte yalnız dbscan()/ lat değil, sadece sıcaklık değerlerine uygulanır , bu nedenle epsparametre 0.1'dir. Izgaralı bir veri seti olduğu için herhangi bir nokta sekiz veri noktasıyla çevrilidir, o zaman çevreleyen noktalardan en az 5'inin ulaşılabilirlik mesafesi içinde olması gerektiğini düşündüm. Ama sadece sıcaklık değerini göz önünde bulundurarak doğru yaklaşımı aldığımdan emin değilim, belki o zaman mekânsal bilgiyi kaçırıyorum. Boylam ve enlem verileriyle nasıl başa çıkmalıyım?

Boyutları sst2: 152243 satır x 3 sütun "

Herhangi birinizin R ve DBSCAN üzerinde biraz ışık paylaşması durumunda bu posta mesajlarını burada paylaşıyorum. Tekrar teşekkürler


hey nerede sorunu çözmek mümkün? Ben benzer sorunlarla takıldım. lütfen düşüncelerinizi paylaşabilir misiniz?
kumar

Sevgili @kumar CLARA küme yöntemlerine geri dönmek zorunda kaldım. DBSCAN kullanamadım, üzgünüm sana yardım edemem
pacomet

2

Buradaki sorun ile Ar . DBSCAN'ın etkili olabilmesi için, uygun bir dizin yapısına (mesafenizle eşleşmesi gerekir) sahip olmanız gerekir. Ancak R gerçekten indeksleme yapmaz. Ek olarak, fpc paketi, işlevselliğinin sadece küçük bir kısmını sunan DBSCAN'ın minimalist bir uygulamasıdır.

Mesafe işlevine gelince, "etki alanı bilginize" ihtiyaç duyduğunuz yer burasıdır. Yeterince esnek bir DBSCAN uygulamanız varsa (uygulamak gerçekten kolaydır, den daha hızlı yapmak için indeks çok daha zor!) Keyfi bir mesafeye koymanız gerekir. İki mesafe fonksiyonu ve epsilon değeri bile yapabilirsiniz: noktalar en fazla uzaklıkta olmalı ve sıcaklık farkı az olmalıdırO(n2)10km1K.

DBSCAN'ın ihtiyaç duyduğu genel ilkeler için "Genelleştirilmiş DBSCAN" a bakın: "mahalle" kavramı ve "çekirdek noktalar" (veya "yoğunluk") kavramı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.