使用 dbscan 对角度数据进行聚类

     2023-03-12     102

关键词:

【中文标题】使用 dbscan 对角度数据进行聚类【英文标题】:clustering with angular data using dbscan 【发布时间】:2014-07-24 04:59:35 【问题描述】:

我需要以 X、Y、Phi 的形式对数据点进行聚类。现在我使用 DBSCAN (sklearn)。除了一件事之外,聚类有效:Phi 是角度数据,它是模 2*Pi。因此,Phi=0 附近的聚类是不正确的。有什么技巧可以解决这个问题吗?我找不到一个或自己编一个有效的。

谢谢。

【问题讨论】:

【参考方案1】:

圆形边界条件在傅立叶框架之外实际上并不容易实现。

您可以尝试通过将X, Y, Phi 替换为X, Y, a * cos(Phi), a * sin(Phi) 来尝试重新参数化,其中a > 0 是一种比例因子,需要正确选择,以便此投影到二维空间中以按照您在聚类中所需的方式运行。首先检查a = 1(如果它对纯Phi 工作正常,那么这是一个很好的候选者),然后检查a 以您剩余数据X, Y 的数量级。

这背后的想法是将Phi替换为相位的“真实”复杂“含义”,即exp(1j * Phi),但始终保持真实。

然后您继续根据此重新参数化计算距离,例如欧几里得:

dist = ((np.array([X1, Y1, a* np.cos(Phi1), a * np.sin(Phi1)]) - np.array([X2, Y2, a * np.cos(Phi2), a * np.sin(Phi2)])) ** 2).sum()

在将每一对输入到 DBSCAN 对象之前,您对每一对都执行此操作。

【讨论】:

非常感谢您提出这个想法。我需要考虑一下,看看这是否可行(并希望试一试)。 其实他们易于使用。例如,这可能会奏效:distance=(x1-x2)**2+(y1-y1)**2+sin(phi1-phi2)**2 是的,当然!我认为您的提议几乎(几乎)等同于对我提出的重新参数化进行欧几里得距离,因为三角恒等式如 sin(phi1 - phi1) = sin(phi1)cos(phi2) - cos(phi1)sin(phi2) 及其相反。但我坚持认为,一般来说,圆形边界条件不容易处理。【参考方案2】:

DBSCAN 可以使用任意距离

所以首先定义一个距离函数(这可能会涉及一些三角函数),然后将其作为相似度插入 DBSCAN。

你可能会使用这样的东西:

distance = (x1-x2)**2 + (y1-y1)**2 + factor * sin(phi1-phi2)**2

但您需要仔细选择您的体重factor,因为角度差异与您的XY 轴的比例不同,我猜。

出于显而易见的原因,请勿在此数据集上使用欧几里得距离。

【讨论】:

感谢您提出这个建议 - 我的贡献忽略了一个事实,即您仍然需要计算重新参数化的距离,您在此处显示。 这会更容易。谢谢!现在我正在准备要集群的数据(在集群有意义之前需要进行一些认真的清理)。再次感谢! 回想一下,我意识到sin(phi1-phi2) == 0 如果(phi1-phi2) % pi == 0,那么它们也可以指向相反的方向。这可以是有意的。如果不是,那么另外使用cos 术语可以解决问题。但不要只添加正方形:) 我没有为他弄清楚确切的数学,因为“角度数据”并不意味着它在球体上;所以我们缺乏信息。如果是球体上的数据,我会选择 Haversine 等。

DBSCAN 按位置和密度对数据进行聚类

...ensity【发布时间】:2016-05-0117:24:56【问题描述】:我正在使用dbscan::dbscan方法按位置和密度对数据进行聚类。我的数据如下所示:str(data)\'data.frame\':4872obs.of3variables:$price:num...$lat:num...$lng: 查看详情

在给定 x,y,z 坐标时使用 DBSCAN 算法对 3D 点进行聚类

】在给定x,y,z坐标时使用DBSCAN算法对3D点进行聚类【英文标题】:Clusteringthe3Dpointswhengiventhex,y,zcoordinatesusingDBSCANalgorithmusingpython【发布时间】:2019-09-2711:34:00【问题描述】:我正在尝试使用带有python的DBSCAN算法在一些给定坐标的帮... 查看详情

使用 sklearn DBSCAN 模型对新条目进行分类

】使用sklearnDBSCAN模型对新条目进行分类【英文标题】:UsesklearnDBSCANmodeltoclassifynewentries【发布时间】:2015-06-1922:58:33【问题描述】:我有一个巨大的“动态”数据集,我正试图在上面找到有趣的集群。在运行了许多不同的无监督... 查看详情

选择和实施聚类方法:DBSCAN 其他?

...问题描述】:我需要对经纬度坐标的数据集进行聚类。我使用python作为我的语言并计划使用DBSCAN,因为我不想指定集群的数量。目标和目的是能够输入具有许多附加特征的经纬度坐标的大型数据集,并分配将返回的集群组。包 查看详情

如何对多元角度数据进行聚类?距离测量和算法

