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