我仍然坚持这个问题。我从 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 的信息。再次感谢