主要内容
聚类分析概述
K-Means聚类
层次聚类
基于密度的聚类
其他聚类方法
聚类评估
小结

四、基于密度的聚类

算法原理

基于密度的聚类算法的主要思想是:只要邻近区域的密度(对象或数据点的数目)超过某个阈值,就把它加到与之相近的聚类中。也就是说,对给定类中的每个数据点,在一个给定范围的区域中必须至少包含某个数目的点。
基于密度的聚类算法代表算法有:DBSCAN算法、OPTICS算法及DENCLUE算法等。

DBSCAN算法涉及2个参数5个定义:


定义1(Eps邻域)

给定一个对象 p ,p 的Eps 邻域 NEps(p)定义为以 p 为核心,以Eps为半径的d 维超球体区域,即:


其中,D为d维实空间上的数据集, dist ( p, q)表示D中的2个对象p和q之间的距离。

定义2(核心点与边界点)

对于对象p∈D,给定一个整数MinPts,如果p的Eps邻域内的对象数满足|NEps§|≥MinPts ,则称p为(Eps,MinPts ) 条件下的核心点;不是核心点但落在某个核心点的Eps 邻域内的对象称为边界点。


定义3(直接密度可达)
如图所示,给定 (Eps,MinPts ) ,如果对象 p 和 q 同时满足如下条件:
p∈ NEps(q) ;
|NEps(q)|≥MinPts (即q是核心点),则称对象 p 是从对象 q 出发,直接密度可达的。

定义4(密度可达)

如图所示,给定数据集D,当存在一个对象链 p1,p2,p3,…,pn, 其中 p1 = q , p N= p,对于 pi ∈D ,如果在条件(Eps,MinPts ) 下 pi+1从pi 直接密度可达,则称对象p从对象q在条件 (Eps,MinPts )下密度可达。密度可达是非对称的,即p从q密度可达不能推出q也从p密度可达。

定义5(密度相连)
如图所示,如果数据集D中存在一个对象o,使得对象p和q是从o在 (Eps,MinPts )条件下密度可达的,那么称对象p和q在 (Eps,MinPts )条件下密度相连。密度相连是对称的。


DBSCAN算法描述:


算法改进


但是,DBSCAN算法对用户设置的参数敏感,Eps和MinPts的设置会影响聚类的效果。针对这一问题,OPTICS(Ordering Points to Identify the Clustering Structure)算法被提出,它通过引入核心距离和可达距离,使得聚类算法对输入的参数不敏感。

DBSCAN算法实现

from sklearn import datasets
import numpy as np
import random
import matplotlib.pyplot as plt
def findNeighbor(j,X,eps):N = []for p in range(X.shape[0]):  # 找到所有邻域内对象temp = np.sqrt(np.sum(np.square(X[j]-X[p])))
# 欧氏距离if(temp<=eps):N.append(p)return N
def dbscan(X,eps,min_Pts):k=-1NeighborPts = []  # array,某点领域内的对象Ner_NeighborPts = []fil = []  # 初始时已访问对象列表为空gama = [x for x in range(len(X))  ]# 初始所有点标为未访问cluster = [-1 for y in range(len(X))]while len(gama)>0:j = random.choice(gama)gama.remove(j)  #未访问列表中移除fil.append(j)   #添加入访问列表NeighborPts = findNeighbor(j,X,eps)if len(NeighborPts) < min_Pts:cluster[j] = -1   #标记为噪声点else:k = k+1cluster[j] = kfor i in NeighborPts:if i not in fil:gama.remove(i)fil.append(i)Ner_NeighborPts=findNeighbor(i,X,eps)if len(Ner_NeighborPts) >= min_Pts:for a in Ner_NeighborPts:if a not in NeighborPts:NeighborPts.append(a)if (cluster[i]==-1):cluster[i]=kreturn cluster
X1, y1 = datasets.make_circles(n_samples=1000, factor=.6,noise=.05)
X2, y2 = datasets.make_blobs(n_samples = 300, n_features = 2, centers = [[1.2,1.2]], cluster_std = [[.1]],random_state = 9)
X = np.concatenate((X1, X2))
eps = 0.08
min_Pts = 10
C = dbscan(X,eps,min_Pts)
plt.figure(figsize = (12, 9), dpi = 80)
plt.scatter(X[:,0],X[:,1],c = C)
plt.show()

