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

  • 1 密度聚类
  • 2 sklearn中的实现

1 密度聚类

密度聚类假设聚类结构能够通过样本分布的密集程度确定,通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。
DBSCAN 是一种很典型的密度聚类算法,给定领域参数的半径为 e ,最小样本点为 MinPts 。该算法中几个较重要的概念如下:

  • e 邻域:给定对象半径为 e 内的区域称为该对象的 e 邻域;
  • 核心对象:如果给定对象 e 邻域内的样本点数大于等于 MinPts,则称该对象为核心对象;
  • 边界对象:在半径 e 内点的数量小于 MinPts,但是落在核心点的邻域内。
  • 噪声对象:既不是核心对象也不是边界对象的样本。
  • 直接密度可达:对于样本集合 D,如果样本点 q 在点 p 的 e 邻域内,并且 p 为核心对象,那么对象 q 从对象 p 直接密度可达。
  • 密度可达:对于样本集合 D,给定一串样本点 p1,p2….pn,p=p1,q=pnp_1,p_2….p_n,p= p_1,q= p_np1​,p2​….pn​,p=p1​,q=pn​,假如对象 pip_ipi​ 从 pi−1p_{i-1}pi−1​ 直接密度可达,那么对象 q 从对象 p 密度可达。
  • 密度相连:存在样本集合 D 中的一点 k,如果对象 k 到对象 p 和对象 q 都是密度可达的,那么 p 和 q 密度相联。
    以下图为例对上述概念举例说明:

    DBSCAN 算法的具体流程如下
  • 1 初始化核心对象集合为空集:Ω=∅Ω=∅Ω=∅
  • 2 寻找核心对象:遍历所有的样本点 xi,i=1,2,...,Nx_i,i=1,2,...,Nxi​,i=1,2,...,N,计算 Ne(xi)N_e(x_i)Ne​(xi​),如果∣Ne(xi)∣≥MinPts|N_e(x_i)|≥MinPts∣Ne​(xi​)∣≥MinPts,则 Ω=Ω⋂{xi}Ω=Ω⋃\{x_i\}Ω=Ω⋂{xi​}
  • 3 迭代:以任一未访问过的核心对象为出发点,找出所有其密度可达的样本生成的聚类簇,直到所有的核心对象都被访问为止。

注意:核心点以内的所有点都与核心点为同一类,所以如果某两个聚类簇集中有一个点为重复,那两个聚类簇应该合并为一类,例如:类别 1:[1,2,4,6,8],类别 2:[3,6,7,9,10,99]。这两个集合最初是两个类别,但是因为有共同点 6,那么他俩应当合并为 1 类。上述算法可以简单的表述为如下形式:
1)求出所有点的距离矩阵 dis=[n,n], n 为训练集的个数。
2)如果 e 取值为 3,那么 dis 的每一行中 >3 的所有点个数的和只要 >MinPts ,则为 1 个类别。
3)所有这些类别进行重复检查,只要有重复值则合并,直到没有重复。
4)这些没有重复的类别就是最终形成的类别。

2 sklearn中的实现

class sklearn.cluster.DBSCAN(eps=0.5, min_samples=5, metric=’euclidean’, metric_params=None, algorithm=’auto’, leaf_size=30, p=None, n_jobs=None)

主要参数说明

  • eps: 即邻域参数,默认值是 0.5。一般需要多次选择之后确定。eps 过大,则更多的点会落在核心对象的邻域内,聚类的类别数可能会减少,即把本不应该是一类的样本会被划为一类;反之则类别数可能会增大,本来是一类的样本却被划分开。
  • min_samples:样本点要成为核心对象所需要的邻域内样本数阈值。默认值是5,通常和 eps 一起调参。在 eps 一定的情况下,min_samples 过大,则核心对象会过少,此时簇内部分本来是一类的样本可能会被标为噪音点,类别数也会变多,若 min_samples 过小的话,则会产生大量的核心对象,可能会导致类别数过少。
  • metric:最近邻距离度量参数。可以使用的距离度量参数有:欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离等。默认的是欧式距离。
  • algorithm:最近邻搜索算法参数,用于计算两点间距离并找出最近邻的点。共有 4 种可选输入, brute 是蛮力实现,kd_tree 是 KD 树实现,ball_tree 是球树实现, auto 则会在三种算法中做权衡,选择一个拟合最好的最优算法。一般使用默认的 auto 即可。
  • leaf_size:最近邻搜索算法参数,为使用 KD 树或者球树时, 停止建子树的叶子节点数量的阈值。
  • p: 最近邻距离度量参数。只用于闵可夫斯基距离和带权重闵可夫斯基距离中 p 值的选择,p=1 为曼哈顿距离, p=2 为欧式距离。如果使用默认的欧式距离不需要管这个参数。
