自学内容网 自学内容网

详解机器学习经典模型(原理及应用)——DBSCAN

一、概念

        DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它能够在具有噪声的空间数据集中发现任意形状的聚类(即带噪声的聚类模型)。DBSCAN将簇定义为密度相连的点的最大集合,通过在数据空间中找到高密度区域作为簇,同时把孤立点(密度低的点)归为噪声。此外,DBSCAN最大的优势就是它不需要指定聚类簇的数量

二、模型原理

1、相关概念

  • ε-邻域(Epsilon-neighborhood):对于某个点p,以半径ε为边界的区域内所有的点称为该点的ε-邻域。
  • 核心点(Core Point):如果一个点p的ε-邻域内至少有min_samples个点(包括p自己),那么它被称为核心点。
  • 边界点(Border Point):如果一个点p在某个核心点的ε-邻域内,但自身不是核心点,它被称为边界点。
  • 噪声点(Noise Point):如果一个点既不是核心点,也不属于任何核心点的邻域,它被认为是噪声点。
  • 密度直达(Directly Density-Reachable):如果点p是核心点,并且点q在p的ε-邻域内,那么q被称为从p密度直达。
  • 密度可达(Density-Reachable):如果存在一条核心点链表(p1→p2→...→pn),使得每个点从前一个点密度直达,且p1=p,pn=q,则q是从p密度可达的。
  • 密度相连(Density-Connected):如果存在一个点o,使得p和q都从o密度可达,则称p和q是密度相连的。

2、算法流程

(1)初始化

  • 遍历数据集中的每个点p。
  • 对于每个点p,找到其ε-邻域(由我们定义,需要多次尝试找到最优值)内的所有点。

(2)形成聚类

  • 如果p是核心点,创建一个新的聚类C,并将p添加到C。
  • 将p的 ε-邻域内的所有直接密度可达的点添加到C。
  • 递归地,将这些点的直接密度可达的点添加到C。

(3)处理边界点和噪声

  • 如果一个点不是核心点,也不是任何核心点的直接密度可达点,则将其标记为噪声。需要注意的是,噪声点的数量跟ε参数和min_samples参数的取值有关,在不同的取值范围内,点A可能是噪声,也可能是核心点。

(4)合并聚类

  • 如果两个聚类密度相连,则将它们合并为一个聚类。

三、python示例

        这里我们使用iris数据集,由于这个数据集的数据量很少,因此如果min_samples设置得稍微大一点,模型就会将所有的点都看作噪声。最佳参数可以通过网格搜索并结合聚类评估指标来确定。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 数据预处理:标准化特征值
X_scaled = StandardScaler().fit_transform(X)

# 创建DBSCAN模型实例
# eps 是邻域的大小,min_samples 是形成聚类所需的最小样本数
dbscan = DBSCAN(eps=0.2, min_samples=2)

# 执行聚类
clusters = dbscan.fit_predict(X_scaled)

# 可视化聚类结果
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=clusters, cmap='viridis', marker='o')
plt.title('DBSCAN Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.colorbar(label='Cluster Label')
plt.show()

# 打印聚类结果的统计信息
n_clusters_ = len(set(clusters)) - (1 if -1 in clusters else 0)  # 减去噪声点
n_noise_ = list(clusters).count(-1)
print(f'Estimated number of clusters: {n_clusters_}')
print(f'Estimated number of noise points: {n_noise_}')

四、总结

        DBSCAN是探索性数据分析、数据挖掘中常用的机器学习模型。由于我们在初期数据探索和挖掘阶段,无法很好地确定数据应当聚成多少类,因此K-Means等需要指定聚类簇数量的模型显得不那么有效了。通过调整DBSCAN模型的邻域半径和最小簇内样本数,并结合轮廓系数等聚类评估方法,可以有效地帮助我们自动将数据聚合成相对有意义的N个类簇,从而辅助我们进行数据探索和分析。例如,在NLP领域,尤其是热点挖掘、观点分析等业务中,DBSCAN以及它的优化版变体HDBSCAN都是建模利器。

 


原文地址:https://blog.csdn.net/ChaneMo/article/details/143726575

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!