R中基于噪声的应用程序基于密度的空间聚类(DBSCAN)聚类


9

这个问题开始于“ 在R中聚集空间数据 ”,现在移到了DBSCAN问题。

正如对第一个问题的回答所建议的那样,我搜索了有关DBSCAN的信息并阅读了一些有关的文档。出现了新的问题。

DBSCAN需要一些参数,其中之一是“距离”。由于我的数据是三维,经度,纬度和温度,我应该使用哪个“距离”?哪个尺寸与该距离有关?我想应该是温度。如何找到R的最小距离?

另一个参数是形成聚类的最小点数。有没有找到该号码的方法?不幸的是我没有找到。

我在类似我的数据集中找不到使用dbscan的R示例,您知道有这样的示例的网站吗?因此,我可以阅读并尝试适应我的情况。

最后一个问题是我对DBSCAN的第一次R尝试(没有对先前问题的正确回答)导致内存问题。R说它不能分配向量。我从一个4 km的网格开始,该网格具有779191个点,在删除无效的SST点时,该点以大约300000行x 3列(纬度,经度和温度)结束。解决此内存问题的任何提示。它取决于我的计算机还是DBSCAN本身?

感谢您耐心阅读冗长且可能很无聊的消息以及您的帮助。


有一个专门讨论空间分析的论坛。也许在这里提到这个帖子(一定要提到你是交叉发布)。gis.stackexchange.com
罗曼·卢斯特里克(RomanLuštrik)2011年

Answers:


2

我仍然坚持这个问题。我在这里附上了R邮件列表中的一些建议(感谢Christian Hennig):

您是否考虑过fpc库中的dbscan函数,还是另外一个?该fpc::dbscan()函数没有“ distance”参数,但是有几个选项,其中之一可以解决您的内存问题(请查看“ memory”参数的文档)。

使用成千上万个点的距离矩阵是灾难(在内存方面)的秘诀。我不确定您使用的功能是否可以做到这一点,但是fpc::dbscan()可以避免。

确实fpc::dbscan()需要调整用户必须提供的常数。不幸的是,没有通用的规则来做到这一点。有必要了解常量的方法和含义,以及如何将其转化为应用程序的要求。

您可以尝试几种不同的选择,并进行一些集群验证以查看有效的方法,但是我无法通过电子邮件轻松地对此进行概括性解释。

我已经对数据进行了一些尝试,但是没有成功:

“是的,我已经尝试过从fpc进行dbscan的操作,但是仍然遇到内存问题。关于您的回答,我不确定应该查看哪个内存参数。以下是我尝试使用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()于温度值,不适用于经度/纬度,因此eps参数为0.1。由于它是网格数据集,所以任何点都被八个数据点包围,因此我认为至少有五个周围点应在可达距离之内。但是我不确定是否仅考虑温度值会得到正确的方法,也许然后我就缺少了空间信息。我应该如何处理经度和纬度数据?

尺寸为sst2:152243行x 3列“

我在这里共享此邮件,以防大家共享R和DBSCAN。再次感谢


嘿,您在哪里可以解决问题?我一直坚持类似的问题。您能分享您的想法吗?
kumar,2016年

亲爱的@kumar:我不得不回到CLARA集群方法。我无法使用DBSCAN,对不起,我无法为您提供帮助
pacomet

2

这里的问题是- [R 。为了使DBSCAN有效,您需要具有适当的索引结构(需要与您的距离相匹配)。但是R并没有真正做索引。此外,fpc软件包是DBSCAN的简约实现,仅提供了其功能的一小部分。

至于距离功能,这是您需要“领域知识”的地方。如果您具有足够灵活的DBSCAN实现(确实很容易实现,使其比更快的索引就难得多!),您应该可以任意放置。您甚至可以设置两个距离函数和epsilon值:点必须最多相距,并且温度差必须小于O(n2)10km1K.

查看“广义DBSCAN”以了解DBSCAN需要的一般原则:“邻居”概念和“核心点”(或“密度”)概念。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.