带有自定义指标的 DBSCAN

Posted

技术标签:

【中文标题】带有自定义指标的 DBSCAN【英文标题】:DBSCAN with custom metric 【发布时间】:2018-07-23 21:23:49 【问题描述】:

我有以下信息:

数千个数据集

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

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

说我有一个功能

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

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

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

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

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

我如何传递一个特征数组,它是什么?我如何使这个实现适合我的需要?我将如何从该算法中获取我的“子列表”?

【问题讨论】:

【参考方案1】:

“特征数组”只是数据集中数据点的特征数组。

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

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

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

【讨论】:

感谢您可以理解的答案,还有一个问题,算法会返回什么?我是否必须再次遍历整个数组以获得每个项目的标签,或者这是如何工作的? DBSCAN 返回一个 2 x y numpy 矩阵(对于 x x y numpy 矩阵数据集)。如果您的数据集将标签作为第一列,您将首先提取这些标签。查看 pandas 数据框 - 您可以轻松使用它们将数据集拆分为标签和原始数字/数据点。【参考方案2】:

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

    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的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes HPA(带有自定义指标)扩展策略

sklearn 使用带有自定义指标的 RandomizedSearchCV 并捕获异常

CloudWatch 自定义 EC2 内存指标和带有 AutoScaling 策略的警报

根据自定义指标失败保存最佳指标(警告:tensorflow:只能在自定义指标可用的情况下保存最佳模型,跳过)

带有自定义接收器的 Spark 结构化流中的输入行数

为啥 Kubernetes HPA 转换自定义指标?