原型聚类
描述:对原型进行初始化,然后对原型进行迭代更新求解。
1.k均值算法
给定样本集 D={x1,x2,...,xm}, D = { x 1 , x 2 , . . . , x m } , “k-均值”(k-means)算法针对聚类所得簇划分 C={C1,C2,C3,...,Ck} C = { C 1 , C 2 , C 3 , . . . , C k } 最小化平方误差 E=∑ki=1∑x∈ci||x−μi||22,μi=1|Ci|∑x∈Cix 是簇Ci的均值向量 E = ∑ i = 1 k ∑ x ∈ c i | | x − μ i | | 2 2 , μ i = 1 | C i | ∑ x ∈ C i x 是 簇 C i 的 均 值 向 量
采用贪心算法,通过迭代优化近似求解上式。
算法步骤:
输入:样本集
D={x1,x2,...,xm};
D
=
{
x
1
,
x
2
,
.
.
.
,
x
m
}
;
聚类簇数k.
1:从D中随机选择k个样本作为初始均值向量
μ1,μ2,...,μk
μ
1
,
μ
2
,
.
.
.
,
μ
k
2:repeat
3:
令Ci=∅(1≤i≤k)
令
C
i
=
∅
(
1
≤
i
≤
k
)
4:
for j=1,2,...,m do
f
o
r
j
=
1
,
2
,
.
.
.
,
m
d
o
5:
计算样本xj与各均值向量μi(1≤i≤k)的距离:dji=||xj−μi||2
计
算
样
本
x
j
与
各
均
值
向
量
μ
i
(
1
≤
i
≤
k
)
的
距
离
:
d
j
i
=
|
|
x
j
−
μ
i
|
|
2
6:
根据距离最近的均值向量确定xj的粗标记:λj=arg mini∈{1,2,...,k} dji;
根
据
距
离
最
近
的
均
值
向
量
确
定
x
j
的
粗
标
记
:
λ
j
=
a
r
g
m
i
n
i
∈
{
1
,
2
,
.
.
.
,
k
}
d
j
i
;
7:
将样本xj划入相应的簇:Cλj∪{xj};
将
样
本
x
j
划
入
相
应
的
簇
:
C
λ
j
∪
{
x
j
}
;
8:
end for
e
n
d
f
o
r
9:
for i=1,2,...,k do
f
o
r
i
=
1
,
2
,
.
.
.
,
k
d
o
10:
计算新均值向量:μ‘i=1|Ci|∑x∈Cix
计
算
新
均
值
向
量
:
μ
i
‘
=
1
|
C
i
|
∑
x
∈
C
i
x
11:
if μ‘i≠μi then
i
f
μ
i
‘
≠
μ
i
t
h
e
n
12
将当前均值向量μi更新为μ‘i
将
当
前
均
值
向
量
μ
i
更
新
为
μ
i
‘
13:
else
e
l
s
e
14:
保持当前均值向量不变
保
持
当
前
均
值
向
量
不
变
15:
end if
e
n
d
i
f
16:
end for
e
n
d
f
o
r
17:
until
u
n
t
i
l
当前均值向量未更新
2学习向量量化(LVQ算法)
特点:假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
给定样本集 D=(x1,y1,(x2,y2),...,(xm,ym), D = ( x 1 , y 1 , ( x 2 , y 2 ) , . . . , ( x m , y m ) , 每个样本是由n个属性描述的特征向量 (xj1;xj2;xj3;...;xjn),yj∈Γ ( x j 1 ; x j 2 ; x j 3 ; . . . ; x j n ) , y j ∈ Γ 是样本 xj x j 得类别标记。LVQ目标是学得一组n维原型向量{p_1,p_2,…,p_q},每个原型向量代表一个聚类簇
算法描述:
输入:样本集D ={(x_1,y_1),(x_2,y_2),…,(x_m,y_m)};
原型向量个数q,各原型向量预设的类别标记{t_1,t_2,…,t_q};
学习率
η∈(0,1)
η
∈
(
0
,
1
)
过程:
1、初始化一组原型向量
p1,p2,...,pq
p
1
,
p
2
,
.
.
.
,
p
q
2、
repeat
r
e
p
e
a
t
3、
从样本集D随机选取样本(xj,yj);
从
样
本
集
D
随
机
选
取
样
本
(
x
j
,
y
j
)
;
4、
计算样本xj与pi(1≤i≤q)的距离:dij=xj−pi2;
计
算
样
本
x
j
与
p
i
(
1
≤
i
≤
q
)
的
距
离
:
d
i
j
=
x
j
−
p
i
2
;
5、
找出与
xj
x
j
距离最近的原型向量
pi∗,i∗=arg mini∈{1,2,...,q} dji;
p
i
∗
,
i
∗
=
a
r
g
m
i
n
i
∈
{
1
,
2
,
.
.
.
,
q
}
d
j
i
;
6、
if yj=ti∗ then
i
f
y
j
=
t
i
∗
t
h
e
n
7、
p′=pi∗+η⋅(xj−pi∗)
p
′
=
p
i
∗
+
η
·
(
x
j
−
p
i
∗
)
8、
else
e
l
s
e
9、
p′=pi∗−η⋅(xj−pi∗)
p
′
=
p
i
∗
−
η
·
(
x
j
−
p
i
∗
)
10、
end if
e
n
d
i
f
11、
将原型向量pi∗更新为p′
将
原
型
向
量
p
i
∗
更
新
为
p
′
12、
until 满足停止条件
u
n
t
i
l
满
足
停
止
条
件
核心步骤:6~10行,若类别相同,则 pi∗向xj p i ∗ 向 x j 靠拢;反之远离。
3高斯混合聚类
特点:采用概率模型表达聚类原型
多元高斯分布定义:对n维样本空间\chi中的随机向量x,若x服从高斯分布,其概率密度函数为:
该分布由均值向量 μ μ 和协方差矩阵 Σ Σ 确定,我们将概率密度函数定义为 p(x|μ,Σ) p ( x | μ , Σ ) ,于是我们定义高斯混合分布
从原型聚类的角度看,高斯混合聚类模型采用概率模型对原型进行刻画,簇的划分由原型对应的后验概率确定,具体的后验概率公式由贝叶斯定理得出,采用极大似然估计求解模型参数。具体推导步骤下一次再写。
密度聚类
亦称“基于密度的聚类”,此类算法假设聚类结构能通过样本分布的紧密程度确定。
DBSCAN是一种著名的密度聚类算法,它基于一组“邻域”参数
(ϵ,MinPts)
(
ϵ
,
M
i
n
P
t
s
)
来刻画样本分布的紧密程度。给定数据集,有如下概念:
+邻域:即
Nϵ(xj)={xi∈D|dist(xi,xj)≤ϵ};
N
ϵ
(
x
j
)
=
{
x
i
∈
D
|
d
i
s
t
(
x
i
,
x
j
)
≤
ϵ
}
;
+核心对象:
xj的ϵ−邻域
x
j
的
ϵ
−
邻
域
至少包含MinPts个样本,即
Nϵ(xj)≥MinPts
N
ϵ
(
x
j
)
≥
M
i
n
P
t
s
+密度直达:
xj位于xi
x
j
位
于
x
i
的
ϵ−
ϵ
−
邻域中,且
xi
x
i
是核心对象。
+密度可达:对样本序列
p1,p2,...,pn,p1=xi,pn=xj
p
1
,
p
2
,
.
.
.
,
p
n
,
p
1
=
x
i
,
p
n
=
x
j
且
pi+1由Pi
p
i
+
1
由
P
i
密度直达,则称
xj和xi
x
j
和
x
i
密度可达
+密度相连:对
xi和xj
x
i
和
x
j
,若存在
xk
x
k
使得
xi和xj
x
i
和
x
j
均由
xk
x
k
密度可达,则称
xi与xj
x
i
与
x
j
密度相连。
基于以上概念,DBSCAN将“簇”定义为:由密度可达关系导出最大密度相连样本的集合即:给定邻域参数
(ϵ,MinPts)
(
ϵ
,
M
i
n
P
t
s
)
,簇C满足一下性质非空样本子集:
DBSCAN算法步骤:
输入:样本集
D={x1,x2,...,xm};
D
=
{
x
1
,
x
2
,
.
.
.
,
x
m
}
;
邻域参数
(ϵ,MinPts).
(
ϵ
,
M
i
n
P
t
s
)
.
过程:
1、初始化核心对象集合:
Ω=∅
Ω
=
∅
2、
for j=1,2,...,m do
f
o
r
j
=
1
,
2
,
.
.
.
,
m
d
o
3、
确定样本xj的ϵ−邻域Nϵ(xj);
确
定
样
本
x
j
的
ϵ
−
邻
域
N
ϵ
(
x
j
)
;
4、
if|Nϵ(xj)|≥MinPts then
i
f
|
N
ϵ
(
x
j
)
|
≥
M
i
n
P
t
s
t
h
e
n
5、
将样本xj加入核心对象集合:Ω=Ω∪{xj}
将
样
本
x
j
加
入
核
心
对
象
集
合
:
Ω
=
Ω
∪
{
x
j
}
6、
end for
e
n
d
f
o
r
7、
end for
e
n
d
f
o
r
8、
初始化聚类簇数:k=0
初
始
化
聚
类
簇
数
:
k
=
0
9、
初始化未访问样本集合:Γ=D
初
始
化
未
访
问
样
本
集
合
:
Γ
=
D
10
、while Ω≠∅ do
、
w
h
i
l
e
Ω
≠
∅
d
o
11、
记录当前未访问样本集合:Γold=Γ;
记
录
当
前
未
访
问
样
本
集
合
:
Γ
o
l
d
=
Γ
;
12、
随机选取一个核心对象o∈Ω,初始化队列Q=<o>;
随
机
选
取
一
个
核
心
对
象
o
∈
Ω
,
初
始
化
队
列
Q
=<
o
>
;
13、
Γ=Γ−{o};
Γ
=
Γ
−
{
o
}
;
14、
while Q≠∅ do
w
h
i
l
e
Q
≠
∅
d
o
15、
取出队列Q中的首个样本q;
取
出
队
列
Q
中
的
首
个
样
本
q
;
16、
if |Nϵ(q)|≥MinPts then
i
f
|
N
ϵ
(
q
)
|
≥
M
i
n
P
t
s
t
h
e
n
17、
令Δ=Nϵ(q)∩Γ;
令
Δ
=
N
ϵ
(
q
)
∩
Γ
;
18、
将Δ中的样本加入队列Q;
将
Δ
中
的
样
本
加
入
队
列
Q
;
19、
Γ=Γ−Θ;
Γ
=
Γ
−
Θ
;
20、
end if
e
n
d
i
f
21、
end while
e
n
d
w
h
i
l
e
22、
k=k+1,生成聚类簇Ck=Γold Γ;
k
=
k
+
1
,
生
成
聚
类
簇
C
k
=
Γ
o
l
d
Γ
;
23、
Ω=Ω Ck
Ω
=
Ω
C
k
24、
end while
e
n
d
w
h
i
l
e
输出:簇划分
C=C1,C2,...,Ck
C
=
C
1
,
C
2
,
.
.
.
,
C
k
层次聚类
试图在不同层次上对数据及进行划分自底向上对数据集划分,也可采用自顶向下的分拆策略;
AGNES层次聚类算法描述:先将数据集集中的没一个样本看作一个初始的聚类簇,然后在算法运行的每一步找出距离最近的两个聚类簇进行合并,不断重复直至达到预设的聚类簇个数。
聚类簇间的距离公式:
算法步骤:
输入:样本集
D=x1,x2,...,xm;
D
=
x
1
,
x
2
,
.
.
.
,
x
m
;
聚类簇距离度量函数d;
聚类簇数k.
过程:
1、
for j=1,2,...,m do
f
o
r
j
=
1
,
2
,
.
.
.
,
m
d
o
2、
Cj={xj}
C
j
=
{
x
j
}
3、
end for
e
n
d
f
o
r
4、
fori=1,2,...,m do
f
o
r
i
=
1
,
2
,
.
.
.
,
m
d
o
5 、
for j=i+1,...,m do
f
o
r
j
=
i
+
1
,
.
.
.
,
m
d
o
6、
M(i,j)=d(Ci,Cj)
M
(
i
,
j
)
=
d
(
C
i
,
C
j
)
7、
M(j,i)=M(i,j)
M
(
j
,
i
)
=
M
(
i
,
j
)
8、
end for
e
n
d
f
o
r
9、
end for
e
n
d
f
o
r
10、
设置当前聚类簇的个数:q=m
设
置
当
前
聚
类
簇
的
个
数
:
q
=
m
11、
while q>k do
w
h
i
l
e
q
>
k
d
o
12、
找出距离最近的两个聚类簇Ci∗和Cj∗;
找
出
距
离
最
近
的
两
个
聚
类
簇
C
i
∗
和
C
j
∗
;
13、
合并Ci∗和Cj∗:Ci∗∪Cj∗;
合
并
C
i
∗
和
C
j
∗
:
C
i
∗
∪
C
j
∗
;
14、
forj=j∗+1,j∗+2,...,q do
f
o
r
j
=
j
∗
+
1
,
j
∗
+
2
,
.
.
.
,
q
d
o
15、
将聚类簇Cj重编号为Cj−1
将
聚
类
簇
C
j
重
编
号
为
C
j
−
1
16、
end for
e
n
d
f
o
r
17、
删除距离矩阵M的第j∗行与第j∗列;
删
除
距
离
矩
阵
M
的
第
j
∗
行
与
第
j
∗
列
;
18、
for j=1,2,...,q−1 do
f
o
r
j
=
1
,
2
,
.
.
.
,
q
−
1
d
o
19、
M(i∗,j)=d(Ci∗,Cj);
M
(
i
∗
,
j
)
=
d
(
C
i
∗
,
C
j
)
;
20、
M(j,i∗)=M(i∗,j)
M
(
j
,
i
∗
)
=
M
(
i
∗
,
j
)
21、
end for
e
n
d
f
o
r
22、
q=q−1
q
=
q
−
1
23、
end while
e
n
d
w
h
i
l
e
输出:簇划分
C=C1,C2,...,Ck
C
=
C
1
,
C
2
,
.
.
.
,
C
k