DBSCAN 中预先计算的距离矩阵

Jai*_*era 8 python dbscan scikit-learn rapids

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

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

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

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

对于节点之间的距离为 2 且节点簇最少为 5 个的情况。另外,使用“预先计算”来指示使用二维矩阵。但是如何传递计算信息呢?

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

war*_*ped 9

文档

\n
\n
class sklearn.cluster.DBSCAN(eps=0.5, *, min_samples=5, metric=\'euclidean\', \nmetric_params=None, algorithm=\'auto\', leaf_size=30, p=None, n_jobs=None)\n[...]\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\n
[...]\nmetricstring, or callable, default=\xe2\x80\x99euclidean\xe2\x80\x99\nThe metric to use when calculating distance between instances in a feature array. If \nmetric is a string or callable, it must be one of the options allowed by \nsklearn.metrics.pairwise_distances for its metric parameter. If metric is \n\xe2\x80\x9cprecomputed\xe2\x80\x9d, X is assumed to be a distance matrix and must be square. X may be a \nGlossary, in which case only \xe2\x80\x9cnonzero\xe2\x80\x9d elements may be considered neighbors for  \nDBSCAN.\n[...]\n
Run Code Online (Sandbox Code Playgroud)\n
\n

因此,您通常的调用方式是:

\n
from sklearn.cluster import DBSCAN\n\nclustering = DBSCAN()\nDBSCAN.fit(X)\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
from sklearn.cluster import DBSCAN\n\nclustering = DBSCAN(metric=\'precomputed\')\nclustering.fit(distance_matrix)\n
Run Code Online (Sandbox Code Playgroud)\n

  • 所以 X 将是距离成对的方阵,对吧?不应该是 metric='precompulated' 而不是 metric='fixed' 吗? (2认同)