这篇博客介绍另一种类型的聚类算法——密度聚类。

密度聚类方法的指导思想:只要样本点的密度大于某个阈值,则将该样本添加到最近的簇中。这类算法可以克服基于距离的算法只能发现凸聚类的缺点,可以发现任意形状的聚类,而且对噪声数据不敏感。但是计算复杂度高,计算量大。

常用算法:

  • DBSCAN
  • MDCA

DBSCAN

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
一个比较有代表性的基于密度的聚类算法,相比于基于划分的聚类方法和层次聚类方法,DBSCAN算法将簇定义为密度相连的点的最大集合,能够将足够高密度的区域划分为簇,并且在具有噪声的空间数据上能够发现任意形状的簇。

DBSCAN算法的核心思想是:用一个点的ε邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不规则的cluster,而且聚类的时候事先不需要给定cluster的数量。

概念

ε 邻域(ε neighborhood,也称为Eps):给定对象在半径ε内的区域
Nϵ(x)=y∈X:dist(x,y)≤ϵN_ϵ (x)={y∈X:dist(x,y)≤ϵ}Nϵ​(x)=y∈X:dist(x,y)≤ϵ
密度(density):ε 邻域中 x 的密度,是一个整数值,依赖于半径 ε
p(x)=∣Nϵ(x)∣p(x)=|N_ϵ (x)|p(x)=∣Nϵ​(x)∣
MinPts 定义核心点时的阈值,也简记为 M

核心点(core point):如果 p(x)>=Mp(x)>=Mp(x)>=M,那么称 x 为 X 的核心点;记由 X 中所有核心点构成的集合为 XcX_cXc​ ,并记 Xnc=X\XcX_{nc} =X \backslash X_cXnc​=X\Xc​ 表示由X中所有非核心点构成的集合。直白来讲,核心点对应于稠密区域内部的点。

边界点(border point): 如果非核心点x的ε邻域中存在核心点,那么认为 x 为 X 的边界点。由 X 中所有的边界点构成的集合为 XbdX_bdXb​d 。直白来将,边界点对应稠密区域边缘的点。
x∈X_nc;∃y∈X;y∈N_ϵ (x)∩X_c

噪音点(noise point):集合中除了边界点和核心点之外的点都是噪音点,所有噪音点组成的集合叫做XnoiX_{noi}Xnoi​ ;直白来讲,噪音点对应稀疏区域的点。
Xnoi=X\(Xc∪Xbd)X_{noi}=X \backslash (X_c∪X_{bd})Xnoi​=X\(Xc​∪Xbd​)

直接密度可达(directly density-reachable):给定一个对象集合 X,如果 y 是在 x 的 ε 邻域内,而且 x 是一个核心对象,可以说对象 y 从对象 x 出发是直接密度可达的
x,y∈X;x∈Xc,y∈Nϵ(x)x,y∈X;x∈X_c,y∈N_ϵ (x)x,y∈X;x∈Xc​,y∈Nϵ​(x)
密度可达(density-reachable):如果存在一个对象链 p1,p2,...,pmp_1 ,p_2 ,...,p_mp1​,p2​,...,pm​ ,如果满足 pi+1p_{i+1}pi+1​ 是从 {p_i} 直接密度可达的,那么称 {p_m} 是从 {p_1} 密度可达的。

密度相连(density-connected):在集合 X 中,如果存在一个对象 o ,使得对象 x 和 y 是从 o 关于 ε 和 m 密度可达的,那么对象 x 和 y 是关于 ε 和 m 密度相连的.

簇(cluster):一个基于密度的簇是最大的密度相连对象的集合C;满足以下两个条件:

  • Maximality:若 x 属于 C,而且 y 是从 x 密度可达的,那么 y 也属于 C
  • Connectivity:若 x 属于 C,y 也属于C,则 x 和 y 是密度相连的

流程


算法流程:

  • 如果一个点 x 的 ε 邻域包含多余 m 个对象,则创建一个 x 作为核心对象的新簇;
  • 寻找并合并核心对象直接密度可达的对象;
  • 没有新点可以更新簇的时候,算法结束。

    算法特征描述:
  • 每个簇至少包含一个核心对象
  • 非核心对象可以是簇的一部分,构成簇的边缘
  • 包含过少对象的簇被认为是噪声

