- 机器学习基础
- ML - 首页
- ML - 简介
- ML - 入门
- ML - 基本概念
- ML - 生态系统
- ML - Python 库
- ML - 应用
- ML - 生命周期
- ML - 必备技能
- ML - 实现
- ML - 挑战与常见问题
- ML - 局限性
- ML - 真实案例
- ML - 数据结构
- ML - 数学基础
- ML - 人工智能
- ML - 神经网络
- ML - 深度学习
- ML - 获取数据集
- ML - 分类数据
- ML - 数据加载
- ML - 数据理解
- ML - 数据准备
- ML - 模型
- ML - 监督学习
- ML - 无监督学习
- ML - 半监督学习
- ML - 强化学习
- ML - 监督学习 vs. 无监督学习
- 机器学习数据可视化
- ML - 数据可视化
- ML - 直方图
- ML - 密度图
- ML - 箱线图
- ML - 相关矩阵图
- ML - 散点矩阵图
- 机器学习统计学
- ML - 统计学
- ML - 均值、中位数、众数
- ML - 标准差
- ML - 百分位数
- ML - 数据分布
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假设
- ML中的回归分析
- ML - 回归分析
- ML - 线性回归
- ML - 简单线性回归
- ML - 多元线性回归
- ML - 多项式回归
- ML中的分类算法
- ML - 分类算法
- ML - 逻辑回归
- ML - K近邻算法 (KNN)
- ML - 朴素贝叶斯算法
- ML - 决策树算法
- ML - 支持向量机
- ML - 随机森林
- ML - 混淆矩阵
- ML - 随机梯度下降
- ML中的聚类算法
- ML - 聚类算法
- ML - 基于中心点的聚类
- ML - K均值聚类
- ML - K中心点聚类
- ML - 均值漂移聚类
- ML - 层次聚类
- ML - 基于密度的聚类
- ML - DBSCAN 聚类
- ML - OPTICS 聚类
- ML - HDBSCAN 聚类
- ML - BIRCH 聚类
- ML - 亲和传播
- ML - 基于分布的聚类
- ML - 凝聚层次聚类
- ML中的降维
- ML - 降维
- ML - 特征选择
- ML - 特征提取
- ML - 向后消除法
- ML - 前向特征构造
- ML - 高相关性过滤器
- ML - 低方差过滤器
- ML - 缺失值比率
- ML - 主成分分析
- 强化学习
- ML - 强化学习算法
- ML - 利用与探索
- ML - Q学习
- ML - REINFORCE 算法
- ML - SARSA 强化学习
- ML - 演员-评论家方法
- 深度强化学习
- ML - 深度强化学习
- 量子机器学习
- ML - 量子机器学习
- ML - 使用 Python 的量子机器学习
- 机器学习杂项
- ML - 性能指标
- ML - 自动工作流程
- ML - 提升模型性能
- ML - 梯度提升
- ML - 自举汇聚 (Bagging)
- ML - 交叉验证
- ML - AUC-ROC 曲线
- ML - 网格搜索
- ML - 数据缩放
- ML - 训练和测试
- ML - 关联规则
- ML - Apriori 算法
- ML - 高斯判别分析
- ML - 成本函数
- ML - 贝叶斯定理
- ML - 精确率和召回率
- ML - 对抗性
- ML - 堆叠
- ML - 轮次
- ML - 感知器
- ML - 正则化
- ML - 过拟合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 数据泄露
- ML - 机器学习的货币化
- ML - 数据类型
- 机器学习 - 资源
- ML - 快速指南
- ML - 速查表
- ML - 面试题
- ML - 有用资源
- ML - 讨论
机器学习 - DBSCAN 聚类
DBSCAN 聚类算法的工作原理如下:
随机选择一个尚未访问的数据点。
如果该数据点在距离 eps 内至少有 minPts 个邻居,则创建一个新的聚类并将该数据点及其邻居添加到该聚类。
如果该数据点在距离 eps 内至少没有 minPts 个邻居,则将该数据点标记为噪声并继续下一个数据点。
重复步骤 1-3,直到访问所有数据点。
Python 实现
我们可以使用 scikit-learn 库在 Python 中实现 DBSCAN 算法。以下是操作步骤:
加载数据集
第一步是加载数据集。我们将使用 scikitlearn 库中的 make_moons 函数生成一个具有两个月亮的玩具数据集。
from sklearn.datasets import make_moons X, y = make_moons(n_samples=200, noise=0.05, random_state=0)
执行 DBSCAN 聚类
下一步是在数据集上执行 DBSCAN 聚类。我们将使用 scikit-learn 库中的 DBSCAN 类。我们将 minPts 参数设置为 5,“eps”参数设置为 0.2。
from sklearn.cluster import DBSCAN clustering = DBSCAN(eps=0.2, min_samples=5) clustering.fit(X)
可视化结果
最后一步是可视化聚类结果。我们将使用 Matplotlib 库创建一个数据集的散点图,并按聚类分配着色。
import matplotlib.pyplot as plt plt.scatter(X[:, 0], X[:, 1], c=clustering.labels_, cmap='rainbow') plt.show()
示例
以下是 DBSCAN 聚类在 Python 中的完整实现:
from sklearn.datasets import make_moons X, y = make_moons(n_samples=200, noise=0.05, random_state=0) from sklearn.cluster import DBSCAN clustering = DBSCAN(eps=0.2, min_samples=5) clustering.fit(X) import matplotlib.pyplot as plt plt.figure(figsize=(7.5, 3.5)) plt.scatter(X[:, 0], X[:, 1], c=clustering.labels_, cmap='rainbow') plt.show()
输出
生成的散点图应显示两个不同的聚类,每个聚类对应于数据集中一个月亮。噪声数据点应为黑色。
DBSCAN 的优点
以下是使用 DBSCAN 聚类的优点:
与假设聚类为球形的 k 均值不同,DBSCAN 可以处理任意形状的聚类。
它不需要预先知道数据集中聚类的数量,与 k 均值不同。
它可以检测异常值,即不属于任何聚类的点。这是因为 DBSCAN 将聚类定义为点的密集区域,远离任何密集区域的点被认为是异常值。
与 k 均值不同,它对参数的初始选择(例如 epsilon 和 min_samples 参数)相对不敏感。
它可以扩展到大型数据集,因为它只需要计算相邻点之间的成对距离,而不是所有点的成对距离。
DBSCAN 的缺点
以下是使用 DBSCAN 聚类的缺点:
它可能对 epsilon 和 min_samples 参数的选择敏感。如果这些参数没有仔细选择,DBSCAN 可能会无法识别聚类或错误地合并它们。
它可能不适用于密度变化的数据集,因为它假设所有聚类具有相同的密度。
由于算法的非确定性性质,它可能在同一数据集上的不同运行中产生不同的结果。
对于高维数据集,它可能计算成本很高,因为随着维数的增加,距离计算变得更加昂贵。
如果噪声或异常值的密度过高,它可能不适用于具有噪声或异常值的数据集。在这种情况下,噪声或异常值可能会被错误地分配给聚类。