Плотностная пространственная кластеризация приложений с кластеризацией шума (DBSCAN) в R


9

Этот вопрос начинался как « Кластеризация пространственных данных в R », а теперь перешел к вопросу DBSCAN.

Поскольку ответы на первый вопрос подсказали, я искал информацию о DBSCAN и прочитал несколько документов о. Новые вопросы возникли.

DBSCAN требует некоторых параметров, одним из которых является «расстояние». Как мои данные являются трехмерными, долгота, широта и температура, какое «расстояние» я должен использовать? какое измерение связано с этим расстоянием? Я полагаю, это должна быть температура. Как мне найти такое минимальное расстояние с R?

Другим параметром является минимальное количество точек, необходимых для формирования кластера. Есть ли способ найти это число? К сожалению, я не нашел.

Поиск в Google Я не смог найти пример R для использования dbscan в наборе данных, похожем на мой, знаете ли вы какой-либо веб-сайт с такими примерами? Поэтому я могу читать и пытаться приспособиться к своему делу.

Последний вопрос заключается в том, что моя первая попытка R с DBSCAN (без правильного ответа на предыдущие вопросы) привела к проблеме с памятью. R говорит, что не может выделить вектор. Я начинаю с разнесенной на 4 км сетки с 779191 точками, которая заканчивается при удалении недопустимых точек SST приблизительно 300000 строк x 3 столбца (широта, долгота и температура). Любой намек на решение этой проблемы с памятью. Зависит ли это от моего компьютера или от самого 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 (это действительно легко реализовать, индекс сделать его быстрее, чем намного сложнее!), Вы должны быть в состоянии поместить на произвольное расстояние. Вы даже можете сделать это двумя функциями расстояния и значениями эпсилона: точки должны находиться на расстоянии не более , а разница в температуре должна быть не менее10 к т 1 К .O(n2)10km1K.

Посмотрите на «Обобщенный DBSCAN» для общих принципов, которые нужны DBSCAN: понятие «соседство» и понятие «основные точки» (или «плотность»).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.