基于密度的聚类算法DBSCAN详解!

公众号:尤而小屋
编辑:Peter
作者:Peter

大家好,我是Peter~

今天给大家介绍基于密度的聚类算法DBSCAN,包含:

  • DBSCAN算法定义
  • sklearn.cluster.DBSCAN参数详解
  • DBSCAN聚类实战
  • DBSCAN聚类效果评估
  • DBSCAN聚类可视化
  • DBSCAN算法优缺点总结

不同的聚类算法效果对比

https://scikit-learn.org/stable/auto_examples/cluster/plot_cluster_comparison.html#sphx-glr-auto-examples-cluster-plot-cluster-comparison-py

1 DBSCAN定义

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,基于密度的带有噪声的空间聚类应用)是一种基于密度的聚类算法。

密度聚类算法一般假定类别是可以通过样本分布的紧密程度来决定。同一个类别中,样本之间是紧密相连的,也就说通过将紧密相连的样本划分为一类,这样就生成了一个聚类类别。

关于DBSCAN到底是如何实现聚类的?

一个关键点:DBSCAN是基于一组邻域来描述样本集的紧密程度,参数 ( ϵ , M i n P t s ) (\epsilon,MinPts) (ϵ,MinPts)用来描述邻域的样本紧密程度。其中 ϵ \epsilon ϵ描述邻域半径,表示两个样本被视为相邻的最大距离;MinPts表示某一样本的距离为 ϵ \epsilon ϵ的邻域中样本个数的阈值。

DBSCAN的全称是Density-Based Spatial Clustering of Applications with Noise,中文意为“基于密度的带有噪声的空间聚类应用”。它能够通过样本点的密集区域识别出各个聚类簇,并且对噪声点具有很强的鲁棒性。以下是关于DBSCAN的相关介绍:

  1. 核心思想:DBSCAN的核心在于基于样本点的密度进行聚类,即通过找出样本空间中密集的区域来进行簇的划分。
  2. 算法参数:DBSCAN需要两个主要参数:邻域半径和最少点数目。只有当某点在其邻域内的点数大于或等于最少点数目时,该点才被视为核心点。
  3. 点类别:DBSCAN中的点分为三类:核心点、边界点和噪声点。核心点是指那些在邻域内具有足够多的点的对象,边界点则是那些邻近核心点但自身不是核心点的点,而噪声点则既不是核心点也不是边界点
  4. 点关系:DBSCAN中的点关系包括密度直达、密度可达和密度相连。这些关系定义了如何从一个核心点扩展至整个簇。

更多详细的定义请见:参考资料2

2 sklearn用法

2.1 参数

sklearn.cluster.DBSCAN的完整参数解释-参考资料1:

sklearn.cluster.DBSCAN(
    eps=0.5,  # 邻域半径;它表示两个样本被视为相邻的最大距离。较大的值会导致更多的簇,较小的值会导致更少的簇
    *,
    min_samples=5,  # 形成簇所需的最小样本数
    
    # euclidean-欧式距离;manhattan-曼哈顿距离;chebyshev-切比雪夫距离;minkowski-闵可夫斯基距离;
    # wminkowski-带权重闵可夫斯基距离;seuclidean-标准化欧式距离;mahalanobis-马氏距离
    metric='euclidean',  # 计算样本之间距离的度量方法;
    metric_params=None,  # 度量方法的其他参数
    algorithm='auto', # 用于计算最近邻的算法,默认'auto', ['auto'、'ball_tree'、'kd_tree'和'brute']
    leaf_size=30,  # 构建最近邻树时的叶子大小
    p=None,  # Minkowski距离的幂指数,默认值为None。当度量方法为'minkowski'时,该参数有效
    n_jobs=None,  # 并行计算的线程数,默认为None;若为-1,则使用所有可用的处理器
)

其中最主要的参数eps(对应 ϵ \epsilon ϵ)和Min_samples(对应 M i n P t s MinPts MinPts

2.2 属性

  • core_sample_indices:核心店的index
  • components:核心点的原始数据信息
  • lables:每个样本的类别label,noise的label是-1

3 案例1

3.1 模拟数据

In [1]:

import numpy as np
import matplotlib.pyplot as plt

from sklearn.cluster import DBSCAN
from sklearn import metrics  # 评估指标

import warnings
warnings.filterwarnings("ignore")

In [2]:

X = np.array([[1, 2], 
              [2, 2], 
              [2, 3],
              [3, 5],
              [9, 7], 
              [8, 9], 
              [45, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值