速通机器学习12|DBSCAN密度聚类
目录前言一、前置对比K-Means聚类固有缺陷二、DBSCAN算法核心定义三、核心基础要点四、DBSCAN算法实现流程标准三步法五、DBSCAN与K-Means核心区别六、Sklearn实战核心代码前言K-Means作为经典的划分式聚类算法仅适用于分布规整的球状数据集存在诸多固有局限。为解决其无法适配不规则聚类、难以处理噪声数据等问题本文引入DBSCAN密度聚类算法。一、前置对比K-Means聚类固有缺陷K-Means 核心优缺点如上图所示面对环形、不规则的复杂数据分布时K-Means无法贴合数据真实特征聚类会错误划分簇边界。本该是外围环形一簇、内部三簇的四组数据结构无法被精准识别充分体现了K-Means的聚类局限性。优点算法原理简单易懂、训练运算速度快计算开销小适配分布规则的球状凸数据集是基础聚类的首选算法。缺点需人工指定K值聚类簇数K为手动设置的超参数算法无法自适应数据分布求解最优簇数主观性较强适配场景单一仅对球状、凸型规整数据集友好无法识别环形、不规则、非凸形态的聚类簇抗干扰能力弱质心计算依赖全局样本均值对噪声点、离群点高度敏感异常数据会直接偏移簇中心降低聚类精度。二、DBSCAN算法核心定义DBSCAN基于密度的带噪声空间聚类算法核心思想将簇定义为密度相连的样本点最大集合通过识别高密度区域实现聚类可在含噪声的空间数据集中挖掘任意形状的聚类簇。算法无需预设聚类数量K依靠邻域半径ε与密度阈值MinPts两个核心参数自动划分簇与噪声。三、核心基础要点1. 核心对象若某样本点的邻域内样本数量大于等于密度阈值该点为核心点是聚类簇的骨架支撑点。2. ε邻域半径邻域以任意样本为圆心、为半径的圆形空间区域用于判定样本密度范围。3. 直接密度可达若点A为核心点点B落在A的邻域内则B对A直接密度可达两点归属同一簇。4. 密度可达存在一串连续的核心点序列首尾样本可通过多段「直接密度可达」串联即为密度可达同属一个聚类簇。5. 边界点自身邻域样本数不足密度阈值非核心点但落在任意核心点的邻域内依附核心点归属簇不生成新簇。6. 离群点噪声点既不是核心点也不隶属于任何核心点的邻域范围密度极低判定为噪声、异常样本不归属任何簇。四、DBSCAN算法实现流程标准三步法输入原始无标签数据集、邻域半径、最小密度阈值数据初始化读取完整数据集标记所有样本为未访问状态参数配置人工指定邻域半径与最小样本密度阈值密度迭代聚类遍历所有未访问样本判定核心点、边界点、噪声点通过密度连通规则合并高密度区域迭代至所有样本遍历完成输出结果自动生成若干聚类簇与独立噪声点。五、DBSCAN与K-Means核心区别对比维度K-MeansDBSCAN聚类原理划分式聚类质心距离密度聚类邻域密度连通是否需要K值必须手动指定无需K自动生成簇数适配簇形状仅球状、凸数据集任意不规则、非凸簇噪声处理无法识别噪声受异常值干扰自动识别并分离噪声点六、Sklearn实战核心代码基于上一章K-Means聚类实验数据集完成DBSCAN密度聚类建模实战并通过参数遍历寻优筛选最优超参数实现聚类效果升级速通机器学习 11 K-Means 聚类-CSDN博客python # 导入所需工具库 import pandas as pd import numpy as np from sklearn.cluster import DBSCAN from sklearn.preprocessing import StandardScaler from sklearn.metrics import silhouette_score # 数据读取与特征筛选 datas pd.read_table(rD:\pythoncode2\bigdata_ai40\机械学习\data\data.txt, sep\s) data datas.iloc[:, 1:] # 归一化 scaler StandardScaler() data_scaled scaler.fit_transform(data) # 聚类 eps_list [0.2,0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,2.0] min_samples_list [2, 3, 4, 5] best_score -1 canshu_list [0, 1] for eps in eps_list: for min_samples in min_samples_list: dbs_c DBSCAN(epseps, min_samplesmin_samples) labels dbs_c.fit_predict(data_scaled) n_clusters len(set(labels)) - (1 if -1 in labels else 0) if n_clusters 2: score silhouette_score(data_scaled, labels) print(feps{eps}, min_samples{min_samples}, 簇数{n_clusters}, 轮廓系数{score:.4f}) if score best_score: best_score score canshu_list[0] eps canshu_list[1] min_samples print(f\n最优参数: eps{canshu_list[0]}, min_samples{canshu_list[1]}) dbs DBSCAN(epscanshu_list[0], min_samplescanshu_list[1]) labels dbs.fit_predict(data_scaled) score silhouette_score(data_scaled, labels) print(f最优轮廓系数: {score:.4f})八、核心考点总结DBSCAN是密度聚类核心三要素核心点、边界点、噪声点依靠邻域与密度阈值判定样本属性核心优势无需要K值、支持任意形状簇、自动降噪核心区别K-Means找距离最近DBSCAN找密度相连。