您的位置:首页 > 科技 > IT业 > 网络规划设计师讲义百度网盘下载_天津先进网站建设指导_在线h5免费制作网站_seo顾问张智伟

网络规划设计师讲义百度网盘下载_天津先进网站建设指导_在线h5免费制作网站_seo顾问张智伟

2024/11/14 16:13:50 来源:https://blog.csdn.net/ChaneMo/article/details/143726575  浏览:    关键词:网络规划设计师讲义百度网盘下载_天津先进网站建设指导_在线h5免费制作网站_seo顾问张智伟
网络规划设计师讲义百度网盘下载_天津先进网站建设指导_在线h5免费制作网站_seo顾问张智伟

一、概念

        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都是建模利器。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com