...量(n>10)进行聚类,其中每个属性都是一个角度。我可以使用哪些距离度量和算法?我想到了:-曼哈顿距离-获取属性对之间的最大/最小距离(http://www.ncbi 查看详情

Python:使用 scikit-learn 的 dbscan 进行字符串聚类,使用 Levenshtein 距离作为度量:

】Python:使用scikit-learn的dbscan进行字符串聚类,使用Levenshtein距离作为度量:【英文标题】:Python:Stringclusteringwithscikit-learn\'sdbscan,usingLevenshteindistanceasmetric:【发布时间】:2016-12-0719:10:51【问题描述】:我一直在尝试对多个URL数据... 查看详情

DBSCAN 聚类与名称不同(Python)

...ython)【发布时间】:2021-09-2121:27:44【问题描述】:我正在使用TF-IDF和DBSCAN在数据库中对相似的人名进行聚类。该项目的目标是能够将属于同一个人但不一定具有相同格式或拼写的名称聚集在一起。例如,JohnSmith也可以在数据库中... 查看详情

Scikit-learn:使用 DBSCAN 进行聚类后,绘制的点比初始数据样本少

】Scikit-learn:使用DBSCAN进行聚类后,绘制的点比初始数据样本少【英文标题】:Scikit-learn:LesspointsplottedthaninitialdatasamplesafterclusteringwithDBSCAN【发布时间】:2018-12-0923:33:34【问题描述】:我在使用库scikit-learn中的DBSCAN实现时,发现... 查看详情

从成对列表python创建一个对称矩阵,用于聚类scikit,DBSCAN

...【发布时间】:2016-05-0813:28:06【问题描述】:我的目标是使用来自scikit的DBSCAN和预先计算的相似度矩阵进行聚类。我有一个功能列表。我成对地为列表生成唯一的对,并有一个计算对之间相似 查看详情

GridSearchCV 如何用于聚类(MeanShift 或 DBSCAN)?

...【发布时间】:2014-10-2707:24:21【问题描述】:我正在尝试使用scikit-learn对一些文本文档进行聚类。我正在尝试DBSCAN和MeanShift,并想确定哪些超参数(例如,bandwidth用于MeanShift 查看详情

具有周期性边界条件的 Python DBSCAN 聚类

...需要这个来治疗我的tesis,请原谅我的无知。我的目标是使用sklearn.cluster.DBSCAN对3D点进行聚类,并仅在x,y上实现周期性边界条件。我发现最 查看详情

使用带测试训练拆分的 DBSCAN 进行分类

】使用带测试训练拆分的DBSCAN进行分类【英文标题】:ClassificationUsingDBSCANw/Test-TrainSplit【发布时间】:2019-08-2018:46:33【问题描述】:提出的问题如下:使用scikit-learn将数据拆分为训练集和测试集。使用DBSCAN将数据分类为猫或狗。... 查看详情

DBSCAN 用于地理位置数据的聚类

】DBSCAN用于地理位置数据的聚类【英文标题】:DBSCANforclusteringofgeographiclocationdata【发布时间】:2016-04-0708:39:54【问题描述】:我有一个包含纬度和经度对的数据框。这是我的数据框的样子。order_latorder_long019.11184172.910729119.11134272... 查看详情

rapidminer 和 scikit-learn 中的 DBSCAN 算法

...9-1110:09:36【问题描述】:我正在尝试寻找一种聚类算法来使用python对标称数据进行聚类。为此,我尝试了使用RapidMiner的DBSCAN算法,它适用于标称数据。但是当我使用scikit-learn提供的DBSCAN算法尝试相同的 查看详情

用sklearn对弧度距离矩阵进行DBSCAN?

】用sklearn对弧度距离矩阵进行DBSCAN?【英文标题】:ConductDBSCANonradiandistancematrixwithsklearn?【发布时间】:2016-10-0804:01:55【问题描述】:我希望对几个时间戳(以分钟为单位)进行聚类。所以到目前为止我所做的是:1)将点转换为... 查看详情

用scikit-learn学习dbscan聚类

    在DBSCAN密度聚类算法中,我们对DBSCAN聚类算法的原理做了总结,本文就对如何用scikit-learn来学习DBSCAN聚类做一个总结,重点讲述参数的意义和需要调参的参数。1.scikit-learn中的DBSCAN类    在scikit-learn中,DBSCAN算法类... 查看详情

空间聚类算法简述

...优势,且不要求对簇的数量进行初始设置。其算法包括:DBSCAN算法,OPTICS算法,DENCLUE算法,CURD算法,IncrementalDBSCAN算法,SDBDC算法,ST-DBSCAN算法等。DBSCAN是第一个被提出的基于密度的聚类 查看详情

基于c++实现dbscan聚类算法(代码片段)

DBSCAN聚类算法进行了C++的实现,时间复杂度为O(n^2)。 1、数据点类型描述如下(DataPoint.h)#include<vector>usingnamespacestd;constintDIME_NUM=2;//数据维度为2,全局常量//数据点类型classDataPointprivate:u 查看详情