密度聚类引入
前面介
绍
了有关
Kmeans
聚
类
算法的理
论
和
实战
,也提到了
该
算法的两个致命缺点,一
是聚
类
效果容易受到异常
样
本点的影响;二是
该
算法无法准确地将非球形
样
本
进
行合理的聚
类
。
为
了弥
补
Kmeans
算法的两方面缺点,本章将介
绍
另一种聚
类
算法,即基于密度的聚
类
DBSCAN
(
Density-Based Special Clustering of Applications with Noise
),
“
密度
”
可以理解
为样
本
点的
紧
密程度,而
紧
密度的衡量
则
需要使用半径和最小
样
本量
进
行
评
估,如果在指定的半径
领
域内,
实际样
本量超
过给
定的最小
样
本量
阈值
,
则认为
是密度高的
对
象。
DBSCAN
密度聚
类
算法可以非常方便地
发现样
本集中的异常点,故通常可以使用
该
算法
实现
异常点的
检测
。
同
时
,也会介
绍层
次聚
类
算法,
该
算法比
较
适合小
样
本的聚
类
,它是通
过计
算各个簇内
样
本点之
间
的相似度,
进
而构建一棵有
层
次的嵌套聚
类树
。
该
算法仍然不适合非球形
样
本的聚
类
,但它与
Kmeans
算法
类
似,可以通
过
人
为设
定聚
类
个数
实现样
本点的聚合,相比于密度聚
类
来
说
,似乎会方便很多。
密度聚类的步骤
(
1
)
为
密度聚
类
算法
设
置一个合理的半径
ε
以及
ε
领
域内所包含的最少
样
本量
MinPts
。
(
2
)从数据集中随机挑
选
一个
样
本点
p
,
检验
其在
ε
领
域内是否包含指定的最少
样
本量,如
果包含就将其定性
为
核心
对
象,并构成一个簇
C
;否
则
,重新挑
选
一个
样
本点。
(
3
)
对
于核心
对
象
p
所覆盖的其他
样
本点
q
,如果点
q
对应
的
ε
领
域内仍然包含最少
样
本量
MinPts
,就将其覆盖的
样
本点
统统归
于簇
C
。
(
4
)重复步
骤
(
3
),将最大的密度相
连
所包含的
样
本点聚
为
一
类
,形成一个大簇。
(
5
)完成步
骤
(
4
)后,重新回到步
骤
(
2
),并重复步
骤
(
3
)和(
4
),直到没有新的
样
本点可以
生成新簇
时
算法
结
束。
参数
eps
:用于
设
置密度聚
类
中的
ε
领
域,即半径,默
认为
0.5
。
min_samples
:用于
设
置
ε
领
域内最少的
样
本量,默
认为
5
。
metric
:用于指定
计
算点之
间
距离的方法,默
认为
欧氏距离。
metric_params
:用于指定
metric
所
对应
的其他参数
值
。
algorithm
:在
计
算点之
间
距离的
过
程中,用于指定搜
寻
最近
邻样
本点的算法。默
认
为
'auto'
,表示密度聚
类
会自
动选择
一个合适的搜
寻
方法。如果
为
'ball_tree'
,
则
表示使用
球
树
搜
寻
最近
邻
。如果
为
'kd_tree'
,
则
表示使用
K-D
树
搜
寻
最近
邻
。如果
为
'brute'
,
则
表示
使用暴力法搜
寻
最近
邻
。有关
这
几种最近
邻
搜
寻
方法,可以参考第
11
章的内容。
leaf_size
:当参数
algorithm
为
'ball_tree'
或
'kd_tree'
时
,用于指定
树
的叶子
节
点中所包含的
最多
样
本量,默
认为
30
;
该
参数会影响搜
寻树
的构建和搜
寻
最近
邻
的速度。
p
:当参数
metric
为闵
可夫斯基(
'minkowski'
)距离
时
,
p=1
,表示
计
算点之
间
的曼哈
顿
距
离;
p=2
,表示
计
算点之
间
的欧氏距离;
该
参数的默
认值为
2
。
n_jobs
:用于
设
置密度聚
类
算法并行
计
算所需的
CPU
数量,默
认为
1
,表示
仅
使用
1
个
CPU
运行算法,即不使用并行运算功能。
需要
说
明的是,在
DBSCAN
类
中,参数
eps
和
min_samples
需要同
时调
参,即通常会指定几
个候
选值
,并从候
选值
中挑
选
出合理的
阈值
。在参数
eps
固定的情况下,参数
min_samples
越大,
所形成的核心
对
象就越少,往往会
误
判出
许
多异常点,聚成的簇数目也会增加。反之,会
产
生
大量的核心
对
象,
导
致聚成的簇数目减少。在参数
min_samples
固定的情况下,参数
eps
越大,就
会
导
致越多的点落入到
ε
领
域内,
进
而使核心
对
象增多,最
终
使聚成的簇数目减少;反之,会
导
致核心
对
象大量减少、最
终
聚成的簇数目增多。在参数
eps
和
min_samples
不合理的情况下,簇
数目的增加或减少往往都是
错误
的。例如,
应该
聚
为
一
类
的
样
本由于簇数目的增加而聚
为
多
类
,不
该
聚
为
一
类
的
样
本由于簇数目的减少而聚
为
一
类
。
密度聚类与Kmeans的比较
Kmeans
聚
类
的短板是无法
对
非球形的簇
进
行聚
类
,同
时
也非常容易受到极端
值
的影响,
而密度聚
类则
可以弥
补
它的缺点。如果用于聚
类
的原始数据集
为类
球形,那么密度聚
类
和
Kmeans
聚
类
的效果基本一致。接下来通
过图
形的方式
对
比两种算法的聚
类
效果。
密度聚
类
算法可以
发现
任何形状的
样
本簇,而且
该
算法具有很
强
的抗噪声
能力。算法具有
这
些
优
点的背后是需要用
户设
定合理的半径
ε
和
对应领
域内最少的
样
本数量
MinPts
,