HDBSCAN
词汇表
- 有向
-
有向特性。算法在有向图上定义良好。
- 有向
-
有向特性。算法忽略图的方向。
- 有向
-
有向特性。算法不在有向图上运行。
- 无向
-
无向特性。算法在无向图上定义良好。
- 无向
-
无向特性。算法忽略图的无向性。
- 异构节点
-
异构节点完全支持。算法能够区分不同类型的节点。
- 异构节点
-
异构节点允许。算法无论标签如何,都将所有选定节点视为相似。
- 异构关系
-
异构关系完全支持。算法能够区分不同类型的关系。
- 异构关系
-
异构关系允许。算法无论类型如何,都将所有选定关系视为相似。
- 加权关系
-
加权特性。算法支持使用关系属性作为权重,通过 relationshipWeightProperty 配置参数指定。
- 加权关系
-
加权特性。算法将每个关系视为同等重要,忽略任何关系权重的值。
简介
HDBSCAN,全称 Hierarchical Density-Based Spatial Clustering of Applications with Noise(带噪声的基于密度的分层空间聚类),是一种用于识别数据集中相似数据点簇的聚类算法。它建立在 DBSCAN 算法的基础上,但增加了分层结构,使其对数据中不同的密度更加稳健。
与 DBSCAN 不同,HDBSCAN 不需要调整特定的密度参数;相反,它在一系列参数上运行 DBSCAN,创建簇的层次结构。这种分层方法使得 HDBSCAN 能够找到不同密度的簇,并能更好地适应真实世界的数据。
HDBSCAN 以其易用性、噪声容忍度和处理不同密度数据的能力而闻名,使其成为聚类任务的多功能工具,尤其是在处理复杂、高维数据集时。
有关此算法的更多信息,请参阅
语法
CALL gds.hdbscan.stream(
graphName: String,
configuration: Map
)
YIELD
nodeId: Integer,
label: Integer
名称 | 类型 | 默认 | 可选 | 描述 |
---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
configuration |
映射 |
|
是 |
算法特定和/或图过滤的配置。 |
名称 | 类型 | 默认 | 可选 | 描述 |
---|---|---|---|---|
字符串列表 |
|
是 |
使用给定的节点标签过滤命名图。将包含具有任何给定标签的节点。 |
|
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。将包含具有任何给定类型的关系。 |
|
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
一个 ID,可以提供此 ID 以更轻松地跟踪算法的进度。 |
|
布尔值 |
|
是 |
如果禁用,则不会记录进度百分比。 |
|
nodeProperty |
字符串 |
|
否 |
对应于 HDBSCAN 用于计算簇的浮点数组的节点属性。 |
minClusterSize |
整数 |
|
是 |
簇应包含的最小节点数。 |
samples |
整数 |
|
是 |
计算节点核心距离时要考虑的邻居数量。 |
leafSize |
整数 |
|
是 |
支持树数据结构的叶节点数。 |
名称 | 类型 | 描述 |
---|---|---|
nodeId |
整数 |
节点 ID。 |
label |
整数 |
标签 ID,如果节点被认为是 |
CALL gds.hdbscan.stats(
graphName: String,
configuration: Map
)
YIELD
nodeCount: Integer,
numberOfClusters: Integer,
numberOfNoisePoints: Integer,
preProcessingMillis: Integer,
computeMillis: Integer,
postProcessingMillis: Integer,
configuration: Map
名称 | 类型 | 默认 | 可选 | 描述 |
---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
configuration |
映射 |
|
是 |
算法特定和/或图过滤的配置。 |
名称 | 类型 | 默认 | 可选 | 描述 |
---|---|---|---|---|
字符串列表 |
|
是 |
使用给定的节点标签过滤命名图。将包含具有任何给定标签的节点。 |
|
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。将包含具有任何给定类型的关系。 |
|
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
一个 ID,可以提供此 ID 以更轻松地跟踪算法的进度。 |
|
布尔值 |
|
是 |
如果禁用,则不会记录进度百分比。 |
|
nodeProperty |
字符串 |
|
否 |
对应于 HDBSCAN 用于计算簇的浮点数组的节点属性。 |
minClusterSize |
整数 |
|
是 |
簇应包含的最小节点数。 |
samples |
整数 |
|
是 |
计算节点核心距离时要考虑的邻居数量。 |
leafSize |
整数 |
|
是 |
支持树数据结构的叶节点数。 |
名称 | 类型 | 描述 |
---|---|---|
nodeCount |
整数 |
算法运行的节点数。 |
numberOfClusters |
整数 |
算法找到的簇数。 |
numberOfNoisePoints |
整数 |
算法找到的噪声点数。 |
preProcessingMillis |
整数 |
预处理数据所用的毫秒数。 |
computeMillis |
整数 |
运行算法所用的毫秒数。 |
postProcessingMillis |
整数 |
计算百分位数和社区计数所用的毫秒数。 |
configuration |
映射 |
用于运行算法的配置。 |
CALL gds.hdbscan.mutate(
graphName: String,
configuration: Map
)
YIELD
nodeCount: Integer,
numberOfClusters: Integer,
numberOfNoisePoints: Integer,
preProcessingMillis: Integer,
computeMillis: Integer,
postProcessingMillis: Integer,
mutateMillis: Integer,
nodePropertiesWritten: Integer,
configuration: Map
名称 | 类型 | 默认 | 可选 | 描述 |
---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
configuration |
映射 |
|
是 |
算法特定和/或图过滤的配置。 |
名称 | 类型 | 默认 | 可选 | 描述 |
---|---|---|---|---|
mutateProperty |
字符串 |
|
否 |
要写入簇的 GDS 图中的节点属性。 |
字符串列表 |
|
是 |
使用给定的节点标签过滤命名图。 |
|
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。 |
|
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
一个 ID,可以提供此 ID 以更轻松地跟踪算法的进度。 |
|
nodeProperty |
字符串 |
|
否 |
对应于 HDBSCAN 用于计算簇的浮点数组的节点属性。 |
minClusterSize |
整数 |
|
是 |
簇应包含的最小节点数。 |
samples |
整数 |
|
是 |
计算节点核心距离时要考虑的邻居数量。 |
leafSize |
整数 |
|
是 |
支持树数据结构的叶节点数。 |
名称 | 类型 | 描述 |
---|---|---|
nodeCount |
整数 |
算法运行的节点数。 |
numberOfClusters |
整数 |
算法找到的簇数。 |
numberOfNoisePoints |
整数 |
算法找到的噪声点数。 |
preProcessingMillis |
整数 |
预处理数据所用的毫秒数。 |
computeMillis |
整数 |
运行算法所用的毫秒数。 |
mutateMillis |
整数 |
向投影图添加属性的毫秒数。 |
postProcessingMillis |
整数 |
计算百分位数和社区计数所用的毫秒数。 |
nodePropertiesWritten |
整数 |
添加到投影图的属性数量。 |
configuration |
映射 |
用于运行算法的配置。 |
CALL gds.hdbscan.write(
graphName: String,
configuration: Map
)
YIELD
nodeCount: Integer,
numberOfClusters: Integer,
numberOfNoisePoints: Integer,
preProcessingMillis: Integer,
computeMillis: Integer,
postProcessingMillis: Integer,
writeMillis: Integer,
nodePropertiesWritten: Integer,
configuration: Map
名称 | 类型 | 默认 | 可选 | 描述 |
---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
configuration |
映射 |
|
是 |
算法特定和/或图过滤的配置。 |
名称 | 类型 | 默认 | 可选 | 描述 |
---|---|---|---|---|
字符串列表 |
|
是 |
使用给定的节点标签过滤命名图。将包含具有任何给定标签的节点。 |
|
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。将包含具有任何给定类型的关系。 |
|
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
一个 ID,可以提供此 ID 以更轻松地跟踪算法的进度。 |
|
布尔值 |
|
是 |
如果禁用,则不会记录进度百分比。 |
|
整数 |
|
是 |
用于将结果写入 Neo4j 的并发线程数。 |
|
字符串 |
|
否 |
要写入簇的 Neo4j 数据库中的节点属性。 |
|
nodeProperty |
字符串 |
|
否 |
对应于 HDBSCAN 用于计算簇的浮点数组的节点属性。 |
minClusterSize |
整数 |
|
是 |
簇应包含的最小节点数。 |
samples |
整数 |
|
是 |
计算节点核心距离时要考虑的邻居数量。 |
leafSize |
整数 |
|
是 |
支持树数据结构的叶节点数。 |
名称 | 类型 | 描述 |
---|---|---|
nodeCount |
整数 |
算法运行的节点数。 |
numberOfClusters |
整数 |
算法找到的簇数。 |
numberOfNoisePoints |
整数 |
算法找到的噪声点数。 |
preProcessingMillis |
整数 |
预处理数据所用的毫秒数。 |
computeMillis |
整数 |
运行算法所用的毫秒数。 |
writeMillis |
整数 |
向 Neo4j 数据库添加属性的毫秒数。 |
postProcessingMillis |
整数 |
计算百分位数和社区计数所用的毫秒数。 |
nodePropertiesWritten |
整数 |
添加到投影图的属性数量。 |
configuration |
映射 |
用于运行算法的配置。 |
示例
以下所有示例都应在空数据库中运行。 示例通常使用 Cypher 投影。原生投影将在未来版本中废弃。 |
在本节中,我们将展示在具体图上运行 HDBSCAN 算法的示例。目的是说明结果如何以及提供如何在实际环境中利用算法的指南。我们将在一个由少数节点以特定模式连接的小城市图上进行此操作。示例图如下所示
CREATE
(:City {name: 'Surbiton', coordinates: [51.39148, -0.29825]}),
(:City {name: 'Liverpool', coordinates: [53.41058, -2.97794]}),
(:City {name: 'Kingston upon Thames', coordinates: [51.41259, -0.2974]}),
(:City {name: 'Sliven', coordinates: [42.68583, 26.32917]}),
(:City {name: 'Solna', coordinates: [59.36004, 18.00086]}),
(:City {name: 'Örkelljunga', coordinates: [56.28338, 13.27773]}),
(:City {name: 'Malmö', coordinates: [55.60587, 13.00073]}),
(:City {name: 'Xánthi', coordinates: [41.13488, 24.888]});
此图由欧洲的三个全球位置(英国、瑞典和巴尔干地区)的各种 City 节点组成。
我们现在可以投影图并将其存储在图目录中。我们加载带有 coordinates
节点属性的 City
节点标签。
MATCH (c:City)
RETURN gds.graph.project(
'cities',
c,
null,
{
sourceNodeProperties: c { .coordinates },
targetNodeProperties: {}
}
)
在以下示例中,我们将演示在此图上使用 HDBSCAN 算法来查找地理位置彼此接近的城市社区。
内存估算
首先,我们将使用 estimate
过程估算运行算法的成本。这可以通过任何执行模式完成。在此示例中,我们将使用 write
模式。估算算法有助于了解在图上运行算法将产生的内存影响。当您随后实际在一种执行模式下运行算法时,系统将执行估算。如果估算显示执行超出其内存限制的可能性非常高,则禁止执行。要了解更多信息,请参阅 自动估算和执行阻止。
有关 estimate
的更多详细信息,请参阅 内存估算。
CALL gds.hdbscan.write.estimate('cities', {
writeProperty: 'label',
nodeProperty: 'coordinates'
})
YIELD nodeCount, bytesMin, bytesMax, requiredMemory
nodeCount | bytesMin | bytesMax | requiredMemory |
---|---|---|---|
8 |
9920 |
9920 |
"9920 字节" |
流
在 stream
执行模式下,算法返回每个节点的簇。这允许我们直接检查结果或在 Cypher 中对其进行后处理,而不会产生任何副作用。
有关 stream
模式的更多详细信息,请参阅 流。
CALL gds.hdbscan.stream('cities', {
nodeProperty: 'coordinates',
minClusterSize: 2,
samples: 2
})
YIELD nodeId, label
RETURN gds.util.asNode(nodeId).name AS name, label
ORDER BY label, name ASC
name | label |
---|---|
"斯利文" |
-1 |
"克桑西" |
-1 |
"泰晤士河畔金斯顿" |
1 |
"利物浦" |
1 |
"瑟比顿" |
1 |
"马尔默" |
2 |
"索尔纳" |
2 |
"厄克勒永加" |
2 |
在上面的示例中,我们可以看到这些城市地理位置上彼此聚类。
统计
在 stats
执行模式下,算法返回包含算法结果摘要的单行。此执行模式没有任何副作用。通过检查 computeMillis
返回项,它可用于评估算法性能。在以下示例中,我们将省略返回时间。过程的完整签名可在 语法部分中找到。
有关 stats
模式的更多详细信息,请参阅 统计。
CALL gds.hdbscan.stats('cities', {
nodeProperty: 'coordinates',
minClusterSize: 2,
samples: 2
})
YIELD nodeCount, numberOfClusters, numberOfNoisePoints
nodeCount | numberOfClusters | numberOfNoisePoints |
---|---|---|
8 |
2 |
2 |
修改
mutate
执行模式通过一个重要的副作用扩展了 stats
模式:用包含该节点簇的新节点属性更新命名图。新属性的名称使用强制配置参数 mutateProperty
指定。结果是一个摘要行,类似于 stats
,但包含一些附加指标。当多个算法结合使用时,mutate
模式特别有用。
有关 mutate
模式的更多详细信息,请参阅 修改。
cities
图中CALL gds.hdbscan.mutate('cities', {
nodeProperty: 'coordinates',
minClusterSize: 2,
samples: 2,
mutateProperty: 'label'
})
YIELD nodeCount, numberOfClusters, nodePropertiesWritten, numberOfNoisePoints
nodeCount | numberOfClusters | nodePropertiesWritten | numberOfNoisePoints |
---|---|---|---|
8 |
2 |
8 |
2 |
在 mutate
模式下,过程只返回一行。结果写入 GDS 内存图而不是 Neo4j 数据库。
写入
write
执行模式通过一个重要的副作用扩展了 stats
模式:将每个节点的簇作为属性写入 Neo4j 数据库。新属性的名称使用强制配置参数 writeProperty
指定。结果是一个摘要行,类似于 stats
,但包含一些附加指标。write
模式能够将结果直接持久化到数据库。
有关 write
模式的更多详细信息,请参阅 写入。
CALL gds.hdbscan.write('cities', {
nodeProperty: 'coordinates',
minClusterSize: 2,
samples: 2,
writeProperty: 'label'
})
YIELD nodeCount, numberOfClusters, nodePropertiesWritten, numberOfNoisePoints
nodeCount | numberOfClusters | nodePropertiesWritten | numberOfNoisePoints |
---|---|---|---|
8 |
2 |
8 |
2 |
在 write
模式下,过程只返回一行。结果写入 Neo4j 数据库而不是 GDS 内存图。