环顾四周,我发现可以将预先计算的距离矩阵传递给 SKLearn DBSCAN .不幸的是,我不知道如何通过它进行计算。
假设我有一个包含 100 个元素的一维数组,其中只有节点的名称。然后我有一个 2D 矩阵,100x100,每个元素之间的距离(以相同的顺序)。
我知道我必须调用它:db = DBSCAN(eps=2, min_samples=5, metric="precomputed")
对于 2 个节点和至少 5 个节点集群之间的距离。此外,使用“预先计算”来指示使用二维矩阵。但是如何传递计算信息呢?
如果使用 RAPIDS,同样的问题可能适用 CUML DBScan功能(GPU 加速)。
最佳答案
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)
关于python - DBSCAN 中的预计算距离矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62695842/