密度聚类算法(DBSCAN)实验案例

这篇具有很好参考价值的文章主要介绍了密度聚类算法(DBSCAN)实验案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

密度聚类算法(DBSCAN)实验案例

描述

DBSCAN是一种强大的基于密度的聚类算法,从直观效果上看,DBSCAN算法可以找到样本点的全部密集区域,并把这些密集区域当做一个一个的聚类簇。DBSCAN的一个巨大优势是可以对任意形状的数据集进行聚类。

本任务的主要内容:

1、 环形数据集聚类

2、 新月形数据集聚类

3、 轮廓系数评估指标应用

源码下载

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    matplotlib   	3.3.4
    numpy 			1.19.5
    scikit-learn	0.24.2
    

分析

本实验包含三个任务:环形数据集聚类、新月数据集聚类以及轮廓系数评估指标的使用,数据集均由sklearn.datasets模块生成。为了直观观察DBSCAN的优势,任务中还引入了前面学过的多种聚类算法进行对比。

本实验涉及以下几个环节:

1)子任务一、环形数据聚类

1.1 数据集的生成

1.2 使用K-Means、MeanShift、Birch算法进行聚类并可视化

1.3 使用DBSCAN聚类并可视化

2)子任务二、新月数据集聚类

2.1 数据集的生成

2.2 使用K-Means、MeanShift、Birch算法进行聚类并可视化

2.3 使用DBSCAN聚类并可视化

3)聚类评估指标(轮廓系数)案例实践

3.1 数据集生成

3.2 聚类并评估效果

实施

1、环形数据集聚类

任务描述:

1、使用scikit-learn生成环形数据集;

2、将数据集聚成右侧3个类别。

密度聚类算法(DBSCAN)实验案例
密度聚类算法(DBSCAN)实验案例

1.1 生成环形数据集
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

# 生成环形数据集(500个样本)
X1, y1=datasets.make_circles(n_samples=500, factor=0.5, noise=0.07, random_state=0)

# 生成点块数据集(80个样本)
X2, y2 = datasets.make_blobs(n_samples=80, n_features=2, centers=[[1.2, 1.2]], cluster_std=[[0.15]], random_state=0)

# 合并成一个数据集,生成散点图
X = np.concatenate((X1, X2))
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

显示结果:

密度聚类算法(DBSCAN)实验案例

1.2 分别使用K-Means、MeanShift、Birch算法进行聚类
from sklearn.cluster import KMeans, MeanShift, Birch

# 尝试三种聚类模型,都不能达到目的
y_pred = KMeans(3).fit_predict(X) # KMeans

# y_pred = Birch(n_clusters=3).fit_predict(X) # Birch
# y_pred = MeanShift().fit_predict(X) # MeanShift
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

显示结果:

密度聚类算法(DBSCAN)实验案例

从算法的输出中可以看到,对于环形数据集,上述三种聚类算法均不能很好地实现任务规定的聚类目标。

1.3 使用DBSCAN算法(不指定参数)
from sklearn.cluster import DBSCAN

# 使用无参数的DBSCAN聚类,发现模型将所有样本归为了一类
y_pred = DBSCAN().fit_predict(X)

# 画散点图
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

显示结果:

密度聚类算法(DBSCAN)实验案例

可以看到,不使用参数的DBSCAN算法,将所有数据分成了一类。

1.4 指定DBSCAN算法的参数

DBSCAN算法聚类的结果依赖于调参,该算法的两个主要参数eps和min_samples,对于聚类结果的影响很大。

# eps-临近半径
# min_samples-最小样本数
# 指定参数,调参,任务完成(聚成内、中、外3类)
y_pred = DBSCAN(eps=0.2, min_samples=2).fit_predict(X)

# 画散点图
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

输出结果:
密度聚类算法(DBSCAN)实验案例

可以看到,通过调参,DBSCAN算法完美地将数据集按指定要求聚成了3类。

2、新月数据集聚类

任务描述:

1、使用scikit-learn生成新月数据集;

2、将数据集聚成右侧上下2个类别。
密度聚类算法(DBSCAN)实验案例
密度聚类算法(DBSCAN)实验案例

2.1 生成数据集
import matplotlib.pyplot as plt
from sklearn import datasets

# 生成弯月数据集(500个样本)
X, y = datasets.make_moons(500, noise = 0.1, random_state=99)

# 显示散点图
plt.scatter(X[:, 0], X[:, 1], s = 100, alpha = 0.6, cmap = 'rainbow')

plt.show()

显示结果:

密度聚类算法(DBSCAN)实验案例

2.2 尝试K-Means、MeanShift、Birch算法
from sklearn.cluster import KMeans, MeanShift, Birch

# 尝试三种聚类模型,都不能达到目的
y_pred = KMeans(2).fit_predict(X) # KMeans

# y_pred = Birch(n_clusters=2).fit_predict(X) # Birch
# y_pred = MeanShift().fit_predict(X) # MeanShift
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s = 100, alpha = 0.6, cmap = 'rainbow')

plt.show()

显示结果:(对于该数据集,上述三种聚类算法不能很好地实现指定聚类目标。)

密度聚类算法(DBSCAN)实验案例

2.3 使用DBSCAN聚类算法,不指定参数
from sklearn.cluster import DBSCAN

# 使用DBSCAN算法(不指定参数)
y_pred = DBSCAN().fit_predict(X)

# 画散点图
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s = 100, alpha = 0.6, cmap = 'rainbow')

plt.show()

显示结果:

密度聚类算法(DBSCAN)实验案例

