具有自定义指标的 DBSCAN

DBSCAN with custom metric

我有以下内容:

我知道 DBSCAN 应该支持自定义距离度量,但我不知道如何使用它。

假设我有一个函数

def similarity(x,y):
    return  similarity ... 

并且我有一个可以成对传递到该函数的数据列表,在使用 scikit-learn 的 DBSCAN 实现时如何指定它?

理想情况下,我想做的是获取集群列表,但我一开始不知道如何开始。

还有很多术语让我感到困惑:

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html

如何传递特征数组?它是什么?我如何使这个实现符合我的需要?我怎样才能从这个算法中得到我的 "sublists"?

"feature array" 只是数据集中数据点特征的数组。

metric 是您要查找的参数。它可以是字符串(内置指标的名称)或 callable。您的 similarity 函数是可调用的。这在文档中没有很好地描述,但是一个指标必须做到这一点,将两个数据点作为参数,return 一个数字。

def similarity(x, y):
    return ...

reduced_dataset = sklearn.cluster.DBSCAN(metric=similarity).fit(dataset)

以防有人使用自定义指标搜索相同的字符串

    def metric(x, y):
        return yourDistFunc(string_seqs[int(x[0])],string_seqs[int(y[0])])
    def clusterPockets():          
        global string_seqs
        string_seqs = load_data() #["foo","bar"...]
        dat = np.arange(len(string_seqs)).reshape(-1, 1)
        clustered_dataset = DBSCAN(metric=metric)).fit(X=dat, y=dat)