Python 具有自定义度量的DBSCAN

Python 具有自定义度量的DBSCAN,python,scikit-learn,cluster-analysis,Python,Scikit Learn,Cluster Analysis,我有以下资料: 数千个数据集 一种计算相似性的方法,但数据点本身我无法在欧几里得空间中绘制它们 我知道DBSCAN应该支持自定义距离度量,但我不知道如何使用它 假设我有一个函数 def similarity(x,y): return similarity ... 我有一个可以两两传递到该函数的数据列表,在使用scikit learn的DBSCAN实现时,我如何指定它 理想情况下,我想做的是得到一个集群列表,但我不知道如何从一开始就开始 有很多术语仍然让我感到困惑: 如何传递要

我有以下资料:

  • 数千个数据集

  • 一种计算相似性的方法,但数据点本身我无法在欧几里得空间中绘制它们

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

假设我有一个函数

def similarity(x,y):
    return  similarity ... 
我有一个可以两两传递到该函数的数据列表,在使用scikit learn的DBSCAN实现时,我如何指定它

理想情况下,我想做的是得到一个集群列表,但我不知道如何从一开始就开始

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

如何传递要素数组,它是什么?如何使此实现符合我的需要?我怎样才能从这个算法中得到我的“子列表”?

一个“特征数组”就是数据集中一个数据点的特征数组

metric
是您要查找的参数。它可以是字符串(内置度量的名称)或。您的
相似性
函数是可调用的。文档中没有很好地描述这一点,但度量必须做到这一点,将两个数据点作为参数,并返回一个数字

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)

谢谢你的回答,还有一个问题,算法会返回什么?我是否需要再次迭代整个数组以获得每个项的标签,或者这是如何工作的?DBSCAN返回一个2×y numpy矩阵(对于x×y numpy矩阵数据集)。如果数据集的第一列是标签,则应首先提取这些标签。查看pandas数据帧-您可以轻松使用它们将数据集拆分为标签和原始数字/数据点。