有了K均值聚类,为什么还需要DBSCAN聚类算法?

作者: 读芯术 2020-05-13 15:57:59

聚类本文转载自公众号“读芯术”(ID:AI_Discovery)分析是一种无监督学习法,它将数据点分离成若干个特定的群或组,使得在某种意义上同一组中的数据点具有相似的性质,不同组中的数据点具有不同的性质。

聚类分析包括基于不同距离度量的多种不同方法。例如。K均值(点之间的距离)、Affinity propagation(图之间的距离)、均值漂移(点之间的距离)、DBSCAN(最近点之间的距离)、高斯混合(到中心的马氏距离)、谱聚类(图之间距离)等。

有了K均值聚类,为什么还需要DBSCAN聚类算法?

2014年,DBSCAN算法在领先的数据挖掘会议ACM SIGKDD上获得the testof time奖(授予在理论和实践中受到广泛关注的算法)。

所有聚类法都使用相同的方法,即首先计算相似度,然后使用相似度将数据点聚类为组或群。本文将重点介绍具有噪声的基于密度的聚类方法(DBSCAN)。

既然已经有了K均值聚类,为什么还需要DBSCAN这样的基于密度的聚类算法呢?

K均值聚类可以将松散相关的观测聚类在一起。每一个观测最终都成为某个聚类的一部分,即使这些观测在向量空间中分散得很远。由于聚类依赖于聚类元素的均值,因此每个数据点在形成聚类中都起着作用。

数据点的轻微变化可能会影响聚类结果。由于聚类的形成方式,这个问题在DBSCAN中大大减少。这通常不是什么大问题,除非遇到一些具有古怪形状的数据。

使用K均值的另一个困难是需要指定聚类的数量(“k”)以便使用。很多时候不会预先知道什么是合理的k值。

DBSCAN的优点在于,不必指定使用它的聚类数量。需要的只是一个计算值之间距离的函数,以及一些将某些距离界定为“接近”的指令。在各种不同的分布中,DBSCAN也比K均值产生更合理的结果。下图说明了这一事实:

有了K均值聚类,为什么还需要DBSCAN聚类算法?

基于密度的聚类算法

基于密度的聚类是无监督学习法,基于数据空间中的聚类是高点密度的连续区域,通过低点密度的连续区域与其他此类聚类分离,来识别数据中独特的组/聚类。

具有噪声的基于密度的聚类方法(DBSCAN)是基于密度聚类的一种基本算法。它可以从大量的数据中发现不同形状和大小的聚类,这些聚类中正包含着噪声和异常值。

DBSCAN算法使用以下两种参数:

  • eps (ε):一种距离度量,用于定位任何点的邻域内的点。
  • minPts:聚类在一起的点的最小数目(一个阈值),使一个区域界定为密集。

如果探究两个称为密度可达性(DensityReachability)和密度连接性(DensityConnectivity)的概念,就可以理解这些参数。

密度方面的可达性(Reachability)建立了一个可以到达另一个点的点,如果该点位于与另一个点的特定距离(eps)内。

连接性(Connectivity)涉及到基于传递性的链接方法,以确定点是否位于特定的聚类中。例如,如果p->r->s->t->q,则p和q可以连接,其中a->b表示b在a的邻域内。

DBSCAN聚类完成后会产生三种类型的点:

有了K均值聚类,为什么还需要DBSCAN聚类算法?
  • 核心点(Core)——该点表示至少有m个点在距离n的范围内。
  • 边界点(Border) ——该点表示在距离n处至少有一个核心。
  • 噪声点(Noise) ——它既不是核心点也不是边界点。并且它在距离自身n的范围内有不到m个点。

DBSCAN聚类算法步骤

  • 算法通过任意选取数据集中的一个点(直到所有的点都访问到)来运行。
  • 如果在该点的“ε”半径范围内至少存在“minPoint”点,那么认为所有这些点都属于同一个聚类。
  • 通过递归地重复对每个相邻点的邻域计算来扩展聚类

参数估计

每个数据挖掘任务都存在参数问题。每个参数都以特定的方式影响算法。DBSCAN需要参数ε和minPts。

  • ε:可以使用k距离图来选择ε的值,表示到k=minPts-1最近邻的距离,从最大值到最小值排序。当此图显示“elbow”时,ε值较好:如果ε选择得太小,则很大一部分数据将无法聚类;如果ε值太高,聚类将合并,同时大多数对象将位于同一聚类中。一般来说,较小的ε值是可取的,根据经验,只有一小部分点应在此距离内。
  • 距离函数:距离函数的选择与ε的选择密切相关,对结果有重要影响。通常,在选择参数ε之前,必须首先确定数据集的合理相似性度量。没有对此参数的估计,但需要为数据集适当地选择距离函数。
  • minPts:根据经验,最小minPts可以从数据集中的维度数D导出,即minPts≥D+1。低值minPts=1是没有意义的,因为此时每个点本身就已经是一个聚类了。当minPts≤2时,结果将与采用单链路度量的层次聚类相同,且树状图在高度ε处切割。因此,必须至少选择3个minPts。

然而,对于有噪声的数据集,较大的值通常更好,并将产生更显著的聚类。根据经验,可以使用minPts=2·dim,但对于非常大的数据、噪声数据或包含许多重复项的数据,可能需要选择更大的值。

用sklearn实现DBSCAN python

首先用DBSCAN对球形数据进行聚类。

先生成750个带有相应标签的球形训练数据点。然后对训练数据的特征进行标准化,最后应用sklearn库中的DBSCAN。

有了K均值聚类,为什么还需要DBSCAN聚类算法?

有了K均值聚类,为什么还需要DBSCAN聚类算法?

聚类球形数据中的DBSCAN

