Agrupación espacial basada en densidad de aplicaciones con agrupación de ruido (DBSCAN) en R

9

esta pregunta comenzó como " Agrupación de datos espaciales en R " y ahora se ha movido a la pregunta DBSCAN.

Como sugirieron las respuestas a la primera pregunta, busqué información sobre DBSCAN y leí algunos documentos sobre. Han surgido nuevas preguntas.

DBSCAN requiere algunos parámetros, uno de ellos es "distancia". Como mis datos son tridimensionales, longitud, latitud y temperatura, ¿qué "distancia" debo usar? ¿Qué dimensión está relacionada con esa distancia? Supongo que debería ser la temperatura. ¿Cómo encuentro esa distancia mínima con R?

Otro parámetro es el número mínimo de puntos necesarios para formar un grupo. ¿Hay algún método para encontrar ese número? Lamentablemente no he encontrado.

Buscando en Google no pude encontrar un ejemplo de R para usar dbscan en un conjunto de datos similar al mío, ¿conoces algún sitio web con este tipo de ejemplos? Entonces puedo leer e intentar adaptarme a mi caso.

La última pregunta es que mi primer intento de R con DBSCAN (sin una respuesta adecuada a las preguntas anteriores) resultó en un problema de memoria. R dice que no puede asignar el vector. Comienzo con una cuadrícula espaciada de 4 km con 779191 puntos que termina en aproximadamente 300000 filas x 3 columnas (latitud, longitud y temperatura) al eliminar puntos SST no válidos. Cualquier sugerencia para abordar este problema de memoria. ¿Depende de mi computadora o de DBSCAN?

Gracias por la paciencia para leer un mensaje largo y probablemente aburrido y por su ayuda.

pacomet
fuente
Hay un foro dedicado al análisis espacial. Tal vez mencione esta publicación allí (asegúrese de mencionar que está realizando publicaciones cruzadas). gis.stackexchange.com
Roman Luštrik

Respuestas:

2

Todavía estoy atrapado con este problema. He recibido algunas sugerencias de la lista de correo R (gracias a Christian Hennig) que adjunto aquí:

¿Has considerado la función dbscan en la biblioteca fpc , o fue otra? La fpc::dbscan()función no tiene un parámetro de "distancia" sino varias opciones, una de las cuales puede resolver su problema de memoria (consulte la documentación del parámetro "memoria").

El uso de una matriz de distancia para cientos de miles de puntos es una receta para el desastre (en cuanto a memoria). No estoy seguro de si la función que utilizó hizo eso, pero fpc::dbscan()puedo evitarlo.

Es cierto que fpc::dbscan()requiere constantes de ajuste que el usuario debe proporcionar. Desafortunadamente no hay una regla general sobre cómo hacer esto; sería necesario comprender el método y el significado de las constantes, y cómo esto se traduce en los requisitos de su aplicación.

Puede probar varias opciones diferentes y hacer una validación de clúster para ver qué funciona, pero no puedo explicar esto en términos generales fácilmente por correo electrónico.

He hecho algunos intentos con mis datos pero sin ningún éxito:

"Sí, he intentado dbscan desde fpc pero todavía estoy atascado en el problema de memoria. Con respecto a su respuesta, no estoy seguro de qué parámetro de memoria debería mirar. A continuación se muestra el código que probé con los parámetros de dbscan, tal vez pueda A ver si hay algún error.

> 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

En este ejemplo, solo se aplica dbscan()a valores de temperatura, no a lon / lat, por lo que el epsparámetro es 0.1. Como se trata de un conjunto de datos en cuadrícula, cualquier punto está rodeado por ocho puntos de datos, entonces pensé que al menos 5 de los puntos circundantes deberían estar dentro de la distancia de alcance. Pero no estoy seguro de estar obteniendo el enfoque correcto al solo considerar el valor de temperatura, tal vez luego me falta información espacial. ¿Cómo debo tratar con los datos de longitud y latitud?

Las dimensiones de sst2son: 152243 filas x 3 columnas "

Comparto estos mensajes de correo aquí en caso de que alguno de ustedes pueda compartir algo de luz sobre R y DBSCAN. Gracias de nuevo

pacomet
fuente
oye donde pudiste resolver el problema? Me he quedado con problemas similares. ¿puedes por favor compartir tus pensamientos?
kumar
Estimado @kumar, tuve que volver a los métodos de clúster CLARA. No pude usar DBSCAN, lo siento, no puedo ayudarte
pacomet
2

El problema aquí es con R . Para que DBSCAN sea efectivo, debe tener una estructura de índice adecuada (que debe coincidir con su distancia). Sin embargo, R realmente no hace indexación. Además, el paquete fpc es una implementación minimalista de DBSCAN, que solo ofrece una pequeña parte de su funcionalidad.

En cuanto a la función de distancia, aquí es donde se necesita su "conocimiento de dominio". Si tiene una implementación DBSCAN lo suficientemente flexible (es realmente fácil de implementar, ¡el índice para hacerlo más rápido que es mucho más difícil!) Debería poder colocar una distancia arbitraria. Incluso puede hacer que las dos funciones de distancia y los valores de épsilon: los puntos deben estar como máximo a distancia, y la diferencia de temperatura debe ser inferior a10 k m 1 K .O(n2)10km1K.

Mire "DBSCAN generalizado" para conocer los principios generales que necesita DBSCAN: una noción de "vecindario" y una noción de "puntos centrales" (o "densidad").

HA SALIDO - Anony-Mousse
fuente