Klasterisasi spasial berbasis aplikasi dengan noise (DBSCAN) clustering di R


9

pertanyaan ini dimulai dengan " Mengelompokkan data spasial dalam R " dan sekarang telah pindah ke pertanyaan DBSCAN.

Sebagai tanggapan terhadap pertanyaan pertama yang disarankan saya mencari informasi tentang DBSCAN dan membaca beberapa dokumen tentang. Pertanyaan baru telah muncul.

DBSCAN membutuhkan beberapa parameter, salah satunya adalah "jarak". Karena data saya tiga dimensi, bujur, lintang dan suhu, "jarak" mana yang harus saya gunakan? dimensi mana yang terkait dengan jarak itu? Saya kira seharusnya suhu. Bagaimana cara menemukan jarak minimum dengan R?

Parameter lain adalah jumlah minimum poin yang ditetapkan untuk membentuk sebuah cluster. Apakah ada metode untuk menemukan nomor itu? Sayangnya saya belum menemukan.

Mencari melalui Google saya tidak bisa menemukan contoh R untuk menggunakan dbscan dalam dataset yang mirip dengan saya, apakah Anda tahu situs web dengan contoh seperti itu? Jadi saya bisa membaca dan mencoba beradaptasi dengan kasus saya.

Pertanyaan terakhir adalah bahwa upaya R pertama saya dengan DBSCAN (tanpa jawaban yang tepat untuk pertanyaan sebelumnya) menghasilkan masalah memori. R mengatakan itu tidak dapat mengalokasikan vektor. Saya mulai dengan kisi spasi 4 km dengan 779191 poin yang berakhir pada sekitar 300.000 baris x 3 kolom (lintang, bujur dan suhu) saat melepas titik SST yang tidak valid. Ada petunjuk untuk mengatasi masalah memori ini. Apakah itu tergantung pada komputer saya atau di DBSCAN sendiri?

Terima kasih atas kesabarannya membaca pesan yang panjang dan mungkin membosankan serta atas bantuan Anda.


Ada forum yang didedikasikan untuk analisis spasial. Mungkin sebutkan posting ini di sana (pastikan untuk menyebutkan bahwa Anda melakukan posting silang). gis.stackexchange.com
Roman Luštrik

Jawaban:


2

Saya masih terjebak dengan masalah ini. Saya telah menerima beberapa saran dari mailing list R (terima kasih kepada Christian Hennig) yang saya lampirkan di sini:

Sudahkah Anda mempertimbangkan fungsi dbscan di library fpc , atau apakah itu fungsi lain? The fpc::dbscan()fungsi tidak memiliki "jarak" parameter tapi beberapa pilihan, salah satunya dapat mengatasi masalah memori Anda (mencari dokumentasi dari "memori" parameter).

Menggunakan matriks jarak untuk ratusan ribu titik adalah resep untuk bencana (berdasarkan ingatan). Saya tidak yakin apakah fungsi yang Anda gunakan melakukan itu, tetapi fpc::dbscan()dapat menghindarinya.

Benar bahwa fpc::dbscan()memerlukan konstanta tuning yang harus disediakan pengguna. Sayangnya tidak ada aturan umum bagaimana melakukan ini; akan perlu untuk memahami metode dan arti dari konstanta, dan bagaimana ini diterjemahkan ke dalam persyaratan aplikasi Anda.

Anda dapat mencoba beberapa pilihan berbeda dan melakukan beberapa validasi cluster untuk melihat apa yang berhasil, tetapi saya tidak dapat menjelaskan ini secara umum dengan mudah melalui email.

Saya telah melakukan beberapa upaya dengan data saya tetapi tidak berhasil:

"Ya, saya sudah mencoba dbscan dari fpc tapi saya masih terjebak pada masalah memori. Mengenai jawaban Anda, saya tidak yakin parameter memori mana yang harus saya perhatikan. Berikut adalah kode yang saya coba dengan parameter dbscan, mungkin Anda bisa lihat apakah ada kesalahan.

> 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

Dalam contoh ini saya hanya berlaku dbscan()untuk nilai suhu, bukan lon / lat, jadi epsparameternya adalah 0,1. Karena ini adalah data grid, setiap titik dikelilingi oleh delapan titik data, maka saya berpikir bahwa setidaknya 5 titik di sekitarnya harus berada dalam jarak jangkauan. Tapi saya tidak yakin saya mendapatkan pendekatan yang tepat dengan hanya mempertimbangkan nilai suhu, mungkin kemudian saya kehilangan informasi spasial. Bagaimana saya harus berurusan dengan data bujur dan lintang?

Dimensi sst2adalah: 152243 baris x 3 kolom "

Saya membagikan pesan email ini di sini kalau-kalau ada yang bisa berbagi sedikit tentang R dan DBSCAN. Terima kasih lagi


hei di mana Anda dapat memecahkan masalah? Saya terjebak dengan masalah serupa. bisakah kamu membagikan pemikiranmu?
kumar

Dear @kumar saya harus kembali ke metode cluster CLARA. Saya tidak bisa menggunakan DBSCAN, maaf saya tidak bisa membantu Anda
pacomet

2

Masalahnya di sini adalah dengan R . Agar DBSCAN menjadi efektif, Anda harus memiliki struktur indeks yang sesuai (yang harus sesuai dengan jarak Anda). Namun R tidak benar-benar melakukan pengindeksan. Selain itu, paket fpc adalah implementasi DBSCAN yang minimalis, hanya menawarkan sebagian kecil dari fungsinya.

O(n2)10km1K.

Lihatlah "Generalized DBSCAN" untuk prinsip-prinsip umum yang dibutuhkan DBSCAN: gagasan "lingkungan" dan gagasan "titik inti" (atau "kepadatan").

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.