赞
踩
写在前面:
首先感谢兄弟们的关注和订阅,让我有创作的动力,请一键三连,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。
往期聚类文章回归:
【聚类】K-Means聚类(优缺点、手肘法、轮廓系数法、检测异常点、图像压缩,含代码实战)
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的空间聚类算法,广泛应用于机器学习和数据挖掘领域。DBSCAN不需要预先指定簇的数量,而是基于数据点的密度来确定簇的形状和数量。
只要任意两个样本点是密度直达或密度可达的关系,那么这两个样本点就被归为同一簇类。具体来说,算法从数据集D中随机选择一个核心点作为“种子”,然后找到这个核心点的所有密度可达对象,即一个簇。这些核心点以及它们ε邻域内的点被标记为同一个类。接着,算法再找一个未标记过的核心对象,重复上述步骤,直到所有核心对象都被标记为止。
在这个过程中,有两个重要的参数:Eps和MinPts。Eps决定了邻域的大小,即一个点的ε邻域。MinPts表示一个点要成为核心点,其ε邻域内必须包含的最少点数。如果Eps过大,可能导致所有数据对象都被划分到同一个簇中;如果Eps过小,则可能将相近但本应属于不同簇的数据对象划分到不同簇中。同样,MinPts参数过大会导致过度聚类,而过小则可能将随机噪声点误划分为簇。因此,对于给定的数据集,需要对这两个参数进行适当调整,以得到最优的聚类结果。
首先介绍几个关键词:
**核心点:**对于每个数据点,如果在其邻域内包含至少MinPts个样本点(包括该点自身),则该点被认为是核心点
**直接密度可达:**如果一个点是核心点,那么与其在同一个簇中的所有其他点都是直接密度可达的
**密度可达:**如果存在一个核心点序列(p1, p2, …, pn),其中p1是核心点,pn是目标点,而pi+1是pi的直接密度可达点,那么p1与pn是密度可达的
**密度相连:**如果存在一个核心点q,使得p和q都是密度可达的,那么p和q是密度相连的
基于以上的定义,DBSCAN将数据点分为三类:
**核心点:**具有足够密度的点,即其周围有足够数量的样本点
**边界点:**不是核心点,但位于核心点的邻域内
**噪声点:**既不是核心点,也不是边界点的点
综上所述,DBSCAN聚类算法通过基于密度的空间聚类方式,实现了对数据的有效划分,并能在处理复杂形状和异常点方面表现出色。但在应用时,需要根据数据集的特点选择合适的参数,以获取最佳的聚类效果。
生成实验需要的模拟数据代码:
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_circles from sklearn.preprocessing import StandardScaler # 生成环形数据 X, y = make_circles(n_samples=850, noise=0.05, random_state=42, factor=0.5) # 在左上角生成更多的数据 extra_data = np.random.normal(loc=[-1.5, 1.5], scale=0.3, size=(80, 2)) X = np.vstack([X, extra_data]) # 缩放数据 X = StandardScaler().fit_transform(X) # 可视化数据 plt.scatter(X[:, 0], X[:, 1], c='blue', marker='o', s=35, edgecolor='k') plt.title("DBSCAN Demonstration Data") plt.xlabel("Feature 1") plt.ylabel("Feature 2") plt.show()
核心代码如下:
from sklearn.cluster import DBSCAN
# 使用DBSCAN进行聚类
dbscan = DBSCAN(eps=0.3, min_samples=5)
y_dbscan = dbscan.fit_predict(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_dbscan, cmap='viridis', marker='o', s=30, edgecolor='k')
plt.title("DBSCAN Clustering Result")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()
根据可视化可知数据集被聚类为4个簇其中一类为噪声点,这也是DBSACN的另外一个作用异常值检验,DBSCAN将那些不属于任何聚类簇的数据点视为噪声点。这些噪声点就是异常值,因为它们不符合在高密度区域中形成聚类的定义
思考,主动一点。
主动一点,工作态度。
主动协调;主动提出想法。
https://mp.weixin.qq.com/s/xDo9LYxQe54zUjKwq2Oznw
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。