我仍然坚持这个问题。我在这里附上了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。再次感谢