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

机器算法验证 r 聚类 空间的
2022-03-27 23:02:15

这个问题从“ R 中的空间数据聚类”开始,现在已经转移到 DBSCAN 问题。

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

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

另一个参数是形成集群所需的最小点数。有什么方法可以找到那个号码吗?不幸的是我还没有找到。

通过谷歌搜索,我找不到在与我类似的数据集中使用 dbscan 的 R 示例,你知道任何有此类示例的网站吗?所以我可以阅读并尝试适应我的情况。

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

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

2个回答

我仍然坚持这个问题。我从 R 邮件列表中收到了一些建议(感谢 Christian Hennig),附在此处:

您是否考虑过库fpc中的 dbscan 函数,或者是另一个函数?fpc::dbscan()函数没有“距离”参数,但有几个选项,其中一个可以解决您的内存问题(查找“内存”参数的文档)。

使用数十万点的距离矩阵是灾难的秘诀(内存方面)。我不确定您使用的功能是否这样做,但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。由于它是一个网格数据集,任何点都被八个数据点包围,所以我认为至少有 5 个周围的点应该在可达距离内。但我不确定我是否通过仅考虑温度值来获得正确的方法,也许我错过了空间信息。我应该如何处理经度和纬度数据?

尺寸为sst2:152243 行 x 3 列"

我在这里分享这些邮件信息,以防你们中的任何人都可以分享一些关于 R 和 DBSCAN 的信息。再次感谢

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

至于距离函数,这是需要您的“领域知识”的地方。如果你有足够灵活的 DBSCAN 实现(它真的很容易实现,索引让它比O(n2)更难!)您应该能够放置任意距离。您甚至可以制作两个距离函数和 epsilon 值:点数最多为10km离开,并且温差必须小于1K.

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