DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。
DBSCAN算法最重要的两个参数是
ε
\varepsilon
ε 和
M
i
n
P
t
s
MinPts
M i n P t s ,其中
ε
\varepsilon
ε 描述了某一样本的邻域距离阈值,
M
i
n
P
t
s
MinPts
M i n P t s 描述了某一样本的距离为
ε
\varepsilon
ε 的邻域中样本个数的阈值。
DBSCAN算法中的概念
ε
\varepsilon
ε : 包含样本集
D
D
D 中与某个样本
x
x
x 的距离不大于
ε
\varepsilon
ε 的子样本集。 核心对象: 对于任意一个样本
x
x
x ,若其
ε
\varepsilon
ε 邻域中至少包含
M
i
n
P
t
s
MinPts
M i n P t s 个样本,则该样本
x
x
x 是核心对象。 密度直达: 若
x
i
x_i
x i 位于
x
j
x_j
x j 的
ε
\varepsilon
ε 邻域中,且
x
j
x_j
x j 是核心对象,则称
x
i
x_i
x i 由
x
j
x_j
x j 密度直达,反之不一定成立。 密度可达: 对于
x
i
x_i
x i 和
x
j
x_j
x j ,若存在样本序列
{
P
1
,
P
2
,
.
.
.
,
P
t
}
\begin{Bmatrix}P_1,P_2,...,P_t\end{Bmatrix}
{ P 1 , P 2 , . . . , P t } ,满足
P
1
=
x
i
,
P
t
=
x
j
P_1=x_i,P_t=x_j
P 1 = x i , P t = x j 且
P
t
+
1
P_{t+1}
P t + 1 由
P
t
P_{t}
P t 密度直达,则称
x
i
x_i
x i 由
x
j
x_j
x j 密度可达。密度可达满足传递性,此时序列
P
1
,
P
2
,
.
.
.
,
P
t
−
1
P_1,P_2,...,P_{t-1}
P 1 , P 2 , . . . , P t − 1 均为核心对象,因为只有核心对象才能使其他样本密度直达。 密度相连: 对于
x
i
x_i
x i 和
x
j
x_j
x j ,若存在核心对象
x
k
x_k
x k ,使
x
i
x_i
x i 和
x
j
x_j
x j 均由
x
k
x_k
x k 密度可达,则称
x
i
x_i
x i 和
x
j
x_j
x j 密度相连。密度相连满足对称性。
DBSCAN算法流程
输入样本集
D
=
{
x
1
,
x
2
,
.
.
.
,
x
m
}
D=\begin{Bmatrix}x_1,x_2,...,x_m\end{Bmatrix}
D = { x 1 , x 2 , . . . , x m } ,邻域参数(
ε
\varepsilon
ε 和
M
i
n
P
t
s
MinPts
M i n P t s ),样本距离度量方式。
1.初始化核心对象集合
Ω
=
∅
\Omega= \varnothing
Ω = ∅ ,初始化聚类簇数K=0,初始化为未访问样本集合
Γ
=
D
\Gamma=D
Γ = D ,簇划分
C
=
∅
C= \varnothing
C = ∅ 。
2.对于
j
=
1
,
2
,
3...
m
j=1,2,3...m
j = 1 , 2 , 3 . . . m ,按下面步骤找出所有核心对象: a.通过距离度量方式,找到样本
x
j
x_j
x j 的
ε
\varepsilon
ε 邻域子样本集
N
ε
(
x
j
)
N_\varepsilon(x_j)
N ε ( x j ) ; b.若子样本集中样本个数满足
N
ε
(
x
j
)
≥
M
i
n
P
t
s
N_\varepsilon(x_j)\geq MinPts
N ε ( x j ) ≥ M i n P t s ,则将样本
x
j
x_j
x j 加入核心对象样本集合
Ω
=
Ω
∪
{
x
j
}
\Omega= \Omega\cup\begin{Bmatrix}x_j\end{Bmatrix}
Ω = Ω ∪ { x j } ;
3.如果
Ω
=
∅
\Omega= \varnothing
Ω = ∅ ,则算法结束,否则进入4;
4.在核心对象集合中,随机选择一个核心对象o,初始化当前簇核心对象队列
Ω
c
u
t
=
{
o
}
\Omega_{cut}=\begin{Bmatrix}o\end{Bmatrix}
Ω c u t = { o } ,初始化类别序号
K
=
K
+
1
K=K+1
K = K + 1 ,初始化当前簇样本集合
C
K
=
{
o
}
C_K=\begin{Bmatrix}o\end{Bmatrix}
C K = { o } ,更新未访问集合
Γ
=
Γ
−
{
o
}
\Gamma=\Gamma-\begin{Bmatrix}o\end{Bmatrix}
Γ = Γ − { o } ;
5.若当前簇核心对象队列
Ω
c
u
t
=
∅
\Omega_{cut}=\varnothing
Ω c u t = ∅ ,则当前聚类簇
C
K
C_K
C K 生成完毕,更新簇划分
C
=
{
C
1
,
C
2
,
C
3
.
.
.
C
K
}
C= \begin{Bmatrix}C_1,C_2,C_3...C_K\end{Bmatrix}
C = { C 1 , C 2 , C 3 . . . C K } ,更新核心对象集合
Ω
=
Ω
−
C
K
\Omega= \Omega-C_K
Ω = Ω − C K ,转入3;
6.在当前簇核心对象队列
Ω
c
u
t
\Omega_{cut}
Ω c u t 中取出一个核心对象
o
′
o'
o ′ ,通过邻域距离阈值
ε
\varepsilon
ε 找出所有的
ε
\varepsilon
ε 邻域子样本集
N
ε
(
o
′
)
N_\varepsilon(o')
N ε ( o ′ ) ,令
Δ
=
N
ε
(
o
′
)
∩
Γ
\Delta =N_\varepsilon (o')\cap \Gamma
Δ = N ε ( o ′ ) ∩ Γ ,更新当前簇样本集合
C
K
=
C
K
∪
Δ
C_K=C_K\cup\Delta
C K = C K ∪ Δ ,更新未访问样本集合
Γ
=
Γ
−
Δ
\Gamma=\Gamma-\Delta
Γ = Γ − Δ ,更新
Ω
c
u
t
=
Ω
c
u
t
∪
(
N
ε
(
o
′
)
∩
Ω
)
\Omega_{cut}=\Omega_{cut}\cup(N_\varepsilon(o')\cap\Omega)
Ω c u t = Ω c u t ∪ ( N ε ( o ′ ) ∩ Ω ) ,转入步骤5;
输出结果:簇划分
C
=
{
C
1
,
C
2
,
C
3
.
.
.
C
K
}
C= \begin{Bmatrix}C_1,C_2,C_3...C_K\end{Bmatrix}
C = { C 1 , C 2 , C 3 . . . C K }
DBSCAN算法总结
优点: 1.可以对任意形状的稠密数据集进行聚类,K-Means一般只适用于凸数据集,而DBSCAN无此限制; 2.可以在聚类的同时发现异常点,对异常点不敏感; 3.聚类结果没有偏倚,相对的,K-Means初始值对聚类结果有很大影响。
缺点: 1.如果样本密度不均匀、聚类间距差相差很大时,聚类质量较差,这时一般不适用于DBSCAN; 2.如果数据较大时,收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来进行改进; 3.调参较传统的K-Means复杂,需要对
ε
\varepsilon
ε 和
M
i
n
P
t
s
MinPts
M i n P t s 联合调参,不同参数组合对结果影响很大。