优缺点
优点:

  • 不需要事先给定cluster的数目
  • 可以发现任意形状的cluster
  • 能够找出数据中的噪音,且对噪音不敏感
  • 算法只需要两个输入参数
  • 聚类结果几乎不依赖节点的遍历顺序

缺点:

  • DBSCAN算法聚类效果依赖距离公式的选取,最常用的距离公式为欧几里得距离。但是对
  • 于高维数据,由于维数太多,距离的度量已变得不是那么重要
  • DBSCAN算法不适合数据集中密度差异很小的情况

看一下动态图

MDCA

密度最大值聚类算法,MDCA(Maximum Density Clustering Application)算法基于密度的思想引入划分聚类中,使用密度而不是初始点作为考察簇归属情况的依据,能够自动确定簇数量并发现任意形状的簇;另外MDCA一般不保留噪声,因此也避免了阈值选择不当情况下造成的对象丢弃情况。

MDCA算法的基本思路是寻找最高密度的对象和它所在的稠密区域;MDCA算法在原理上来讲,和密度的定义没有关系,采用任意一种密度定义公式均可,一般情况下采用DBSCAN算法中的密度定义方式

概念

最大密度点:
xmax={x│x∈X;∀y∈X,density(x)≥density(y)}x_{max}=\{x│x∈X;∀y∈X,density(x)≥density(y) \}xmax​={x│x∈X;∀y∈X,density(x)≥density(y)}

有序序列: 根据所有对象与p max 的距离对数据重新排序
Spmax={x1,x2,…,xn∣dist(xmax,x1)≤dist(xmax,x2)≤…≤dist(xmax,xn)}S_{p_{max}}=\{x_1,x_2,…,x_n |dist(x_{max},x_1 )≤dist(x_{max},x_2 )≤…≤dist(x_{max},x_n)\}Spmax​​={x1​,x2​,…,xn​∣dist(xmax​,x1​)≤dist(xmax​,x2​)≤…≤dist(xmax​,xn​)}

密度阈值 density0density_0density0​;当节点的密度值大于密度阈值的时候,认为该节点属于一个比较固定的簇,在第一次构建基本簇的时候,就将这些节点添加到对应簇中,如果小于这个值的时候,暂时认为该节点为噪声节点。

簇间距离:对于两个簇 C1C_1C1​ 和 C2C_2C2​ 之间的距离,采用两个簇中最近两个节点之间的距离作为簇间距离。
dist(C1,C2)=min⁡(dist(p,q));p∈C1,q∈C2dist(C_1,C_2 )=min⁡(dist(p,q));p∈C_1,q∈C_2dist(C1​,C2​)=min⁡(dist(p,q));p∈C1​,q∈C2​

聚簇距离阈值 dist0dist_0dist0​ :当两个簇的簇间距离小于给定阈值的时候,这两个簇的结果数据会进行合并操作。

M值:初始簇中最多数据样本个数

过程步骤
1 . 将数据集划分为基本簇;

  • 对数据集X选取最大密度点 PmaxP_{max}Pmax​ ,形成以最大密度点为核心的新簇 CiC_iCi​ ,按照距离排序计算出序列 SpmaxS_{p_{max}}Spmax​​ ,对序列的前 M 个样本数据进行循环判断,如果节点的密度大于等于 density0density_0density0​ ,那么将当前节点添加 CiC_iCi​ 中;
  • 循环处理剩下的数据集 X,选择最大密度点 PmaxP_{max}Pmax​ ,并构建基本簇 $C_{i+1} $ ,直到X中剩余的样本数据的密度均小于 density0density_0density0​

2 . 使用凝聚层次聚类的思想,合并较近的基本簇,得到最终的簇划分;

  • 在所有簇中选择距离最近的两个簇进行合并,合并要求是:簇间距小于等于 dist0dist_0dist0​ ,如果所有簇中没有簇间距小于 dist0dist_0dist0​ 的时候,结束合并操作

3 . 处理剩余节点,归入最近的簇

  • 最常用、最简单的方式是:将剩余样本对象归入到最近的簇

