Phân cụm không gian dựa trên mật độ của các ứng dụng có phân cụm tiếng ồn (DBSCAN) trong R


9

câu hỏi này bắt đầu là " Phân cụm dữ liệu không gian trong R " và bây giờ đã chuyển sang câu hỏi DBSCAN.

Khi trả lời cho câu hỏi đầu tiên, tôi đã tìm kiếm thông tin về DBSCAN và đọc một số tài liệu về. Những câu hỏi mới đã nảy sinh.

DBSCAN yêu cầu một số tham số, một trong số đó là "khoảng cách". Vì dữ liệu của tôi là ba chiều, kinh độ, vĩ độ và nhiệt độ, tôi nên sử dụng "khoảng cách" nào? kích thước nào có liên quan đến khoảng cách đó? Tôi cho rằng nó nên là nhiệt độ. Làm thế nào để tôi tìm thấy khoảng cách tối thiểu như vậy với R?

Một tham số khác là số điểm tối thiểu được neded để tạo thành một cụm. Có phương pháp nào để tìm số đó không? Thật không may, tôi đã không tìm thấy.

Tìm kiếm thorugh Google Tôi không thể tìm thấy ví dụ R để sử dụng dbscan trong bộ dữ liệu tương tự như của tôi, bạn có biết trang web nào có loại ví dụ như vậy không? Vì vậy, tôi có thể đọc và cố gắng thích nghi với trường hợp của tôi.

Câu hỏi cuối cùng là lần thử R đầu tiên của tôi với DBSCAN (không có câu trả lời thích hợp cho các câu hỏi trước) đã dẫn đến một vấn đề về bộ nhớ. R nói rằng nó không thể phân bổ vector. Tôi bắt đầu với lưới cách nhau 4 km với 779191 điểm kết thúc ở khoảng 300000 hàng x 3 cột (vĩ độ, kinh độ và nhiệt độ) khi xóa các điểm SST không hợp lệ. Bất kỳ gợi ý để giải quyết vấn đề bộ nhớ này. Nó phụ thuộc vào máy tính của tôi hoặc trong chính DBSCAN?

Cảm ơn sự kiên nhẫn để đọc một tin nhắn dài và có lẽ nhàm chán và sự giúp đỡ của bạn.


Có một diễn đàn dành riêng cho phân tích không gian. Có thể đề cập đến bài đăng này ở đó (hãy chắc chắn đề cập rằng bạn đang đăng chéo). gis.stackexchange.com
Roman Luštrik

Câu trả lời:


2

Tôi vẫn bị mắc kẹt với vấn đề này. Tôi đã nhận được một số đề xuất từ ​​danh sách gửi thư R (nhờ Christian Hennig) mà tôi đính kèm ở đây:

Bạn đã xem xét hàm dbscan trong thư viện fpc hay là một hàm khác? Các fpc::dbscan()chức năng không có một "khoảng cách" tham số nhưng một vài lựa chọn, một trong số đó có thể giải quyết vấn đề bộ nhớ của bạn (tìm kiếm các tài liệu của tham số "bộ nhớ").

Sử dụng ma trận khoảng cách cho hàng trăm ngàn điểm là một công thức cho thảm họa (trí nhớ khôn ngoan). Tôi không chắc liệu chức năng mà bạn sử dụng có làm điều đó không, nhưng fpc::dbscan()có thể tránh được không.

Đúng là fpc::dbscan()yêu cầu điều chỉnh hằng số mà người dùng phải cung cấp. Thật không may, không có quy tắc chung làm thế nào để làm điều này; cần phải hiểu phương thức và ý nghĩa của các hằng số, và làm thế nào điều này chuyển thành các yêu cầu của ứng dụng của bạn.

Bạn có thể thử một số lựa chọn khác nhau và thực hiện một số xác thực cụm để xem những gì hoạt động, nhưng tôi không thể giải thích điều này một cách dễ dàng qua email.

Tôi đã thực hiện một số nỗ lực với dữ liệu của mình nhưng không thành công:

"Có, tôi đã thử dbscan từ fpc nhưng tôi vẫn gặp vấn đề về bộ nhớ. Về câu trả lời của bạn, tôi không chắc nên xem tham số bộ nhớ nào. Sau đây là mã tôi đã thử với các tham số dbscan, có lẽ bạn có thể xem có sai sót gì không

> 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

Trong ví dụ này tôi chỉ áp dụng dbscan()cho các giá trị nhiệt độ, không phải lon / lat, vì vậy epstham số là 0,1. Vì nó là tập dữ liệu có sẵn, bất kỳ điểm nào được bao quanh bởi tám điểm dữ liệu, sau đó tôi nghĩ rằng ít nhất 5 điểm xung quanh phải nằm trong khoảng cách có thể tiếp cận. Nhưng tôi không chắc mình đang tiếp cận đúng bằng cách chỉ xem xét giá trị nhiệt độ, có thể sau đó tôi đang thiếu thông tin không gian. Làm thế nào tôi nên đối phó với dữ liệu kinh độ và vĩ độ?

Kích thước sst2là: 152243 hàng x 3 cột "

Tôi chia sẻ thư này ở đây trong trường hợp bất kỳ ai trong số bạn có thể chia sẻ một chút ánh sáng trên R và DBSCAN. Cảm ơn một lần nữa


hey, nơi bạn có thể giải quyết vấn đề? Tôi đã bị mắc kẹt với các vấn đề tương tự. bạn có thể vui lòng chia sẻ suy nghĩ của bạn?
kumar

Kính gửi @kumar Tôi đã phải quay lại các phương thức cụm CLARA. Tôi không thể sử dụng DBSCAN, tôi xin lỗi tôi không thể giúp bạn
pacomet

2

Vấn đề ở đây là với R . Để DBSCAN có hiệu quả, bạn cần có một cấu trúc chỉ mục phù hợp (cần phải phù hợp với khoảng cách của bạn). R tuy nhiên không thực sự lập chỉ mục. Ngoài ra, gói fpc là một triển khai tối thiểu của DBSCAN, chỉ cung cấp một phần nhỏ chức năng của nó.

Đối với chức năng khoảng cách, đây là lúc "kiến thức miền" của bạn là cần thiết. Nếu bạn có một triển khai DBSCAN đủ linh hoạt (thực sự dễ thực hiện, thì chỉ mục để làm cho nó nhanh hơn khó hơn nhiều!) Bạn có thể đặt trong một khoảng cách tùy ý. Bạn thậm chí có thể tạo hai hàm khoảng cách và giá trị epsilon: các điểm phải xa tối đa và chênh lệch nhiệt độ phải nhỏ hơn10 k m 1 K .O(n2)10km1K.

Nhìn vào "DBSCAN tổng quát" để biết các nguyên tắc chung mà DBSCAN cần: một khái niệm "vùng lân cận" và khái niệm "điểm cốt lõi" (hoặc "mật độ").

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.