描述:对原型进行初始化,然后对原型进行迭代更新求解。
给定样本集 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 当前均值向量未更新
特点:假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
给定样本集 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 靠拢;反之远离。
特点:采用概率模型表达聚类原型
多元高斯分布定义:对n维样本空间\chi中的随机向量x,若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