首页 > 解决方案 > DBSCAN 中预先计算的距离矩阵

问题描述

仔细阅读,我发现可以将预先计算的距离矩阵传递给SKLearn DBSCAN。不幸的是,我不知道如何通过它进行计算。

假设我有一个包含 100 个元素的一维数组,只有节点的名称。然后我有一个 100x100 的二维矩阵,每个元素之间的距离(以相同的顺序)。

我知道我必须这样称呼它:

db = DBSCAN(eps=2, min_samples=5, metric="precomputed")

对于 2 个节点和至少 5 个节点集群之间的距离。此外,使用“预计算”表示使用 2D 矩阵。但是如何传递计算信息?

如果使用 RAPIDS CUML DBScan函数(GPU 加速),同样的问题也可能适用。

标签: pythonscikit-learndbscanrapids

解决方案


文档

class sklearn.cluster.DBSCAN(eps=0.5, *, min_samples=5, metric='euclidean', 
metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=None)
[...]
[...]
metricstring, or callable, default=’euclidean’
The metric to use when calculating distance between instances in a feature array. If 
metric is a string or callable, it must be one of the options allowed by 
sklearn.metrics.pairwise_distances for its metric parameter. If metric is 
“precomputed”, X is assumed to be a distance matrix and must be square. X may be a 
Glossary, in which case only “nonzero” elements may be considered neighbors for  
DBSCAN.
[...]

因此,您通常称其为:

from sklearn.cluster import DBSCAN

clustering = DBSCAN()
DBSCAN.fit(X)

如果你有一个距离矩阵,你可以:

from sklearn.cluster import DBSCAN

clustering = DBSCAN(metric='precomputed')
clustering.fit(distance_matrix)

推荐阅读