DBSCAN算法的使用和参数详解

一、DBSCAN算法简介 

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种用于聚类的密度-based聚类算法,它能够识别具有相对高密度的数据点并将它们归为一类,同时识别出孤立的点作为噪声。

二、算法使用过程 

以下是DBSCAN的使用方法和相关参数:

1.数据准备:首先,准备包含数据点的数据集,通常是一个包含多维特征的数据矩阵。


2.创建模型:使用机器学习库(如scikit-learn)来创建一个DBSCAN聚类器对象。在scikit-learn中,可以使用DBSCAN类来实现DBSCAN。

3.参数选择:DBSCAN有一些关键的参数:

classsklearn.cluster.DBSCAN(eps=0.5,min_samples=5,metric=’euclidean’,metric_params=None,algorithm=’auto’,leaf_size=30,p=None,n_jobs=None)

eps:DBSCAN算法参数,即我们的ϵ-邻域的距离阈值,和样本距离超过ϵ的样本点不在ϵ-邻域内。默认值是0.5.一般需要通过在多组值里面选择一个合适的阈值。eps过大,则更多的点会落在核心对象的ϵ-邻域,此时我们的类别数可能会减少,本来不应该是一类的样本也会被划为一类。反之则类别数可能会增大,本来是一类的样本却被划分开。

min_samples:DBSCAN算法参数,即样本点要成为核心对象所需要的ϵϵ-邻域的样本数阈值。默认值是5.一般需要通过在多组值里面选择一个合适的阈值。通常和eps一起调参。在eps一定的情况下,min_samples过大,则核心对象会过少,此时簇内部分本来是一类的样本可能会被标为噪音点,类别数也会变多。反之min_samples过小的话,则会产生大量的核心对象,可能会导致类别数过少。

metric:最近邻距离度量参数。可以使用的距离度量较多,一般来说DBSCAN使用默认的欧式距离(即p=2的闵可夫斯基距离)就可以满足我们的需求。可以使用的距离度量参数有:a)欧式距离 “euclidean”:b)曼哈顿距离 “manhatan”c)切比雪夫距离“chebyshev”…还有一些其他不是实数的距离度量,一般在DBSCAN算法用不上,这里也就不列了。

metric_params:一般不需要调整,用默认值即可。

algorithm:最近邻搜索算法参数,算法一共有三种,第一种是蛮力实现,第二种是KD树实现,第三种是球树实现。对于这个参数,一共有4种可选输入,‘brute’对应第一种蛮力实现,‘kd_tree’对应第二种KD树实现,‘ball_tree’对应第三种的球树实现,‘auto’则会在上面三种算法中做权衡,选择一个拟合最好的最优算法。需要注意的是,如果输入样本特征是稀疏的时候,无论我们选择哪种算法,最后scikit-learn都会去用蛮力实现‘brute’。个人的经验,一般情况使用默认的 ‘auto’就够了。如果数据量很大或者特征也很多,用"auto"建树时间可能会很长,效率不高,建议选择KD树实现‘kd_tree’,此时如果发现‘kd_tree’速度比较慢或者已经知道样本分布不是很均匀时,可以尝试用‘ball_tree’。而如果输入样本是稀疏的,无论你选择哪个算法最后实际运行的都是‘brute’。

p:最近邻距离度量参数。只用于闵可夫斯基距离和带权重闵可夫斯基距离中p值的选择,p=1为曼哈顿距离,p=2为欧式距离。如果使用默认的欧式距离不需要管这个参数。

4.模型训练:使用DBSCAN聚类器对象对数据集进行训练,即通过调用fit方法传入特征数据。


5.获取结果:DBSCAN将数据点分为三类:


        核心点(Core Points):具有足够数量的数据点在其ε-邻域内的点。
        边界点(Border Points):不是核心点但位于核心点的ε-邻域内的点。
        噪声点(Noise Points):既不是核心点也不是边界点的点,通常被视为噪声。
这些类别可以通过查看DBSCAN对象的labels_属性获得。


6.结果可视化:通常,为了理解聚类的效果,可以将数据点和聚类结果可视化,以便进行进一步分析。

相关代码案例实现参考笔者另一篇博客:DBSCAN聚类代码实现

三、总结 

DBSCAN的优点包括不需要预先指定聚类数目,能够处理噪声数据和发现非凸形状的簇。但是,参数eps和min_samples的选择对聚类结果具有重要影响,因此需要谨慎选择这些参数以获得满意的聚类效果。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值