机器学习(聚类八)——密度聚类相关推荐

  1. 【进阶版】 机器学习之K均值聚类、层次聚类、密度聚类、实战项目含代码(15)

    目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 项目要求 数据透视 代码实战 维度太多,利用PCA降维的思想进 ...

  2. 密度聚类、密度聚类过程、OPTICS算法

    密度聚类.密度聚类过程.OPTICS算法 目录 密度聚类.密度聚类过程.OPTICS算法 密度聚类 密度聚类过程 OPTICS算法

  3. K-Means算法、层次聚类、密度聚类及谱聚类方法详述

    1.聚类算法概述 (1)什么是聚类? 聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小,属于无监督学习. 聚类 ...

  4. 聚类算法_层次聚类_密度聚类(dbscan,meanshift)_划分聚类(Kmeans)详解

    注: 两整天的成果,谬误之处勿喷 1 聚类概述 样本 没有训练的样本 没有标注的样本 1.1 相似度度量 1.1.1 距离相似度度量 距离度量 dist(oi,oj)dist(o_{i},o_{j}) ...

  5. 聚类分析:原型K-Means/K-Means++聚类、层次聚类;密度聚类DBSCAN

    聚类分析–处理无标签数据 from IPython.display import Image %matplotlib inline 1.使用K-Means方法按照相似度对对象进行分组 1.1使用skl ...

  6. 关于距离,K-means,层次聚类,密度聚类以及谱聚类

    目录 相似度/距离 k-Means算法 衡量聚类(轮廓系数) 层次聚类 密度聚类 谱聚类 之前博客中讲的模型基本上都是分类以及回归模型,他们都是属于有监督学习的,意为所有的样本都有一个结果值提供,我们 ...

  7. R语言 均值聚类、中心聚类、系谱聚类、密度聚类、最大期望聚类

    关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 R版本:v_3.6.1 主要讲述5类聚类: K-means聚类 K-中心聚类 系谱聚类 密度聚类 EM聚类 5种聚类的应用实例以及详细的参数说 ...

  8. k-means聚类,密度聚类,层次聚类优缺点

    k-means: 优点: 1,简单,易于理解和实现: 2,时间复杂度低 缺点: 1,需要对均值给出定义, 2,需要指定要聚类的数目: 3,一些过大的异常值会带来很大影响: 4,算法对初始选值敏感: 5 ...

  9. 机器学习知识点(十八)密度聚类DBSCAN算法Java实现

    为更好理解聚类算法,从网上找现成代码来理解,发现了一个Java自身的ML库,链接:http://java-ml.sourceforge.net/ 有兴趣可以下载来看看源码,理解基础ML算法.对于DBS ...

  10. 【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法的应用及密度聚类DBSCAN

    无监督学习: [机器学习]使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估 [机器学习]使用scikitLearn对数据进行聚类:高斯聚类GaussianMixture [ ...

最新文章

  1. Selenium的延迟等待
  2. 使用读写锁解决读者-写者问题
  3. ibatis自动生成插件
  4. java多线程------实现多线程两种方式
  5. wxWidgets:wxHtmlHelpWindow类用法
  6. Spring学习记录(九)---通过工厂方法配置bean
  7. centos7 postgresql9和postgis2.1插件编译部署
  8. (十九)TCPIP面试宝典-进入大厂必备总结(上)
  9. pip install mysqlclient报错fails with EnvironmentError: mysql_config not found
  10. WorkFlow入门Step.7—Creating a FlowChart WorkFlow-For-WF4.0
  11. 斜齿轮传动几何尺寸计算例2:斜齿角度变位-齿轮手册第2版表2.2-9
  12. Java基础学习总结(79)——Java本地接口JNI详解
  13. 最新IOS审核被拒原因TOP10 | 附带解决方法
  14. [iOS]在tableview中用动画效果改变cell的高度
  15. 万嘉MOV格式转换器v1.00.102官方免费版
  16. 给所有使用FMX(FireMonkey)进行开发的忠告!
  17. 日本JAFFE表情库
  18. 自己动手编程实现“电子地图下载器
  19. 用纯CSS实现优惠券剪卡风格
  20. 服务器临时文件的后缀名,在Java中创建具有指定扩展名后缀的临时文件

热门文章

  1. TRANSCAD基础技巧——OD矩阵生成
  2. pchip-三阶Hermite插值
  3. C++ 回调函数 例子
  4. Keil MDK 软件包(MDK5 Software Packs)离线下载方法
  5. Grads:绘制风流畅
  6. Python 游戏辅助基础之 Aircv
  7. 网孔型高级维修电工实训装置
  8. C++信息学奥赛一本通_2060
  9. Tomcat9下载以及安装
  10. 设计模式-建造者模式(Builder)2种实现方式(经典Builder模式、链式Builder模式)