详解DBSCAN聚类(上)

简介: 详解DBSCAN聚类

使用DBSCAN标识为员工分组


640.png


照片由Ishan @seefromthesky 在 Unsplash拍摄

基于密度的噪声应用空间聚类(DBSCAN)是一种无监督的ML聚类算法。无监督的意思是它不使用预先标记的目标来聚类数据点。聚类是指试图将相似的数据点分组到人工确定的组或簇中。它可以替代KMeans和层次聚类等流行的聚类算法。

在我们的示例中,我们将检查一个包含15,000名员工的人力资源数据集。数据集包含员工的工作特征,如工作满意度、绩效评分、工作量、任职年限、事故、升职次数。


KMeans vs DBSCAN

KMeans尤其容易受到异常值的影响。当算法遍历质心时,在达到稳定性和收敛性之前,离群值对质心的移动方式有显著的影响。此外,KMeans在集群大小和密度不同的情况下还存在数据精确聚类的问题。K-Means只能应用球形簇,如果数据不是球形的,它的准确性就会受到影响。最后,KMeans要求我们首先选择希望找到的集群的数量。下面是KMeans和DBSCAN如何聚类同一个数据集的示例。

640.png

640.png

另一方面,DBSCAN不要求我们指定集群的数量,避免了异常值,并且在任意形状和大小的集群中工作得非常好。它没有质心,聚类簇是通过将相邻的点连接在一起的过程形成的。

DBSCAN是如何实现的呢?

首先,让我们定义Epsilon和最小点、应用DBSCAN算法时需要的两个参数以及一些额外的参数。

  1. Epsilon (ɛ):社区的最大半径。如果数据点的相互距离小于或等于指定的epsilon,那么它们将是同一类的。换句话说,它是DBSCAN用来确定两个点是否相似和属于同一类的距离。更大的epsilon将产生更大的簇(包含更多的数据点),更小的epsilon将构建更小的簇。一般来说,我们喜欢较小的值是因为我们只需要很小一部分的数据点在彼此之间的距离内。但是如果太小,您会将集群分割的越来越小。
  2. 最小点(minPts):在一个邻域的半径内minPts数的邻域被认为是一个簇。请记住,初始点包含在minPts中。一个较低的minPts帮助算法建立更多的集群与更多的噪声或离群值。较高的minPts将确保更健壮的集群,但如果集群太大,较小的集群将被合并到较大的集群中。

如果“最小点”= 4,则在彼此距离内的任意4个或4个以上的点都被认为是一个簇。

其他参数

核心点:核心数据点在其近邻距离内至少有的最小的数据点个数。

我一直认为DBSCAN需要一个名为“core_min”的第三个参数,它将确定一个邻域点簇被认为是聚类簇之前的最小核心点数量。

边界点:边界数据点位于郊区,就像它们属于近邻点一样。(比如w/在epsilon距离内的核心点),但需要小于minPts。

离群点:这些点不是近邻点,也不是边界点。这些点位于低密度地区。

640.png

首先,选择一个在其半径内至少有minPts的随机点。然后对核心点的邻域内的每个点进行评估,以确定它是否在epsilon距离内有minPts (minPts包括点本身)。如果该点满足minPts标准,它将成为另一个核心点,集群将扩展。如果一个点不满足minPts标准,它成为边界点。随着过程的继续,算法开始发展成为核心点“a”是“b”的邻居,而“b”又是“c”的邻居,以此类推。当集群被边界点包围时,这个聚类簇已经搜索完全,因为在距离内没有更多的点。选择一个新的随机点,并重复该过程以识别下一个簇。

640.png

如何确定最优的Epsilon值

估计最优值的一种方法是使用k近邻算法。如果您还记得的话,这是一种有监督的ML聚类算法,它根据新数据点与其他“已知”数据点的距离来聚类。我们在带标记的训练数据上训练一个KNN模型,以确定哪些数据点属于哪个聚类。当我们将模型应用到新数据时,算法根据与训练过的聚类的距离来确定新数据点属于哪一个聚类。我们必须确定“k”参数,它指定在将新数据点分配给一个集群之前,模型将考虑多少个最邻近点。

为了确定最佳的epsilon值,我们计算每个点与其最近/最近邻居之间的平均距离。然后我们绘制一个k距离,并选择在图的“肘部”处的epsilon值。在y轴上,我们绘制平均距离,在x轴上绘制数据集中的所有数据点。

如果选取的epsilon太小,很大一部分数据将不会被聚类,而一个大的epsilon值将导致聚类簇被合并,大部分数据点将会在同一个簇中。一般来说,较小的值比较合适,并且作为一个经验法则,只有一小部分的点应该在这个距离内。

如何确定最佳minPts

通常,我们应该将minPts设置为大于或等于数据集的维数。也就是说,我们经常看到人们用特征的维度数乘以2来确定它们的minPts值。

就像用来确定最佳的epsilon值的“肘部方法”一样,minPts的这种确定方法并不是100%正确的。

DBSCAN聚类的评价方式

影像法:该技术测量集群之间的可分离性。首先,找出每个点与集群中所有其他点之间的平均距离。然后测量每个点和其他簇中的每个点之间的距离。我们将两个平均值相减,再除以更大的那个平均值。

