Cluster espacial baseado em densidade de aplicativos com cluster DBSCAN (RBS) em R


9

esta pergunta começou como " Agrupando dados espaciais em R " e agora foi movida para a pergunta DBSCAN.

Como as respostas à primeira pergunta sugeriram, procurei informações sobre o DBSCAN e li alguns documentos sobre. Novas questões surgiram.

O DBSCAN requer alguns parâmetros, um deles é "distância". Como meus dados são tridimensionais, longitude, latitude e temperatura, qual "distância" devo usar? qual dimensão está relacionada a essa distância? Suponho que deve ser a temperatura. Como encontro essa distância mínima com R?

Outro parâmetro é o número mínimo de pontos necessários para formar um cluster. Existe algum método para encontrar esse número? Infelizmente não encontrei.

Pesquisando através do Google, não consegui encontrar um exemplo de R para usar o dbscan em um conjunto de dados semelhante ao meu. Você conhece algum site com esse tipo de exemplo? Para que eu possa ler e tentar me adaptar ao meu caso.

A última pergunta é que minha primeira tentativa de R com DBSCAN (sem uma resposta adequada às perguntas anteriores) resultou em um problema de memória. R diz que não pode alocar vetor. Começo com uma grade espaçada de 4 km com 779191 pontos que termina em aproximadamente 300000 linhas x 3 colunas (latitude, longitude e temperatura) ao remover pontos SST não válidos. Qualquer dica para resolver esse problema de memória. Depende do meu computador ou do próprio DBSCAN?

Agradecemos a paciência em ler uma mensagem longa e provavelmente chata e por sua ajuda.


Existe um fórum dedicado à análise espacial. Talvez mencione este post (não se esqueça de mencionar uma postagem cruzada). gis.stackexchange.com
Roman Luštrik

Respostas:


2

Eu ainda estou preso com esse problema. Recebi algumas sugestões da lista de discussão R (graças a Christian Hennig) que anexo aqui:

Você considerou a função dbscan na biblioteca fpc ou era outra? A fpc::dbscan()função não possui um parâmetro "distance", mas várias opções, uma das quais pode resolver seu problema de memória (consulte a documentação do parâmetro "memory").

Usar uma matriz de distância para centenas de milhares de pontos é uma receita para o desastre (em memória). Não tenho certeza se a função que você usou fez isso, mas fpc::dbscan()pode evitá-la.

É verdade que fpc::dbscan()requer constantes de ajuste que o usuário precisa fornecer. Infelizmente, não existe uma regra geral de como fazer isso; seria necessário entender o método e o significado das constantes e como isso se traduz nos requisitos do seu aplicativo.

Você pode tentar várias opções diferentes e fazer alguma validação de cluster para ver o que funciona, mas não posso explicar isso em termos gerais facilmente por email.

Fiz algumas tentativas com meus dados, mas sem sucesso:

"Sim, eu tentei o dbscan do fpc, mas ainda estou preso ao problema de memória. Em relação à sua resposta, não tenho certeza de qual parâmetro de memória devo procurar. A seguir está o código que tentei com os parâmetros do dbscan, talvez você possa veja se há algum erro.

> 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

Neste exemplo, eu me aplico apenas dbscan()a valores de temperatura, e não lon / lat, então o epsparâmetro é 0,1. Como é um conjunto de dados em grade, qualquer ponto é cercado por oito pontos, então pensei que pelo menos 5 dos pontos circundantes deveriam estar dentro da distância de alcance. Mas não tenho certeza se estou obtendo a abordagem correta, considerando apenas o valor da temperatura, talvez então esteja perdendo informações espaciais. Como devo lidar com dados de longitude e latitude?

As dimensões de sst2são: 152243 linhas x 3 colunas "

Compartilho essas mensagens de correio aqui, caso algum de vocês possa compartilhar alguma luz sobre o R e o DBSCAN. obrigado novamente


ei, onde você é capaz de resolver o problema? Eu fiquei com problemas semelhantes. você pode compartilhar seus pensamentos?
kumar

Caro @kumar, tive que voltar aos métodos de cluster CLARA. Eu não poderia usar DBSCAN, Me desculpe, eu não posso te ajudar
pacomet

2

O problema aqui é com R . Para que o DBSCAN seja eficaz, você precisa ter uma estrutura de índice apropriada (que precise corresponder à sua distância). R, no entanto, realmente não faz indexação. Além disso, o pacote fpc é uma implementação minimalista do DBSCAN, oferecendo apenas uma pequena parte de sua funcionalidade.

Quanto à função de distância, é aqui que o seu "conhecimento de domínio" é necessário. Se você tem uma implementação DBSCAN flexível o suficiente (é realmente fácil de implementar, o índice para torná-lo mais rápido que é muito mais difícil!), Você deve poder colocar uma distância arbitrária. Você pode fazer até duas funções de distância e valores de épsilon: os pontos devem estar no máximo a e a diferença de temperatura deve ser menor queO(n2)10km1K.

Veja em "Generalized DBSCAN" os princípios gerais de que o DBSCAN precisa: uma noção de "vizinhança" e uma noção de "pontos centrais" (ou "densidade").

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.