我正在使用 DBSCAN 库从一组数据中提取集群。到目前为止,我已经使用 Apache Common Math 和 WEKA 库测试了 DBSCAN。(我的问题不在于哪些库可用于 DBSCAN 的实现)
到目前为止,我已经了解到在 DBSCAN 中有 3 种类型的点(根据维基百科):核心点、(密度)可达点和异常值。我的问题是我需要提取集群及其边界点或其密度可达点。
你知道任何允许我提取每个集群的密度可达点的 DBSCAN 库吗?
我正在使用 DBSCAN 库从一组数据中提取集群。到目前为止,我已经使用 Apache Common Math 和 WEKA 库测试了 DBSCAN。(我的问题不在于哪些库可用于 DBSCAN 的实现)
到目前为止,我已经了解到在 DBSCAN 中有 3 种类型的点(根据维基百科):核心点、(密度)可达点和异常值。我的问题是我需要提取集群及其边界点或其密度可达点。
你知道任何允许我提取每个集群的密度可达点的 DBSCAN 库吗?
在 ELKI 实现中,您可以使用选项
-algorithm clustering.gdbscan.GeneralizedDBSCAN -gdbscan.core-model
得到一个只包含集群核心点的集群“模型”。集群成员仍然是边界点 - 密度可达,但不是核心。但是,这需要更多内存,因此默认情况下不启用。
在此图像中,内部凸包仅是核心点。对于绿色集群,只有两个核心点。对于噪声点,显然没有嵌套簇。
请注意,DBSCAN 集群可以是非凸的。这就是为什么绿色簇可以在红色簇的凸包内有核心点的原因。并非内壳内的每个点都是核心点。甚至在红色集群内部还有一个噪声点,这不是错误 - 数据集太稀疏,它与这个 epsilon 和 minPts 有太多的局部密度变化。这个噪声点附近的任何一点都不能是核心点;但是内凸包的任何一点都是肯定的。
这些Cluster
对象将为您提供完整的点列表,而不仅仅是凸包。核心点可通过集群访问CoreObjectsModel
。只有可视化代码使用凸包以避免图像过于混乱。此外,默认输出编写器当前不输出此信息。您将需要使用 Java,或者编写自定义ResultHandler
程序以根据需要输出数据,或者甚至在 ELKI 中完成所有操作。
请注意,边界点、噪声点和核心点之间的区别被认为是过时的,并且在较新的文献中没有得到理论模型的很好支持。