我们最终想要的是一种较高(比如最接近1)的分数,表明存在较小的簇内平均距离(紧密簇)和较大的簇间平均距离(簇间分离良好)。

集群可视化解释:获得集群之后,解释每个集群非常重要。这通常是通过合并原始数据集和集群并可视化每个集群来完成的。每个集群越清晰越独特越好。我们将在下面实现这个过程。

DBSCAN的优点

  • 不需要像KMeans那样预先确定集群的数量
  • 对异常值不敏感
  • 能将高密度数据分离成小集群
  • 可以聚类非线性关系(聚类为任意形状)

DBSCAN的缺点

  • 很难在不同密度的数据中识别集群
  • 难以聚类高维数据
  • 对极小点的参数非常敏感

让我们尝试一下

importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimportseabornassnsimportplotly.offlineaspyopyo.init_notebook_mode()
importplotly.graph_objsasgofromplotlyimporttoolsfromplotly.subplotsimportmake_subplotsimportplotly.offlineaspyimportplotly.expressaspxfromsklearn.clusterimportDBSCANfromsklearn.neighborsimportNearestNeighborsfromsklearn.metricsimportsilhouette_scorefromsklearn.preprocessingimportStandardScalerfromsklearn.decompositionimportPCAplt.style.use('fivethirtyeight')
fromwarningsimportfilterwarningsfilterwarnings('ignore')
withopen('HR_data.csv') asf:
df=pd.read_csv(f, usecols=['satisfaction_level', 'last_evaluation', 'number_project',
'average_montly_hours', 'time_spend_company', 'Work_accident',
'promotion_last_5years'])
f.close()

640.png

1. 标准化

由于数据集中的特特征不在相同的范围内,所以我们需要对整个数据集进行标准化。换句话说,我们数据集中的每个特征对于它们的数据都有独特的大小和范围。满意度水平增加一分并不等于最后评价增加一分,反之亦然。由于DBSCAN利用点之间的距离(欧几里得)来确定相似性,未缩放的数据会产生问题。如果某一特征在其数据中具有较高的可变性,则距离计算受该特征的影响较大。通过缩放特征,我们将所有特征对齐到均值为0,标准差为1。

scaler=StandardScaler()
scaler.fit(df)
X_scale=scaler.transform(df)df_scale=pd.DataFrame(X_scale, columns=df.columns)
df_scale.head()

640.png

目录
相关文章
|
人工智能 安全 测试技术
Inflection AI团队仅70人,Pi每日聊天消息数超40亿
【2月更文挑战第24天】Inflection AI团队仅70人,Pi每日聊天消息数超40亿
696 3
Inflection AI团队仅70人,Pi每日聊天消息数超40亿
|
机器学习/深度学习 算法 数据可视化
深度解读DBSCAN聚类算法:技术与实战全解析
深度解读DBSCAN聚类算法:技术与实战全解析
3387 0
|
Web App开发 JavaScript IDE
uni-app开发之创建一个app项目
uni-app开发之创建一个app项目
425 0
|
4月前
|
Oracle Java 关系型数据库
Java命名规范
Java命名规范涵盖包、类、方法、变量等命名规则。包名全小写,类名首字母大写采用驼峰法,接口常用形容词,抽象类以Abstract/Base开头,异常类以Exception结尾,方法名小写驼峰,常量全大写用下划线分隔,枚举值按常量规范命名,提升代码可读性与一致性。
682 0
|
PyTorch 算法框架/工具 Python
Anaconda3和pycharm的下载指南
本文提供了Anaconda3和PyCharm的详细下载及安装指南,并介绍了如何在Anaconda3环境下创建名为"pytorch"的新环境。
Anaconda3和pycharm的下载指南
|
人工智能 算法 数据可视化
DBSCAN密度聚类算法(理论+图解+python代码)
DBSCAN密度聚类算法(理论+图解+python代码)
10233 1
|
存储 Linux
Linux内核中的current机制解析
总的来说,current机制是Linux内核中进程管理的基础,它通过获取当前进程的task_struct结构的地址,可以方便地获取和修改进程的信息。这个机制在内核中的使用非常广泛,对于理解Linux内核的工作原理有着重要的意义。
609 11
|
缓存 UED 开发者
全面加速Angular应用:从代码拆分到服务器端渲染的性能优化全攻略——深入探讨提升加载速度的有效策略
【8月更文挑战第31天】在现代Web开发中,提升应用加载速度对增强用户体验至关重要,尤其对于使用Angular框架的单页应用而言更是如此。本文通过解答五个常见问题,提供了一份全面的Angular性能优化攻略,涵盖减少初始加载时间、处理大型第三方库、优化变更检测、利用缓存以及服务器端渲染等技术。通过这些方法,开发者能够显著提升应用性能,确保流畅高效的用户体验。
387 0
|
Web App开发 数据可视化
ElasticSearch使用谷歌插件安装可视化
ElasticSearch使用谷歌插件安装可视化
659 0
|
缓存 网络协议 算法
UDP如何实现可靠传输
UDP如何实现可靠传输
756 0