# make_moons是月型的数据集
from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] #中文显示问题
plt.rcParams['axes.unicode_minus'] = False #负数显示问题# 构造数据集
n_samples = 1500
X,y = make_moons(n_samples=n_samples, noise=.05)plt.subplot(1,2,1)
plt.scatter(X[:,0],X[:,1],c=y)
plt.title('原始图像')# 训练对象并调整参数值
y_predict = DBSCAN(eps=0.2, min_samples=5).fit_predict(X) plt.subplot(1,2,2)
plt.scatter(X[:,0],X[:,1],c=y_predict)
plt.title('预测图像')

机器学习实战——密度聚类算法相关推荐

  1. 机器学习实战——层次聚类算法

    机器学习实战--层次聚类算法 1 层次聚类概述 2 sklearn中的实现 1 层次聚类概述 层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构. 数据集的划分可采用"自底向上& ...

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

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

  3. 【Python机器学习实战】聚类算法——层次聚类(HAC)和DBSCAN

    层次聚类和DBSCAN 1.层次聚类 下面这样的结构应该比较常见,这就是一种层次聚类的树结构,层次聚类是通过计算不同类别点的相似度创建一颗有层次的树结构,在这颗树中,树的底层是原始数据点,顶层是一个聚 ...

  4. 密度聚类算法DBSCAN实战及可视化分析

    密度聚类算法DBSCAN实战及可视化分析 目录 密度聚类算法DBSCAN实战及可视化分析 DBSCAN实战及聚类效果可视化 构建分类算法获得预测推理能力 DBSCAN实战及聚类效果可视化 DBSCAN ...

  5. 机器学习中的聚类算法有哪几种?

    目前,聚类算法被广泛应用于用户画像.广告推荐.新闻推送和图像分割等等.聚类算法是机器学习中一种"数据探索"的分析方法,它帮助我们在大量的数据中探索和发现数据的结构.那么机器学习中的 ...

  6. 基于Spark的机器学习实践 (九) - 聚类算法

    0 相关源码 1 k-平均算法(k-means clustering)概述 1.1 回顾无监督学习 ◆ 分类.回归都属于监督学习 ◆ 无监督学习是不需要用户去指定标签的 ◆ 而我们看到的分类.回归算法 ...

  7. 机器学习面试题——聚类算法

    机器学习面试题--聚类算法 提示:互联网大厂经常考的传统机器学习算法 文章目录 机器学习面试题--聚类算法 @[TOC](文章目录) 题目 k-means介绍一下,K-means的过程 k-means ...

  8. 机器学习入门:聚类算法-5

    机器学习入门:聚类算法 1.实验描述 本实验先简单介绍了一下各聚类算法,然后利用鸢尾花数据集分别针对KMeans聚类.谱聚类.DBSCAN聚类建模,并训练模型:利用模型做预测,并使用相应的指标对模型进 ...

  9. 机器学习之密度聚类及代码示例

    一.密度聚类 密度聚类的思想,在于通过计算样本点的密度的大小来实现一个簇/类别的形成,样本点密度越大,越容易形成一个类,从而实现聚类. 密度聚类算法可以克服基于距离的聚类算法只能发现凸型集合的缺点,其 ...

最新文章

  1. GEB:中科院南土所梁玉婷组-大陆尺度下稻田土壤微生物β多样性的纬度分布特征...
  2. UIUC教授季姮:叫我带头人,而不是女性带头人(附视频)
  3. 正则表达式匹配单行注解
  4. Linux的secureCRT设置字体大小
  5. 【渝粤题库】国家开放大学2021春1703农村发展理论与实践题目
  6. 韩顺平php视频笔记48 函数进阶
  7. 让元素固定_49种元素对钢铁性能的影响
  8. ffmpeg (四):ffmpeg, ffplay, ffprobe用法
  9. 《软件测试》实验一:测试入门
  10. 【小墩墩学Android】开发环境(一)
  11. 普元EOS之我要使用多数据源
  12. 文献管理软件 EndNote20.1 for Windows版
  13. NOI模拟(5.14) JSOID1T3 绝地反击 (bzoj5316)
  14. 米勒-拉宾(MillerRabbin)素性测试算法模板
  15. Date Wed Mar 17 2021 13:52:00 GMT+0800 (中国标准时间) 转标准的日期格式
  16. 5分钟学会使用Excel插入数据统计图
  17. html文本框监听粘贴,HTML5将粘贴板上的图片粘贴到文本框中
  18. Go语言案例(一)音乐播放器
  19. VMware Workstation导出的ovf格式虚拟机 不能用VirtualBox导入
  20. 简单介绍一下chatGPT

热门文章

  1. openwrt自动启动脚本
  2. RK3568平台开发系列讲解(音视频篇)AudioTrack音频流数据传输
  3. EditorGridPanel 加载问题
  4. 90°和180°的连接器有什么区别?
  5. 辣鸡百度云PC端密码输入老是错误的解决办法(即使你输入的是对的)
  6. zigbee之Zstack协议栈使用
  7. 猿创征文|Python3,10分钟写了一个WIFI 万(破) 能 (解) 钥 (神) 匙 (器),YYDS。
  8. 【Linux】—— Linux 环境搭建
  9. 为什么大多数银行和金融机构服务使用Java?
  10. dataframe将某列的空值填充为12