密度聚类亦称"基于密度的聚类" (density-based clustering) ,此类算法假设聚类结构能通过样本分布的紧密程度确定。通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。

1、密度聚类算法简介

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种著名的密度聚类算法,它基于一组"邻域" (neighborhood)参数(ϵ\epsilonϵ, MinPts) 来刻画样本分布的紧密程度。
ϵ\epsilonϵ (eps) 邻域,对xj∈Dx_j\in Dxj​∈D,其ϵ\epsilonϵ-邻域包含样本集D 中与xjx_jxj​的距离不大于 ϵ\epsilonϵ 的样本,即Nϵ(xj)={xi∈D∣Ddist(xi,xj)≤ϵ}N_\epsilon (x_j)=\{x_i\in D\: |D\: dist(x_i,x_j)\leq \epsilon \}Nϵ​(xj​)={xi​∈D∣Ddist(xi​,xj​)≤ϵ}
DBSCAN相关术语

  • 核心对象(core object): 若xjx_jxj​的ϵ\epsilonϵ-邻域至少包含MinPts 个样本,则 xjx_jxj​是一个核心对象;
  • 噪声(noise):样本集D 中不属于任何簇的样本被认为是噪声(noise)或异常(anomaly)样本。
  • DBSCAN 将"簇"定义为:由密度可达关系导出的最大的密度相连样本集合。

DBSCAN 算法先任选数据集中的一个核心对象为"种子" (seed) ,再由此出发确定相应的聚类簇。算法先根据给定的邻域参数(ϵ\epsilonϵ, MinPts) 找出所有核心对象;然后以任一核心对象为出发点,找出由其密度可达的样本生成聚类簇,直到所有核心对象均被访问过为止。

2、Sklearn代码实现

import matplotlib.pyplot as plt
import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn import datasetsdef db_scan():# 加载样本数据sample = load_data()data = sample.data# 创建模型model = DBSCAN(eps=1, min_samples=3)# 模型训练model.fit(data)# 聚类生成的标签值labels = model.labels_n_clusters = len(pd.Series(labels))print("各簇的样本数目:", pd.Series(labels).value_counts())# 散点颜色colors = ['r', 'b', 'g', 'c', 'm']# 散点形状markers = ['o', 's', '^', 'x']# 绘制簇散点图plt.figure('db_scan')for i in range(n_clusters):# 按簇循环绘制x = data[labels == i]# 样本的前两个特征值plt.scatter(x=x[:, 0], y=x[:, 1], marker=markers[i % 4], color=colors[i % 5], alpha=0.5)# 绘制噪点noises = data[labels == -1]plt.scatter(x=noises[:, 0], y=noises[:, 1], marker='+', s=80, color='k')# 坐标轴,获取样本特征名称plt.xlabel("{}".format(sample.feature_names[0]))plt.ylabel("{}".format(sample.feature_names[1]))plt.title("Test DBSCAN(eps=1, min_samples=3)")plt.show()def db_scan_eps():"""计算向量之间的距离,用于测算Eps参数值:return:"""from sklearn.metrics.pairwise import euclidean_distancesimport numpy as np# 加载数据sample = load_data()data = sample.data# 计算向量之间的欧氏距离dist = euclidean_distances(data)# 计算每个样本特征的平均值,代表样本,作为x轴x = np.mean(data, axis=1)# dist[0]代表第一个样本与所有样本的距离,作为y轴plt.scatter(x=x, y=dist[0], marker='.', color='r')plt.xlabel("每个样本的特征均值")plt.ylabel("样本间距离")plt.title("Compute DBSCAN Epsilon")plt.show()def load_data():"""加载鸢尾花数据集"""return datasets.load_iris()if __name__ == '__main__':import matplotlib as mpl# 汉字字体,优先使用楷体,如果找不到楷体,则使用黑体mpl.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong']# 展示向量之间的距离,测算Eps参数值# db_scan_eps()# DBSCAN算法db_scan()

2.1、运行方法 db_scan_eps 测算Eps参数值,效果图,如下:

备注:截图后,手工添加蓝色方框,用于标明eps值在区间[1, 2]存在断层。

