DBSCAN按位置和密度对数据进行聚类

时间:2016-01-25 11:54:42

标签: r machine-learning cluster-analysis data-mining dbscan

我正在使用 dbscan :: dbscan 方法,以便按位置和密度对数据进行聚类。

我的数据如下:

str(data)
'data.frame': 4872 obs. of 3 variables:
 $ price    : num ...
 $ lat      : num ...
 $ lng      : num ...

现在我正在使用以下代码:

EPS = 7
cluster.dbscan <- dbscan(data, eps = EPS, minPts = 30, borderPoints = T, 
search = "kdtree")
plot(lat ~ lng, data = data, col = cluster.dbscan$cluster + 1L, pch = 20)

但结果并不令人满意,这一点并没有真正聚集在一起。

enter image description here

我想很好地定义集群,如下所示: enter image description here

我还尝试使用决策树分类器树:树哪个更好,但我不知道它是否真的是一个很好的分类。

文件:

http://www.file-upload.net/download-11246655/file.csv.html

问题:

  • 是否有可能达到我的目的?
  • 我使用的是正确的方法吗?
  • 我应该多玩一些参数吗?如果是的话,用哪个?

2 个答案:

答案 0 :(得分:12)

这是使用全新的HDBSCAN *算法仔细基于密度的聚类的输出。

使用Haversine距离,而不是Euclidean!

它确定了一些50多个区域比周围环境更密集。在这个图中,一些集群看起来好像只有3个元素,但它们确实有更多。

enter image description here

最外面的区域,这些是完全不属于任何群集的噪音点!

(使用的参数:-verbose -dbc.in file.csv -parser.labelIndices 0,1 -algorithm clustering.hierarchical.extraction.HDBSCANHierarchyExtraction -algorithm SLINKHDBSCANLinearMemory -algorithm.distancefunction geo.LatLngDistanceFunction -hdbscan.minPts 20 -hdbscan.minclsize 20

OPTICS是另一种基于密度的算法,结果如下:

enter image description here

同样,我们有一个&#34;噪音&#34;有红点的区域根本不密集

使用的参数:-verbose -dbc.in file.csv -parser.labelIndices 0,1 -algorithm clustering.optics.OPTICSXi -opticsxi.xi 0.1 -algorithm.distancefunction geo.LatLngDistanceFunction -optics.minpts 25

此数据集的OPTICS图如下所示:

enter image description here

您可以看到有许多小山谷与群集相对应。但是没有&#34;大&#34;结构在这里。

你可能正在寻找这样的结果:

enter image description here

但事实上,这是一种毫无意义的而非随机方式将数据分成大块。当然,它可以最大限度地减少差异;但它根本不关心数据的结构一个群集中的点数通常比不同群集中的点数少。只需看看红色,橙色和紫色星团之间边界处的点。

最后但并非最不重要的是,老朋友:完全联系的层次聚类:

enter image description here

和树形图:

enter image description here

(使用的参数:-verbose -dbc.in file.csv -parser.labelIndices 0,1 -algorithm clustering.hierarchical.extraction.SimplifiedHierarchyExtraction -algorithm AnderbergHierarchicalClustering -algorithm.distancefunction geo.LatLngDistanceFunction -hierarchical.linkage CompleteLinkageMethod -hdbscan.minclsize 50

还不错。完整的链接也可以很好地处理这些数据。但您可以合并或拆分任何这些集群。

答案 1 :(得分:1)

您可以使用名为Hullplot的内容 在您的情况下

hullplot(select(data, lng, lat), cluster.dbscan$cluster)