码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【scikit-learn基础】--『监督学习』之 空间聚类


    合集 - scikit-learn基础(35)
    1.【scikit-learn基础】--概述2023-12-022.【scikit-learn基础】--『数据加载』之玩具数据集2023-12-043.【scikit-learn基础】--『数据加载』之真实数据集2023-12-064.【scikit-learn基础】--『数据加载』之样本生成器2023-12-085.【scikit-learn基础】--『数据加载』之外部数据集2023-12-096.【scikit-learn基础】--『预处理』之 标准化2023-12-137.【scikit-learn基础】--『预处理』之 数据缩放2023-12-158.【scikit-learn基础】--『预处理』之 正则化2023-12-189.【scikit-learn基础】--『预处理』之 分类编码2023-12-2010.【scikit-learn基础】--『预处理』之 离散化2023-12-2111.【scikit-learn基础】--『预处理』之 缺失值处理2023-12-2212.【scikit-learn基础】--『监督学习』之 线性回归2023-12-2513.【scikit-learn基础】--『监督学习』之 岭回归2023-12-2614.【scikit-learn基础】--『监督学习』之 LASSO回归2023-12-2815.【scikit-learn基础】--『监督学习』之 支持向量机回归2023-12-3116.【scikit-learn基础】--『监督学习』之 决策树回归01-0217.【scikit-learn基础】--『监督学习』之 随机森林回归01-0318.【scikit-learn基础】--『监督学习』之 K-近邻分类01-0419.【scikit-learn基础】--『监督学习』之 逻辑回归分类01-0520.【scikit-learn基础】--『监督学习』之 贝叶斯分类01-0821.【scikit-learn基础】--『监督学习』之 决策树分类01-0922.【scikit-learn基础】--『监督学习』之 随机森林分类01-1023.【scikit-learn基础】--『监督学习』之 支持向量机分类01-1224.【scikit-learn基础】--『监督学习』之 均值聚类01-1425.【scikit-learn基础】--『监督学习』之 层次聚类01-1526.【scikit-learn基础】--『监督学习』之 谱聚类01-18
    27.【scikit-learn基础】--『监督学习』之 空间聚类01-20
    28.【scikit-learn基础】--『回归模型评估』之误差分析01-2229.【scikit-learn基础】--『回归模型评估』之偏差分析01-2430.【scikit-learn基础】--『回归模型评估』之可视化评估01-2631.【scikit-learn基础】--『回归模型评估』之准确率分析01-2832.【scikit-learn基础】--『回归模型评估』之损失分析01-3033.【scikit-learn基础】--『分类模型评估』之系数分析01-3134.【scikit-learn基础】--『分类模型评估』之评估报告02-0435.【scikit-learn基础】--模型持久化02-08
    收起

    空间聚类算法是数据挖掘和机器学习领域中的一种重要技术。

    本篇介绍的基于密度的空间聚类算法的概念可以追溯到1990年代初期。
    随着数据量的增长和数据维度的增加,基于密度的算法逐渐引起了研究者的关注。
    其中,DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是最具代表性的算法之一。

    基于密度的空间聚类算法在许多领域都有应用,例如图像处理、生物信息学、社交网络分析等。
    在图像处理中,该算法可以用于检测图像中的密集区域,用于识别物体或形状。

    1. 算法概述

    DBSCAN算法的基本思想是,对于给定的数据集,基于数据点的密度进行聚类。
    在密度高的区域,数据点更为集中,而密度低的区域数据点较为稀疏。
    基于密度的算法能够发现任意形状的簇,并且对噪声有较好的鲁棒性。

    算法的核心在于:

    1. 定义邻域:对于数据集中的每个点,其邻域是由距离该点在一定半径(通常称为Eps)内的所有点组成的
    2. 定义密度:一个点的密度是其邻域内的点的数量。如果一个点的密度超过某个阈值(通常称为MinPts),则该点被视为核心点
    3. 寻找簇:从每个核心点出发,找到所有密度可达的点,即这些点通过一系列核心点可以与该核心点相连,这些点形成一个簇
    4. 标记噪声点:不属于任何簇的点被标记为噪声点

    2. 创建样本数据

    下面,创建三种不同的样本数据,来测试DBSCAN的聚类效果。

    from sklearn.datasets import make_blobs, make_moons, make_circles
    
    fig, axes = plt.subplots(nrows=1, ncols=3)
    fig.set_size_inches((9, 3))
    
    X_moon, y_moon = make_moons(noise=0.05, n_samples=1000)
    axes[0].scatter(
        X_moon[:, 0],
        X_moon[:, 1],
        marker="o",
        c=y_moon,
        s=25,
        cmap=plt.cm.spring,
    )
    
    X_circle, y_circle = make_circles(noise=0.05, factor=0.5, n_samples=1000)
    axes[1].scatter(
        X_circle[:, 0],
        X_circle[:, 1],
        marker="o",
        c=y_circle,
        s=25,
        cmap=plt.cm.winter,
    )
    
    X_blob, y_blob = make_blobs(n_samples=1000, centers=3)
    axes[2].scatter(
        X_blob[:, 0],
        X_blob[:, 1],
        marker="o",
        c=y_blob,
        s=25,
        cmap=plt.cm.autumn,
    )
    
    plt.show()
    

    image.png

    3. 模型训练

    用scikit-learn的DBSCAN模型来训练,这个模型主要的参数有两个:

    1. eps (eps):这个参数表示邻域的大小,或者说是邻域的半径。具体来说,对于数据集中的每个点,其 eps-邻域包含了所有与该点的距离小于或等于 eps 的点。
    2. min_samples (minPts):在给定 eps-邻域内,一个点需要有多少个邻居才能被视为核心点。

    通过调节这2个参数,基于上面创建的样本数据,训练效果如下:

    from sklearn.cluster import DBSCAN
    
    # 定义
    regs = [
        DBSCAN(min_samples=2, eps=0.1),
        DBSCAN(min_samples=2, eps=0.2),
        DBSCAN(min_samples=3, eps=2),
    ]
    
    # 训练模型
    regs[0].fit(X_moon, y_moon)
    regs[1].fit(X_circle, y_circle)
    regs[2].fit(X_blob, y_blob)
    
    fig, axes = plt.subplots(nrows=1, ncols=3)
    fig.set_size_inches((9, 3))
    
    # 绘制聚类之后的结果
    axes[0].scatter(
        X_moon[:, 0],
        X_moon[:, 1],
        marker="o",
        c=regs[0].labels_,
        s=25,
        cmap=plt.cm.spring,
    )
    
    axes[1].scatter(
        X_circle[:, 0],
        X_circle[:, 1],
        marker="o",
        c=regs[1].labels_,
        s=25,
        cmap=plt.cm.winter,
    )
    
    axes[2].scatter(
        X_blob[:, 0],
        X_blob[:, 1],
        marker="o",
        c=regs[2].labels_,
        s=25,
        cmap=plt.cm.autumn,
    )
    
    plt.show()
    

    image.png

    针对3种不同的样本数据,调节参数之后,聚类的效果还不错。
    感兴趣的话,可以试试修改上面代码中的DBSCAN定义部分的参数:

    # 定义
    regs = [
        DBSCAN(min_samples=2, eps=0.1),
        DBSCAN(min_samples=2, eps=0.2),
        DBSCAN(min_samples=3, eps=2),
    ]
    

    调节不同的 min_sample和eps,看看不同的聚类效果。

    4. 总结

    总的来说,基于密度的空间聚类算法是一种强大的工具,能够从数据中提取有价值的信息。
    但是,如同所有的算法一样,它也有其局限性,需要在合适的应用场景中使用,才能达到最佳的效果。

    它的优势主要在于:

    1. 能够发现任意形状的簇
    2. 对噪声和异常值有较好的鲁棒性
    3. 不需要提前知道簇的数量

    不足之处则在于:

    1. 对于高维数据,密度计算可能会变得非常复杂和计算量大
    2. 算法的性能高度依赖于密度阈值的选择
    3. 在处理密度变化较大的数据时可能效果不佳
  • 相关阅读:
    CSS之常用属性、元素的显示模式、盒模型
    vue3中sync修饰符的使用
    【Python】 使用Apache Tika和Python实现zip、csv、xls等多格式文件文本内容提取
    terminal下环境不统一导致的程序报错(powersell改cmd)
    从0开始刷力扣
    MySQL数据库管理
    Leetcode680:验证回文串 ||
    开放式无线运动耳机怎么挑选,适合在运动佩戴的几款耳机推荐
    3.Linux文件管理命令-----ls显示文件名
    图像分割竟能如此丝滑、高清?大规模二分图像分割数据集DIS5K解读
  • 原文地址:https://www.cnblogs.com/wang_yb/p/17976448
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号