聚类(四)—— 基于密度的聚类相关推荐

  1. 【数据挖掘】聚类算法 简介 ( 基于划分的聚类方法 | 基于层次的聚类方法 | 基于密度的聚类方法 | 基于方格的聚类方法 | 基于模型的聚类方法 )

    文章目录 I . 聚类主要算法 II . 基于划分的聚类方法 III . 基于层次的聚类方法 IV . 聚合层次聚类 图示 V . 划分层次聚类 图示 VI . 基于层次的聚类方法 切割点选取 VII ...

  2. 密度聚类dbscan_DBSCAN —基于密度的聚类方法的演练

    密度聚类dbscan The idea of having newer algorithms come into the picture doesn't make the older ones 'co ...

  3. DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式

    文章目录 @[toc] 一.DBSCAN聚类概述 1.伪代码 2.优点: 3.缺点: 4.与其他聚类算法比较 二.sklearn中的DBSCAN聚类算法 1.主要函数介绍: 最重要的两个参数: 其他主 ...

  4. 机器学习-无监督学习-聚类:聚类方法(二)--- 基于密度的聚类算法【DBSCAN文本聚类算法,密度最大值文本聚类算法】

    密度聚类方法的指导思想是,只要样本点的密度大于某阀值,则将该样本添加到最近的簇中. 基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一 ...

  5. matlab编程实现基于密度的聚类(DBSCAN)

    1. DBSCAN聚类的基本原理 详细原理可以参考链接: https://www.cnblogs.com/pinard/p/6208966.html 这是找到的相对很详细的介绍了,此链接基本仍是周志华 ...

  6. 【数据挖掘】基于密度的聚类方法 - DBSCAN 方法 ( DBSCAN 原理 | DBSCAN 流程 | 可变密度问题 | 链条现象 | OPTICS 算法引入 | 聚类层次 | 族序概念 )

    文章目录 I . DBSCAN 简介 II . DBSCAN 算法流程 III . DBSCAN 算法 优缺点 IV . 可变密度问题 V . 链条现象 VI . OPTICS 算法原理 VII . ...

  7. 【数据挖掘】基于密度的聚类方法 - DBSCAN 方法 ( K-Means 方法缺陷 | 基于密度聚类原理及概念 | ε-邻域 | 核心对象 | 直接密度可达 | 密度可达 | 密度连接 )

    文章目录 I . K-Means 算法在实际应用中的缺陷 II . K-Means 初始中心点选择不恰当 III . K-Means 优点 与 弊端 IV . 基于密度的聚类方法 V . 基于密度的聚 ...

  8. 机器学习 聚类篇——python实现DBSCAN(基于密度的聚类方法)

    机器学习 聚类篇--python实现DBSCAN(基于密度的聚类方法) 摘要 python实现代码 计算实例 摘要 DBSCAN(Density-Based Spatial Clustering of ...

  9. 基于密度的聚类方法-OPTICS

    在DBSCAN算法中,我们知道该算法需要用户输入半径和阀值.这显然是不靠谱的,虽然我们可以通过其他方法来优化参数的选择,但这其实不是最好的做法.  这里为了克服在聚类分析中使用一组全局参数的缺点,这里 ...

最新文章

  1. 求n!(n的阶乘)和1!+2!+....n! (阶乘求和) ----C语言实现
  2. 技术分享连载(十八)
  3. 用php来检测proxy
  4. Django与CSRF 、AJAX
  5. 文本分类数据集_181个NLP教程,481个文本数据集,Colab一键直达,无需环境配置...
  6. 前端 | 每天一个 LeetCode
  7. 工控补丁星期二:西门子、施耐德电气修复40个漏洞
  8. centos在文本中搜索字符串_Google和Baidu的搜索技巧你会吗?
  9. Illustrator 教程,如何在 Illustrator 中格式化文本?
  10. 宇瞻筹划转型 标准型内存不再是重头产品
  11. 解决:java.lang.ClassNotFoundException: org.apache.axis.wsdl.WSDL2Java
  12. Python效率之王之多进程和多线程详解
  13. Java菜鸟逆袭之入门篇(附讲解)
  14. java两个字符串相等却总返回false
  15. MySQL数据库之设置密码修改密码用户名
  16. 诺基亚n78微信显示服务器忙,诺基亚N78系统详细解析
  17. OPC UA学习笔记
  18. 操作系统复试面试问题
  19. safari下载文件_如何更改Safari下载文件夹的位置
  20. 使用FBSimulatorControl做模拟器适配测试(模拟器多开)

热门文章

  1. 【c语言中的运算符】
  2. SAP 打印配置(SPAD)解析
  3. CSS属性以及属性值(样式)
  4. 预测、迭代与优化:用AI探寻组合优化问题最优解
  5. 3G时会有两次 Activate PDP context request消息
  6. 前端兼容性问题解决方案
  7. selenium常用的浏览器窗口操作
  8. 【算法和数据结构】模拟和暴力
  9. 遗传算法求解香蕉函数的极大值
  10. 长短期记忆网络(LSTM)学习笔记