文章目录
一、聚类
聚类是根据在数据中发现的描述对象及其关系的信息,将数据对象分簇。其目的是使簇内的对象相互之间是相似的(相关的),而不同簇中的对象是不同的(不相关的)。簇内相似性越大,簇间差距越大,说明聚类效果越好。
聚类是一种无监督学习的方法,是许多领域中常用的机器学习技术。其难点在于如何评估和调参。
二、K-Means算法
1、基本概念
- 要得到簇的个数,需要指定 K K K值
- 质心:均值,即向量各维取平均即可
- 距离的度量:常用欧几里得距离和余弦相似度(先标准化)
- 优化目标: min ∑ i = 1 K ∑ x ∈ C i d i s t ( c i , x ) 2 \min\displaystyle\sum_{i=1}^K\displaystyle\sum_{x\in C_i}dist(c_i,x)^2 mini=1∑Kx∈Ci∑dist(ci,x)2
2、工作流程
(1)数据预处理:主要是标准化、异常点过滤。
(2)设置参数
K
K
K,其含义是将数据集聚合成
K
K
K类。
(3)随机选取
K
K
K个质心,记为
μ
1
(
0
)
,
μ
2
(
0
)
,
⋯
,
μ
K
(
0
)
\mu_1^{(0)},\mu_2^{(0)},\cdots,\mu_K^{(0)}
μ1(0),μ2(0),⋯,μK(0)。
(4)定义损失函数:
J
(
c
,
μ
)
=
min
∑
i
=
1
M
∣
∣
x
i
−
μ
c
i
∣
∣
2
(1)
J(c,\mu)=\min\sum_{i=1}^M||x_i-\mu_{c_i}||^2\tag{1}
J(c,μ)=mini=1∑M∣∣xi−μci∣∣2(1)(5)重复下述过程,直到
J
J
J收敛:
(5.1)对于每一个样本
x
i
x_i
xi,将其分配到距离最近的质心,即:
x
i
∈
arg min
k
∣
∣
x
i
−
μ
k
(
t
)
∣
∣
(2)
x_i\in\argmin_k||x_i-\mu_k^{(t)}||\tag{2}
xi∈kargmin∣∣xi−μk(t)∣∣(2)(5.2)对于每一个类质心
μ
k
\mu_{k}
μk,重新计算该类的质心,即:
μ
k
(
t
+
1
)
=
1
∣
C
k
∣
∑
x
∈
C
k
x
(3)
\mu_k^{(t+1)}=\frac{1}{|C_k|}\sum_{x\in C_k}x\tag{3}
μk(t+1)=∣Ck∣1x∈Ck∑x(3)
3、优缺点
优点:简单快速,适合常规数据集
缺点:
①
K
K
K值难确定;② 受初始值影响较大;③ 复杂度与样本规模呈线性关系;④ 很难发现任意形状的簇。
三、DBSCAN算法
1、基本概念
DBSCAN全名为Density-Based Spatial Clustering of Applications with Noise。
- 核心对象:若某个点的密度达到算法设定的阈值则其为核心点(即 r r r邻域内点的数量不小于 m i n P t s minPts minPts)
- ε \varepsilon ε-邻域的距离阈值:设定的半径 r r r
- 直接密度可达:若某点 p p p在点 q q q的 r r r邻域内,且 q q q是核心点,则 p − q p-q p−q直接密度可达
- 密度可达:若有一个点的序列 q 0 q_0 q0、 q 1 q_1 q1、 ⋯ \cdots ⋯、 q k q_k qk,对任意 q i − q i − 1 q_i-q_{i-1} qi−qi−1是直接密度可达的,则称从 q 0 q_0 q0到 q k q_k qk密度可达,这实际上是直接密度可达的“传播”
- 密度相连:若从某核心点 p p p出发,点 q q q和点 k k k都是密度可达的,则称点 q q q和点 k k k是密度相连的
- 边界点:属于某一个类的非核心点,不能往下发展了
- 噪声点:不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的
如图1所示,点A为核心对象,B和C为边界点,N是离群点。
2、工作流程
准备数据集(参数D),输入指定半径(参数 r r r)和密度阈值( M i n P t s MinPts MinPts)。其伪代码如下所示:
标记所有对象为unvisited;
Do
随机选择一个unvisited对象p;
标记p为visited;
If p的r-邻域至少有MinPts个对象
创建一个新簇C,并把p添加到C;
令N为p的r-邻域中的对象集合;
For N中每一个点p'
If p'是unvisited;
标记p'为visited;
If p'的r-邻域至少有MinPts个对象
把这些对象添加到N中;
If p'还不是任何簇的成员
把p'添加到C;
End for;
输出C;
Else
标记p为噪声点;
Until 没有标记为unvisited的对象;
3、参数选择
- 半径
r
r
r,可以根据
K
K
K距离来设定,找突变点。
K K K距离:给定数据集 P = { p ( i ) ; i = 0 , 1 , ⋯ , n } P=\{p(i); i=0,1,\cdots,n\} P={p(i);i=0,1,⋯,n},计算点 p ( i ) p(i) p(i)到集合 D D D的子集 S S S中所有点之间的距离,距离按照从小到大的顺序排序, d ( k ) d(k) d(k)就被称为 K K K距离。 - M i n P t s MinPts MinPts: K K K距离中 K K K的值,一般取的小一些,多次尝试。
4、优缺点
优点:
① 不需要指定簇个数;② 可以发现任意形状的簇;③ 擅长找到离群点(检测任务);④ 只需要设置两个参数(半径
r
r
r和距离阈值
M
i
n
P
t
s
MinPts
MinPts)。
缺点:
① 高维数据聚类有些困难(可以做降维);② 参数难以选择(参数对结果的影响非常大);③ Sklearn中效率很慢(数据削减策略)。
四、可视化展示
1、K-Means算法
2、DBSCAN算法
五、参考文献
[1] 唐宇迪. 跟着迪哥学Python数据分析与机器学习实战[M]. 北京: 人民邮电出版社, 2019: 346-363.