黑色数据点表示上述结果中的异常值。接下来,用DBSCAN对非球形数据进行聚类。

  1. import numpy as np 
  2.            importmatplotlib.pyplot as plt 
  3.            from sklearn import metrics 
  4.            fromsklearn.datasets import make_circles 
  5.            fromsklearn.preprocessing importStandardScaler 
  6.            from sklearn.clusterimportDBSCAN 
  7.            X, y =make_circles(n_samples=750factor=0.3, noise=0.1) 
  8.            X=StandardScaler().fit_transform(X) 
  9.            y_pred=DBSCAN(eps=0.3, min_samples=10).fit_predict(X) 
  10.            plt.scatter(X[:,0], X[:,1], c=y_pred
  11.            print('Number ofclusters: {}'.format(len(set(y_pred[np.where(y_pred !=-1)])))) 
  12.            print('Homogeneity:{}'.format(metrics.homogeneity_score(y, y_pred))) 
  13.            print('Completeness:{}'.format(metrics.completeness_score(y, y_pred))) 
  14.            print("V-measure:%0.3f"% metrics.v_measure_score(labels_true,labels)) 
  15.            print("Adjusted RandIndex: %0.3f" 
  16.                  % metrics.adjusted_rand_score(labels_true,labels)) 
  17.            print("AdjustedMutual Information: %0.3f" 
  18.                  % metrics.adjusted_mutual_info_score(labels_true,labels)) 
  19.            print("SilhouetteCoefficient: %0.3f" 
  20.                  % metrics.silhouette_score(X, labels)) 

有了K均值聚类,为什么还需要DBSCAN聚类算法?

有了K均值聚类,为什么还需要DBSCAN聚类算法?

聚类非球形数据中的DBSCAN

这绝对是完美的。如果与K均值进行比较,会给出一个完全不正确的输出,如:

有了K均值聚类,为什么还需要DBSCAN聚类算法?

K-均值聚类结果

DBSCAN聚类算法的复杂性

  • 平均情况:与最佳/最坏情况相同,取决于数据和算法的实现。
  • 最佳情况:如果使用索引系统来存储数据集,使得邻域查询在对数时间内执行,可得到O(nlogn)的平均运行时复杂度。
  • 最坏情况:如果不使用索引结构或对退化数据(例如,所有距离小于ε的点),最坏情况下的运行时间复杂度仍为O(n²)。

基于密度的聚类算法可以学习任意形状的聚类,而水平集树算法可以在密度差异很大的数据集中学习聚类。

有了K均值聚类,为什么还需要DBSCAN聚类算法?
图源:unsplash

但需要指出的是,这些算法与参数聚类算法(如K均值)相比,调整起来有些困难。与K均值的聚类参数相比,DBSCAN或水平集树的epsilon参数在推理时不那么直观,因此为这些算法选择较好的初始参数值更加困难。

聚类分析 算法 监督学习
上一篇:矩阵乘法的优化及其在卷积中的应用 下一篇:人工智能正在推动芯片的复兴
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

BAIR最新RL算法超越谷歌Dreamer,性能提升2.8倍

pixel-based RL 算法逆袭,BAIR 提出将对比学习与 RL 相结合的算法,其 sample-efficiency 匹敌 state-based RL。

Aravind Srinivas ·  4天前
机器学习算法集锦:从贝叶斯到深度学习及各自优缺点

本文筛选并简单介绍了一些最常见算法类别,还为每一个类别列出了一些实际的算法并简单介绍了它们的优缺点。

佚名 ·  2020-05-21 14:50:37
谷歌中国工程师提出颠覆性算法模型,Waymo实测可提高预测精准度

“周围的车辆和行人在接下来数秒中会做什么?”要实现安全的自动驾驶,这是一个必须回答的关键问题,这也就是自动驾驶领域中的行为预测问题。

DeepTech深科技 ·  2020-05-21 10:16:41
边做边思考,谷歌大脑提出并发RL算法,机械臂抓取速度提高一倍

RL 算法通常假设,在获取观测值、计算动作并执行期间环境状态不发生变化。这一假设在仿真环境中很容易实现,然而在真实机器人控制当中并不成立,很可能导致控制策略运行缓慢甚至失效。

机器之心 ·  2020-05-12 10:43:30
神经网络之父Hinton再审视34年前的奠基性成果,欲在大脑中搜寻AI方法的“存在”

直到现在,几乎你听说过的每一个关于人工智能的进步,仍基于 30 年前的一篇阐述多层神经网络训练方法的论文演变而来。那就是 Geoffrey Hinton 在 1986 年写下的《Learning representations by back-propagation errors》。

黄珊 ·  2020-05-02 10:54:13
监督学习or无监督学习?这个问题必须搞清楚

当你踏上机器学习之旅时,搞清楚监督学习和无监督学习是你应该做的第一件事。而对于新手而言,“监督学习和无监督学习有什么区别?”,是最为常见不过的问题。

读芯术 ·  2020-04-28 17:26:04
生成“猫狗版”特朗普,造假脸工具StarGANv2被玩坏,算法已开源

如果你想用AI把特朗普的脸变成猫,又或者是把自己的脸与漂亮的奥妹结合起来,你会怎么办?也许你会想到两样AI工具。但是Deepfake生成人脸违和感太强,GAN生成假脸又很难深度定制。

晓查 ·  2020-04-28 13:34:53
Science子刊:人脑存在加速学习机制,算力赛过最新AI算法

机器学习虽然受人脑启发,但实验神经科学和ML两个学科已经70年没有沟通。以色列交叉学科团队发现,人脑存在加速学习适应机制,新机制人工神经网络计算能力远超最新AI算法。

佚名 ·  2020-04-24 12:50:50
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载