Просторове кластеризація додатків на основі щільності додатків із кластеризацією шуму (DBSCAN) в R


9

це питання почалося як " Кластеризація просторових даних у R " і тепер перейшло до питання DBSCAN.

Оскільки відповіді на перше запитання запропонували, я шукав інформацію про DBSCAN та читав деякі документи. Виникли нові запитання.

DBSCAN вимагає деяких параметрів, один з них - "відстань". Оскільки мої дані є тривимірними, довготою, широтою та температурою, яку "відстань" я повинен використовувати? який вимір пов'язаний з цією відстані? Я думаю, що це повинна бути температура. Як знайти таку мінімальну відстань за допомогою R?

Ще один параметр - мінімальна кількість точок, необхідних для формування кластера. Чи є якийсь спосіб знайти це число? На жаль, я не знайшов.

Шукаючи Thorugh Google, я не міг знайти приклад R для використання dbscan у наборі даних, подібних до мого, ви знаєте який-небудь веб-сайт із подібними прикладами? Тож я можу читати і намагатися адаптуватися до своєї справи.

Останнє питання полягає в тому, що моя перша спроба R з DBSCAN (без належної відповіді на попередні запитання) призвела до проблеми з пам'яттю. R каже, що не може виділити вектор. Я починаю з 4-кілометрової сітки з 779191 балами, яка закінчується приблизно в 300000 рядків x 3 стовпчики (широта, довгота та температура) при видаленні недійсних точок SST. Будь-який натяк на вирішення цієї проблеми з пам'яттю. Це залежить від мого комп'ютера чи від самого DBSCAN?

Дякуємо за терпіння, щоб прочитати довге і, мабуть, нудне повідомлення та за вашу допомогу.


Існує форум, присвячений просторовому аналізу. Можливо, згадайте цю публікацію там (не забудьте зазначити, що ви перехресне повідомлення). gis.stackexchange.com
Роман Луштрик

Відповіді:


2

Я все ще застряг у цій проблемі. Я отримав кілька пропозицій зі списку розсилки R (завдяки Крістіану Хеннігу), який я додаю тут:

Ви розглядали функцію dbscan у бібліотеці fpc , чи це була інша? У fpc::dbscan()функції немає параметра "відстань", але кілька варіантів, один з яких може вирішити вашу проблему пам'яті (перегляньте документацію параметра "пам'ять").

Використання дистанційної матриці для сотень тисяч балів - це рецепт катастрофи (на пам'ять). Я не впевнений, чи працювала ця функція, але fpc::dbscan()можна її уникати.

Це правда, що fpc::dbscan()потрібні константи настройки, які повинен надати користувач. На жаль, не існує загального правила, як це зробити; необхідно було б зрозуміти спосіб і значення констант, і як це перекладається на вимоги вашої заявки.

Ви можете спробувати кілька різних варіантів і зробити деяку перевірку кластерів, щоб побачити, що працює, але я не можу пояснити це в загальних рисах легко електронною поштою.

Я зробив кілька спроб зі своїми даними, але без жодного успіху:

"Так, я спробував dbscan від fpc, але я все ще застряг у проблемі пам'яті. Що стосується вашої відповіді, я не впевнений, на який параметр пам'яті слід звернути увагу. Далі йде код, який я спробував із параметрами dbscan, можливо, ви можете подивіться, чи є якась помилка.

> 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

У цьому прикладі я стосуюсь лише dbscan()температурних значень, а не lon / lat, такeps параметр дорівнює 0,1. Оскільки це набір даних з сіткою, будь-яка точка оточена вісьмома точками даних, то я подумав, що принаймні 5 навколишніх точок повинні знаходитися в межах відстані досяжності. Але я не впевнений, що я отримую правильний підхід, враховуючи лише значення температури, можливо, тоді мені не вистачає просторової інформації. Як мені поводитися з даними про довготу та широту?

Розміри sst2: 152243 рядки х 3 стовпці "

Я поділяюсь цими поштовими повідомленнями тут у випадку, якщо хтось із вас може поділитися світлом на R та DBSCAN. Знову дякую


ей, де ти зміг вирішити проблему? Я затримався з подібними питаннями. чи можете ви поділитися своїми думками?
кумар

Шановний @kumar, мені довелося повернутися до кластерних методів CLARA. Я не міг використовувати DBSCAN, вибачте, що не можу вам допомогти
pacomet

2

Проблема тут з R . Щоб DBSCAN був ефективним, вам потрібно мати відповідну структуру індексу (яка повинна відповідати вашій відстані). R, однак, не робить індексації. Крім того, пакет fpc є мінімалістичною реалізацією DBSCAN, пропонуючи лише невелику частину його функціональності.

Що стосується функції відстані, то тут потрібні ваші "знання домену". Якщо у вас досить гнучка реалізація DBSCAN (реально реалізувати її просто, індекс зробити це швидше, ніжO(n2)набагато важче!) Ви повинні мати можливість поставити на довільну відстань. Можна навіть зробити так, щоб дві функції відстані та значення epsilon: балів повинно бути не більше10km відсутня, а різниця в температурі повинна бути меншою, ніж 1K.

Подивіться на "Узагальнений DBSCAN" загальні принципи, необхідні DBSCAN: поняття "сусідство" та поняття "основні точки" (або "щільність").

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.