2.4 使用DBSCAN聚类算法,指定参数
# 指定参数,调参,任务完成(聚成上下2类)
y_pred = DBSCAN(eps=0.2, min_samples=9).fit_predict(X)

# 画散点图
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s = 100, alpha = 0.6, cmap = 'rainbow')

plt.show()

显示结果:

密度聚类算法(DBSCAN)实验案例

通过调整两个指定参数,DBSCAN算法按照要求完成了新月数据集的聚类,DBSCAN算法的一大优势是可以对任意形状的数据集进行聚类。

3、使用轮廓系数(silhouette_score)来评估聚类

任务描述:

轮廓系数(silhouette_score)指标是聚类效果的评价方式之一(前面我们还使用了兰德指数-adjusted_rand_score,注意它们之间的区别)。轮廓系数指标不关注样本的实际类别,而是通过分析聚类结果中样本的内聚度和分离度两种因素来给出成绩,取值范围为(-1,1),值越大代表聚类的结果越合理。

3.1 生成数据集
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

# 使用数据生成器随机生成500个样本,每个样本2个特征
X, y = make_blobs(n_samples=500, n_features=2, centers=[[-1,-1], [0.5,-1]], cluster_std=[0.2, 0.3], random_state=6)

# 画出散点图
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

显示结果:

密度聚类算法(DBSCAN)实验案例

3.2 使用轮廓系数来评估聚类结果
from sklearn.metrics import silhouette_score # 轮廓系数评估函数
from sklearn.cluster import MeanShift

# 使用MeanShift聚类
y_pred = MeanShift().fit_predict(X)

# 画出聚类散点图
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show() 

# 评估轮廓系数
score = silhouette_score(X, y_pred)
print('score: ', score)

密度聚类算法(DBSCAN)实验案例文章来源地址https://www.toymoban.com/news/detail-482947.html

到了这里,关于密度聚类算法(DBSCAN)实验案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • KMeans+DBSCAN密度聚类+层次聚类的使用(文末送书)

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 1.KMeans聚类算法 2.DBSCAN密度聚类算法 3.层次聚类 4.实战案例 4.1数据集介绍 4.2加载数据

    2024年02月07日
    浏览(31)
  • 【机器学习】聚类算法-DBSCAN基础认识与实战案例

    在机器学习中,聚类是一种常见的无监督学习方法,它的目标是将数据集中的数据点分成不同的组,每个组之间具有相似的特征。聚类可以用于各种应用程序,如图像分割,社交媒体分析,医疗数据分析等。DBSCAN是一种聚类算法,它被广泛应用于各种领域。 DBSCAN(Density-Bas

    2024年04月15日
    浏览(39)
  • 基于DBSCAN密度聚类的风电-负荷场景削减方法

    ​ 1 主要内容 基于密度聚类的数据预处理: 场景提取: 算法流程: 2 部分程序 3 程序结果 4 下载链接 该程序复现文章《氢能支撑的风-燃气耦合低碳微网容量优化配置研究》第三章内容,实现的是基于DBSCAN密度聚类的风电-负荷场景生成与削减模型,首先,采集风电、电负

    2024年02月05日
    浏览(37)
  • 聚类算法--DBSCAN算法

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个基于密度的聚类算法。算法把簇看作数据空间中由低密度区域分割开的高密度对象区域;将足够高密度的区域划为簇,可以在有噪音的数据集中发现任意形状的聚类。 在DBSCAN 算法中有两个重要的参数: Eps 和 MinPtS 。

    2024年01月21日
    浏览(31)
  • DBSCAN聚类算法

    DBSCAN (density-based spatial clustering of applications with noise),即“具有噪声的基于密度的空间聚类应用”。它的原理是识别特征空间的“拥挤”区域中的点,在这些区域中许多点靠在一起,这些区域称为特征空间中的 密集 区域。密集区域最终将有相对较空的区域分隔开。 在密集区

    2024年02月06日
    浏览(29)
  • DBSCAN聚类算法——MATLAB实现

        声明:本文修改自《 数学建模清风 》老师的代码    DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪

    2024年02月11日
    浏览(32)
  • 【机器学习】DBSCAN聚类算法(含Python实现)

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,可以将数据点分成不同的簇,并且能够识别噪声点(不属于任何簇的点)。 DBSCAN聚类算法的基本思想是: 在给定的数据集中,根据每个数据点周围其他数据点的密度情况,将数据点分为核心点

    2023年04月23日
    浏览(34)
  • 毫米波雷达点云 DBSCAN聚类算法

    聚类的目的是将一组数据点划分为具有相似特征或属性的组或簇。通过聚类分析,我们可以识别出数据中的内在模式、结构和关联关系,从而获得对数据的更深入理解。 具体来说,聚类的目的可以分为以下三部分: 发现数据的内在结构: 聚类可以将数据分成簇,这些簇可能

    2024年02月06日
    浏览(34)
  • 深度解读DBSCAN聚类算法:技术与实战全解析

    探索DBSCAN算法的内涵与应用,本文详述其理论基础、关键参数、实战案例及最佳实践,揭示如何有效利用DBSCAN处理复杂数据集,突破传统聚类限制。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智

    2024年02月05日
    浏览(36)
  • C# | DBSCAN聚类算法实现 —— 对直角坐标系中临近点的点进行聚类

    聚类算法是一种常见的数据分析技术,用于将相似的数据对象归类到同一组或簇中。其中,DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够有效地识别出不同形状和大小的簇,同时还能标识出噪声数据。本篇博客将介绍聚类算法的概念

    2024年02月09日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包