DBSCAN具有自定义指标

zyt*_*hon 10 python cluster-analysis scikit-learn

我有以下给出:

  • 数千万的数据集

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

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

说我有功能

def similarity(x,y):
    return  similarity ... 
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

如何传递特征数组,它是什么?我如何满足我的需求?我怎么能从这个算法中得到我的"子列表"?

j4n*_*4nw 8

"特征数组"只是数据集中数据点的特征数组.

metric是您正在寻找的参数.它可以是字符串(内置度量的名称)或可调用的.你的similarity功能是可调用的.这不是很好的文档中描述的那样,而是一个指标都有做到这一点,需要两个数据点作为参数,并返回一个数字.

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

reduced_dataset = sklearn.cluster.DBSCAN(metric=similarity).fit(dataset)
Run Code Online (Sandbox Code Playgroud)

  • DBSCAN返回2乘y yumpy矩阵(对于x乘y yumpy矩阵数据集).如果您的数据集将标签作为第一列,则首先提取这些标签.查看pandas数据帧 - 您可以轻松地使用它们将数据集拆分为标签和原始数据/数据点. (2认同)

man*_*iac 6

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

    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)
Run Code Online (Sandbox Code Playgroud)