这篇文章写一下有关聚类的一些东西
本次目标
(1)掌握K-means聚类的思路和使用方法
(2)了解层次聚类的思路和方法
(3)理解密度聚类并能够应用于实践
a.DBSCAN
b.密度最大值聚类
(4)掌握谱聚类的算法
考察谱聚类和PCA的关系
聚类的定义
聚类就是对大量未知标注的数据集,按数据集的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小
属于无监督类型
那么我们如何定义相似度呢
相似度/距离计算方法总结
(1)闵可夫斯基距离Minkowski/欧氏距离
(2)杰卡德相似系数(Jaccard):
(3)余弦相似度(cosine similarity)
(4)Pearson相关系数
(5)相对熵(K-L距离)
(6)Hellinger距离
下面来看一下余弦相似度与Pearson相关系数
余弦相似度与Pearson相关系数
(1)n维向量x和y的夹角记做
θ
\theta
θ,根据余弦定理,其余弦值为:
(2)这两个向量的相关系数是:
(3)相关系数即将x、y坐标向量各自平移到原点后的夹角余弦!
这即解释了为何文档间求距离使用夹角余弦—因为这一物理量表征了文档去均值化后的随机向量间的相关系数
聚类的基本思想
(1)给定一个有N个对象的数据集,构造数据的k个簇,k≤n。满足下列条件:
a.每一个簇至少包含一个对象
b.每一个对象属于且仅属于一个簇
c.将满足上述条件的k个簇称作一个合理划分
(2)基本思想:对于给定的类别数目k,首先给出初始划分,通过迭代改变样本和簇的隶属关系,使得每一次改进之后的划分方案都较前一次好。
K-means算法
(1)K-means算法,也被称为k-平均或k-均值,是一种广泛使用的聚类算法,或者成为其他聚类算法的基础。
(2)假定输入样本为
S
=
x
1
x
2
,
.
.
.
,
x
n
S=x_1x_2,...,x_n
S=x1x2,...,xn,则算法步骤为:
a.选择初始的k个类别中心
μ
1
μ
2
.
.
.
μ
k
\mu_1\mu_2...\mu_k
μ1μ2...μk
b.对于每个样本
x
i
x_i
xi,将其标记为距离类别中心最近的类别,即:
c.将每个类别中心更新为隶属该类别的所有样本的均值
d.重复最后两步,直到类别中心的变化小于某阈值
(3)中止条件:
a.迭代次数
b.簇中心变化率
c.最小平方误差MSE(Minimum Squared Error)
K-means过程
对K-Means的思考
(1)K-means将簇中所有点的均值作为新质心,若簇中含有异常点,将导致均值偏离严重,以一维数据为例:
a.数组1,2,3,4,100的均值为22,显然距离“大多数”数据1,2,3,4比较远
b.改成求数组的中位数3,在该实例中更为稳妥
c.这种聚类方式即K-Mediods(K中值距离)
(2)初值的选择,对聚类结果由影响吗?
该如何避免?
也许可以使用二分k-均值聚类方法
即把一个较为分散的大类先划分为两个小类,再继续划分。
K-means聚类方法总结
(1)优点:
a.是解决聚类问题的一种经典算法,简单、快速
b.对处理大数据集,该算法保持可伸缩性和高效率
c.当簇近似为高斯分布时,它的效果较好
(2)缺点:
a.在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用
b.必须事先给出k(要生成的簇的数目),而且对初值敏感,对于不同的初始值,可能会导致不同结果
c.不适合于发现非凸形状的簇或者大小差别很大的簇
d.对噪声和孤立点数据敏感
(3)可作为其他聚类方法的基础算法,如谱聚类
轮廓系数(Silhouette)
(1)Sihouette系数是对聚类结果有效性的解释和验证
(2)计算样本i到同簇其他样本的平均距离ai,ai越小,说明样本i越应该被聚类到该簇。将ai称为样本i的簇内不相似度
簇C中所有样本的ai的均值称为簇C的不相似度
(3)计算样本i到其他某簇CI的所有样本的平均距离bil,称为样本i与簇CI的不相似度。将样本i到所有其他簇的不相似度的最小值定义为样本i的簇间不相似度。bi越大,说明样本i越不属于其他簇
(4)根据样本i的粗内不相似度ai和簇间不相似度bi,定义样本i的轮廓系数:
(5)si接近1,则说明样本i聚类合理;si接近-1,则说明样本i更应该分类到另外的簇;若si近似为0,则说明样本i在两个簇的边界上
(6)所有样本的si的均值称为聚类结果的轮廓系数,是该聚类是否紧致的度量。
层次聚类方法
(1)层次聚类方法对给定的数据集进行层次的分解,直到某种条件满足为止,具体又可分为:
(2)凝聚的层次聚类:AGNES算法
一种自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到某个终止条件被满足
(3)分裂的层次聚类:DIANA算法
采样自顶向下的策略,它首先将所有对象置于一个簇中,然后逐渐细分为越来越小的簇,直到达到了某个终结条件。
密度聚类方法
(1)密度聚类方法的指导思想是,只要样本点的密度大于某阈值,则将该样本添加到最近的簇中
(2)这类算法能克服基于距离的算法只能发现“类圆形”(凸)的聚类的缺点,可发现任意形状的聚类,且对噪声数据不敏感。但计算密度单元的计算复杂度大,需要建立空间索引来降低计算量
a.DBSCAN
b.密度最大值算法
DBSCAN算法
一个比较有代表性的基于密度的聚类算法。与划分和层次聚类的方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在有“噪声”的数据中发现任意形状的聚类
DBSCAN算法的若干概念
(1)对象的
ε
\varepsilon
ε-领域:给定对象在半径
ε
\varepsilon
ε内的区域
(2)核心对象:对于给定的数目m,如果一个对象的
ε
\varepsilon
ε-领域至少包含m个对象,则称该对象为核心对象
(3)直接密度可达:给定一个对象集合D,如果p是在q的
ε
\varepsilon
ε-领域内,而q是一个核心对象,我们说对象p从对象q出发是直接密度可达的
(4)如图,
ε
=
1
c
m
,
m
=
5
\varepsilon=1cm,m=5
ε=1cm,m=5,q是一个核心对象,从对象q出发到对象p是直接密度可达的
(5)密度可达:如果存在一个对象链
p
1
p
2
.
.
.
p
n
,
p
1
=
q
,
p
n
=
p
,
对
p
i
∈
D
,
(
1
≤
i
≤
n
)
,
p
i
+
1
是
从
p
i
关
于
ε
和
m
直
接
密
度
可
达
的
p_1p_2...p_n,p_1=q,p_n=p,对p_i∈D,(1≤i≤n),p_{i+1}是从p_i关于\varepsilon和m直接密度可达的
p1p2...pn,p1=q,pn=p,对pi∈D,(1≤i≤n),pi+1是从pi关于ε和m直接密度可达的,则对象p是从对象q关于
ε
\varepsilon
ε和m密度可达的
(6)密度相连:如果对象集合D中存在一个对象o,使得对象p和q是从o关于
ε
\varepsilon
ε和m密度可达的,那么对象p和q是关于
ε
\varepsilon
ε和m密度相连的
(7)簇:一个基于密度的簇时最大的密度相连对象的集合
(8)噪声:不包含在任何簇中的对象称为噪声
(1)DBSCAN算法流程:
a.如果一个点p的
ε
\varepsilon
ε-邻域包含多于m个对象,则创建一个p作为核心对象的新簇
b.寻找并合并核心对象直接密度可达的对象
c.没有新点可以更新簇时,算法结束
(2)由上述算法可知
a.每个簇至少包含一个核心对象
b.非核心对象可以是簇的一部分,构成了簇的边缘
c.包含过少对象的簇被认为是噪声
密度最大值聚类
(1)密度最大值聚类是一种简洁优美的聚类算法,可以识别各种形状的类簇,并且参数很容易确定
(2)定义:局部密度
p
i
p_i
pi
其中
d
c
d_c
dc是一个截断距离,
p
i
p_i
pi即到对象i的距离小于
d
c
d_c
dc的对象的个数。由于该算法只对
p
i
p_i
pi的相对值敏感,所以对
d
c
d_c
dc的选择是稳健的,一种推荐做法是选择
d
c
d_c
dc,使得平均每个点的邻居数为所有点的1%-2%
(3)定义:高局部密度点距离
δ
i
\delta_i
δi
简称“高密距离”
高局部密度点距离
(1)高局部密度点距离
(2)在密度高于对象i的所有对象中,到对象i最近的距离,即高局部密度点距离
(3)对于密度最大的对象,设置
δ
i
=
m
a
x
(
d
i
j
)
\delta_i=max(d_{ij})
δi=max(dij)(即:该问题中的无穷大)
只有那些密度是局部或者全局最大的点才会有远大于正常值的高局部密度点距离
簇中心的识别
(1)那些有着比较大的局部密度
p
i
p_i
pi和很大的高密距离
δ
i
\delta_i
δi的点被认为是簇的中心
(2)高密距离
δ
i
\delta_i
δi较大但局部密度
p
i
p_i
pi较小的点是异常点
确定簇中心之后,其他点按照距离已知簇的中心最近进行分类
密度最大值聚类过程
如下左图是所有点在二维空间的分布,右图是以p为横坐标,以
δ
\delta
δ为纵坐标绘制的决策树,可以看到,1和10两个点的
p
i
p_i
pi和
δ
i
\delta_i
δi都比较大,作为簇的中心点。26,27,28三个点的
δ
i
\delta_i
δi也比较大,但是
p
i
p_i
pi比较小,所以是异常点
下面写一下谱聚类
谱和谱聚类
(1)方阵作为线性算子,它的所有特征值的全体统称为方阵的谱
a.方阵的谱半径为最大的特征值
b.矩阵A的谱半径:
(
A
T
A
)
(A^TA)
(ATA)的最大特征值
(2)谱聚类:一般的说,是一种基于图论的聚类方法,通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据聚类的目的
谱分析的整体过程
(1)给定一组数据
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn,记任意两个点之间的相似度(“距离”的减函数)为
s
i
j
=
<
x
i
,
x
j
>
s_{ij}=<x_i,x_j>
sij=<xi,xj>,形成相似度图(similarity graph):
G
=
(
V
,
E
)
G=(V,E)
G=(V,E)。如果
x
i
和
x
j
x_i和x_j
xi和xj之间的相似度
s
i
j
s_{ij}
sij大于一定的阈值,那么,两个点是连接的,权值记做
s
i
j
s_{ij}
sij
(2)接下来,可以用相似度图来解决样本数据的聚类问题:找到图的一个划分,形成若干个组(Group),使得不同组之间有较低的权值,组内有较高的权值
若干概念
(1)无向图G=(V,E)
(2)邻接矩阵
W
=
(
w
i
j
)
,
i
,
j
=
1
,
.
.
.
,
n
W=(w_{ij}),i,j=1,...,n
W=(wij),i,j=1,...,n
(3)顶点的度
d
i
→
度
矩
阵
D
(
对
角
阵
)
di\to 度矩阵D(对角阵)
di→度矩阵D(对角阵)
(4)A和B是图G的不相交子图,则定义子图的连接权:
相似度图G的建立方法
(1)全连接图
高斯相似度函数:距离越大,相似度越小
(2)
ε
\varepsilon
ε近邻图
a.给定参数
ε
\varepsilon
ε
b.思考:如何选择
ε
\varepsilon
ε
图G的权值的均值
图G的最小生成树的最大边
(3)k近邻图(k-nearest neighbor graph)
a.若vi的k最近邻包含vj,vj的k最近邻也不一定包含vi:有向图
b.忽略方向的图,往往称作“k近邻图”
c.两者都满足才连接的图,称作“互k近邻图”
拉普拉斯矩阵及其性质
(1)拉普拉斯矩阵:L=D-W
(2)L是对称半正定矩阵
(3)L的最小特征值实0
(4)L有n个非负实特征值
0
=
λ
1
≤
λ
2
≤
.
.
.
≤
λ
n
0=\lambda_1≤\lambda_2≤...≤\lambda_n
0=λ1≤λ2≤...≤λn
拉普拉斯矩阵的定义
(1)计算点之间的邻接相似度矩阵W
a.若两个点的相似度值越大,表示这两个点越相似
b.同时,定义
w
i
j
=
0
w_{ij}=0
wij=0表示
v
i
,
v
j
v_i,v_j
vi,vj两个点没有任何相似性(无穷远)
(2)W的第i行元素的和为
V
j
V_j
Vj的度。形成顶点度对角阵D
a.
d
i
i
表
示
第
i
个
点
的
度
d_{ii}表示第i个点的度
dii表示第i个点的度
b.除主对角线元素,D其他位置为0
(3)未正则的拉普拉斯矩阵
L
=
D
−
W
L=D-W
L=D−W
(4)正则拉普拉斯矩阵
a.对称拉普拉斯矩阵:
b.随机游走拉普拉斯矩阵
谱聚类算法:未正则拉普拉斯矩阵
(1)输入:n个点{
p
i
p_i
pi},簇的数目k
a.计算
n
∗
n
n*n
n∗n的相似度矩阵W和度矩阵D
b.计算拉普拉斯矩阵
L
=
D
−
W
L=D-W
L=D−W
c.计算L的前k个特征向量
μ
1
,
μ
2
,
.
.
.
,
μ
n
\mu_1,\mu_2,...,\mu_n
μ1,μ2,...,μn
d.将k个列向量
μ
1
,
μ
2
,
.
.
.
,
μ
n
\mu_1,\mu_2,...,\mu_n
μ1,μ2,...,μn组成矩阵U,
U
∈
R
n
∗
k
U∈R^{n*k}
U∈Rn∗k
e.对于i=1,2,…,n,令
y
i
∈
R
k
y_i∈R^k
yi∈Rk是U的第i行的向量
f.使用k-means算法将点
(
y
i
)
i
=
1
,
2
,
.
.
.
,
n
(y_i)_{i=1,2,...,n}
(yi)i=1,2,...,n聚类成簇
C
1
,
C
2
,
.
.
.
C
k
C_1,C_2,...C_k
C1,C2,...Ck
g.输出簇
A
1
,
A
2
,
.
.
.
A
k
A_1,A_2,...A_k
A1,A2,...Ak,其中,
A
i
=
{
j
∣
y
j
∈
C
i
}
A_i=\lbrace j|y_j∈C_i\rbrace
Ai={j∣yj∈Ci}
谱聚类算法:对称拉普拉斯矩阵
(1)输入:n个点{
p
i
p_i
pi},簇的数目k
a.计算
n
∗
n
n*n
n∗n的相似度矩阵W和度矩阵D
**b.计算拉普拉斯矩阵
L
s
y
m
=
D
−
1
/
2
(
D
−
W
)
D
−
1
/
2
L_{sym}=D^{-1/2}(D-W)D^{-1/2}
Lsym=D−1/2(D−W)D−1/2
c.计算
L
s
y
m
L_{sym}
Lsym的前k个特征向量
μ
1
,
μ
2
,
.
.
.
,
μ
n
\mu_1,\mu_2,...,\mu_n
μ1,μ2,...,μn
d.将k个列向量
μ
1
,
μ
2
,
.
.
.
,
μ
n
\mu_1,\mu_2,...,\mu_n
μ1,μ2,...,μn组成矩阵U,
U
∈
R
n
∗
k
U∈R^{n*k}
U∈Rn∗k
e.对于i=1,2,…,n,令
y
i
∈
R
k
y_i∈R^k
yi∈Rk是U的第i行的向量
f.对于i=1,2,…,n,将
y
i
∈
R
k
y_i∈R^k
yi∈Rk依次单位化,使得
∣
y
i
∣
=
1
|y_i|=1
∣yi∣=1
g.使用k-means算法将点
(
y
i
)
i
=
1
,
2
,
.
.
.
,
n
(y_i)_{i=1,2,...,n}
(yi)i=1,2,...,n聚类成簇
C
1
,
C
2
,
.
.
.
C
k
C_1,C_2,...C_k
C1,C2,...Ck
h.输出簇
A
1
,
A
2
,
.
.
.
A
k
A_1,A_2,...A_k
A1,A2,...Ak,其中,
A
i
=
{
j
∣
y
j
∈
C
i
}
A_i=\lbrace j|y_j∈C_i\rbrace
Ai={j∣yj∈Ci}
谱聚类算法:随机游走拉普拉斯矩阵
(1)输入:n个点{
p
i
p_i
pi},簇的数目k
a.计算
n
∗
n
n*n
n∗n的相似度矩阵W和度矩阵D
b.计算拉普拉斯矩阵
L
r
w
=
D
−
1
(
D
−
W
)
L_{rw}=D^{-1}(D-W)
Lrw=D−1(D−W)****
c.计算
L
r
w
L_{rw}
Lrw的前k个特征向量
μ
1
,
μ
2
,
.
.
.
,
μ
k
\mu_1,\mu_2,...,\mu_k
μ1,μ2,...,μk
d.将k个列向量
μ
1
,
μ
2
,
.
.
.
,
μ
n
\mu_1,\mu_2,...,\mu_n
μ1,μ2,...,μn组成矩阵U,
U
∈
R
n
∗
k
U∈R^{n*k}
U∈Rn∗k
e.对于i=1,2,…,n,令
y
i
∈
R
k
y_i∈R^k
yi∈Rk是U的第i行的向量
f.使用k-means算法将点
(
y
i
)
i
=
1
,
2
,
.
.
.
,
n
(y_i)_{i=1,2,...,n}
(yi)i=1,2,...,n聚类成簇
C
1
,
C
2
,
.
.
.
C
k
C_1,C_2,...C_k
C1,C2,...Ck
g.输出簇
A
1
,
A
2
,
.
.
.
A
k
A_1,A_2,...A_k
A1,A2,...Ak,其中,
A
i
=
{
j
∣
y
j
∈
C
i
}
A_i=\lbrace j|y_j∈C_i\rbrace
Ai={j∣yj∈Ci}
ok,这篇文章暂且到这里