2.2、运行方法 db_scan,效果图,如下:


说明:eps距离为1时,整好可分为两类;距离减少后,出现噪点,且不能整好划分为三类(鸢尾花数据集本身是三类)。DBSCAN 算法虽然不用预设簇数,但eps参数的设置是关键,作用与簇数类似。

机器学习之密度聚类(DBSCAN)相关推荐

  1. 机器学习实战——密度聚类算法

    机器学习实战--密度聚类算法 1 密度聚类 2 sklearn中的实现 1 密度聚类 密度聚类假设聚类结构能够通过样本分布的密集程度确定,通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接 ...

  2. 【Python-ML】SKlearn库密度聚类DBSCAN模型

    # -*- coding: utf-8 -*- ''' Created on 2018年1月25日 @author: Jason.F @summary: 无监督聚类学习-基于密度 空间的聚类算法(De ...

  3. Python基于聚类算法实现密度聚类(DBSCAN)计算

    本文实例讲述了Python基于聚类算法实现密度聚类(DBSCAN)计算.分享给大家供大家参考,具体如下: 算法思想 基于密度的聚类算法从样本密度的角度考察样本之间的可连接性,并基于可连接样本不断扩展聚 ...

  4. dbscan聚类算法matlab_密度聚类DBSCAN、HDBSCAN(转)

    # 密度聚类DBSCAN.HDBSCAN DBSCAN DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声 ...

  5. (十八)密度聚类DBSCAN

    密度聚类DBSCAN DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法) 是一种很典型 ...

  6. 机器学习强基计划7-5:图文详解密度聚类DBSCAN算法(附Python实现)

    目录 0 写在前面 1 密度聚类 2 DBSCAN算法 3 Python实现 3.1 算法复现 3.2 可视化实验 0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用.&qu ...

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

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

  8. 密度聚类 DBSCAN python实现

    python代码例子参考另一篇博客: https://blog.csdn.net/jacke121/article/details/117736855 一.前言 二.DBSCAN聚类算法 三.参数选择 ...

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

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

  10. 机器学习之密度聚类算法

    基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一个区域中的样本密度大于某个阈值,就把它划入与之相近的簇中. 密度聚类从样本密度的角度 ...

最新文章

  1. QIIME 2用户文档. 19使用q2-vsearch聚类OTUs(2019.7)
  2. BugkuCTF多种方法解决
  3. java我们一起打雪仗_我们一起打雪仗作文
  4. 入坑-DM导论-第一章绪论笔记
  5. Apollo 刨析:简介
  6. css学习_css3过渡
  7. Dataframe 新增一列, apply 通用方法
  8. 事业单位计算机知识c语言,事业单位考试计算机基础知识C语言程序设计
  9. 15行代码抓取兰亭序全文单字高清字帖
  10. Julia 语言可重用性高竟源于缺陷和不完美?
  11. mysql的管理与优化_MySQL管理与优化(9)_MySQL
  12. 传智播客java学习内容
  13. 最详细的双目摄像头测距离(深度)的原理
  14. 使用excel 将度分秒转换为WGS84经纬度
  15. python植物大战僵尸代码
  16. 5.3 FIR低通滤波器的设计
  17. css实现文本溢出时显示省略号(单行)
  18. 过往云烟~如梦随风飘!!!
  19. 学php应该怎么学习数学,数学难学,数学到底该怎么学?
  20. CSS——浮动的清除

热门文章

  1. python爬去微博签到数据_GitHub - fs6/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...
  2. 关闭计算机主机还亮着,计算机关闭后,主机电源指示灯仍然亮起
  3. 修改文件 火车票买下铺_12306修改代码买下铺?12306码农太弱了吧 (转载)
  4. 离散数学(第二版) 第一章、第二章习题
  5. swift 网络----利用URLSession的Data Task下载单张图片(包含图片的增量下载)
  6. pulse 去马赛克软件_一款号称能去马赛克的软件,却在面对游戏角色时“翻了车”...
  7. Java常用开发工具推荐
  8. Java入门基础知识点总结(详细篇)
  9. 信息学奥赛一本通(C++版)
  10. 赖世雄英语学习三原则