简介
从9到13章基本介绍的都是监督学习的分类与回归方法,接下来我们来介绍一下非监督学习。
非监督学习只有输入量 x x x,即没有类别,又不需要与数据环境有交互进行增强学习。我们可以认为非监督学习主要是用来识别某一种模式,可以降维、也可以是其它学习模型的输入,如主成分回归等等。
非监督学习的目标大体有两类
- 聚类:k-means ,高斯混合模型等
- 维度压缩与成分提取:如因子分析FA、主成分分析PCA,独立成分分析ICA等
关于维度压缩与成分提取,参见第5章,本章只集中介绍一些聚类的方法。
正文
一,传统聚类模型简介
分类 | 模型名称 | 时间复杂度 |
---|---|---|
基于划分的 | K-means | O(nkt),low,t表示迭代次数 |
基于划分的 | K-Medoid | O(k(n-k)ˆ2),high |
基于划分的 | PAM | O(kˆ3*nˆ2) ,high |
基于划分的 | CLARA | O(ksˆ2+k(n-k)) ,middle |
基于划分的 | CLARANS | O(nˆ2),high |
基于划分的 | K-Modes | |
基于划分的 | k-prototypes | |
基于模型的 | 混合高斯模型GMM | O(nˆ2*kt),high |
基于模型的 | 自组织映射SOM | (layer),high |
基于模型的 | COBWEB | (distribution),low |
基于模型的 | ART | (type+layer),middle |
基于网格的 | STING | O(n),low |
基于网格的 | CLIQUE | O(n+kˆ2),low |
基于密度的 | DBSCAN | O(n*logn),middle |
基于密度的 | OPTICS | O(n*logn),middle |
基于密度的 | DENCLUE | |
基于图的 | SNN(shared nearest neighbor) | |
基于图的 | CLICK | O(k*f(v, e)),low |
基于图的 | MST聚类 | O(e*logv),middle |
基于层级的 | 凝聚的层次聚类AGNES | |
基于层级的 | 分裂的层次聚类DIANA | |
基于层级的 | BIRCH | O(n),low |
基于层级的 | CURE | O(sˆ2*s),low |
基于层级的 | ROCK | O(nˆ2*logn),high |
基于层级的 | Chameleon | O(nˆ2),high |
基于模糊理论的 | FCM | O(n),low |
基于模糊理论的 | FCS | (kernel),high |
基于模糊理论的 | MM | O(vˆ2*n),middle, |
二,相似性度量或相异性度量
度量名称 | 公式 | 说明 | |
---|---|---|---|
相似性度量 | 简单匹配系数(SMC) | f 11 + f 00 f 01 + f 10 + f 11 + f 00 \frac{f_{11}+f_{00}}{f_{01}+f_{10}+f_{11}+f_{00}} f01+f10+f11+f00f11+f00 | 二元0-1属性的相似性度量 f 00 : f_{00}: f00: x取0,y取0的属性的个数 f 01 : f_{01}: f01: x取0,y取1的属性的个数 f 10 : f_{10}: f10: x取1,y取0的属性的个数 f 11 : f_{11}: f11: x取1,y取1的属性的个数 |
相似性度量 | Jaccard系数 | f 11 f 01 + f 10 + f 11 \frac{f_{11}}{f_{01}+f_{10}+f_{11}} f01+f10+f11f11 | 如果0-1属性是等重要性的如表示两种性别,则用SMC较好。 但是市场研究中往往0-1的重要性是不相等的。 比如1000商品中个,A顾客买了盐和水,B顾客买了盐和面, 那么Jaccard=1/3,而SMC=0.998 |
相似性度量 | Tanimoto系数 | x y ∥ x ∥ 2 + ∥ y ∥ 2 − x y \frac{xy}{\|x\|^2+\|y\|^2-xy} ∥x∥2+∥y∥2−xyxy | |
相似性度量 | 余弦相似度 | c o s ( x , y ) = x ⋅ y ∥ x ∥ ∥ y ∥ = ∑ k = 1 m x k y k ∑ k = 1 m x k 2 ∑ k = 1 m y k 2 cos(x,y)=\frac{x·y}{\|x\| \|y\|}=\frac{\sum\limits_{k=1}^mx_ky_k}{\sqrt{\sum\limits_{k=1}^mx_k^2}\sqrt{\sum\limits_{k=1}^my_k^2}} cos(x,y)=∥x∥∥y∥x⋅y=k=1∑mxk2k=1∑myk2k=1∑mxkyk | 用两个向量的夹角来衡量相似性 |
相似性度量 | 相关系数 | pearson、spearman、kendall | 1- 余弦相似度 ,以及1-相关系数 都可以转化为相异性度量 |
相异性度量 | Minkowski距离 | D i j = ( ∑ k = 1 m D_{ij}=(\sum\limits_{k=1}^m Dij=(k=1∑m| x i k − y j k x_{ik}-y_{jk} xik−yjk| p ) 1 p ^p)^{\frac{1}{p}} p)p1 | 当p=1时,曼哈顿距离; 当p=2时,欧式距离; 当p→∞时,切比雪夫距离 |
相异性度量 | Mahalanobis距离 | D ( x i , x j ) = ( x i − x j ) T ∑ − 1 ( x i − x j ) D(x_i,x_j)=\sqrt{(x_i-x_j)^T∑^{-1}(x_i-x_j)} D(xi,xj)=(xi−xj)T∑−1(xi−xj) | ∑为协方差矩阵; 与欧式距离不同的是它考虑到各种特性之间的联系, 并且是尺度无关的(独立于测量尺度) |
相异性度量 | Hamming距离 | 两个等长字符串中对应位置的不同字符的个数 | batch和catch的汉明距离为1 |
相异性度量 | Bregman散度 |
D
(
x
,
y
)
=
ϕ
(
x
)
−
ϕ
(
y
)
−
<
∇
ϕ
(
y
)
,
(
x
−
y
)
>
D(x,y)=\phi(x)-\phi(y)-<\nabla \phi(y),(x-y)>
D(x,y)=ϕ(x)−ϕ(y)−<∇ϕ(y),(x−y)> D ( x , y ) = ϕ ( x ) − L ( x ) D(x,y)=\phi(x)-L(x) D(x,y)=ϕ(x)−L(x) L ( x ) = ϕ ( y ) + < ∇ ϕ ( y ) , ( x − y ) > L(x)=\phi(y)+<\nabla \phi(y),(x-y)> L(x)=ϕ(y)+<∇ϕ(y),(x−y)> |
L
(
x
)
L(x)
L(x)是函数
ϕ
(
)
\phi()
ϕ()在y点处的线性部分 Bregman散度是衡量一个函数 ϕ ( x ) \phi(x) ϕ(x) 与函数在y点的线性部分之间的差异 |
Bregman散度的例子
假设 ϕ ( x ) = x 2 \phi(x)=x^2 ϕ(x)=x2, Bregman散度为
D ( x , y ) = x 2 − y 2 − 2 y ( x − y ) = ( x − y ) 2 D(x,y)=x^2-y^2-2y(x-y)=(x-y)^2 D(x,y)=x2−y2−2y(x−y)=(x−y)2
y=1,x=3,时
度量有三种对象
- 点与点之间
- 点与簇之间
- 簇与簇之间
上述介绍的主要是一些点与点之间的度量方法,点与簇、簇与簇的度量方法一般是基于点与点之间的度量结果,取最大/最小值,或者加权平均值等等。
三,基于划分的聚类
1,K-means
- 模型思想
用质心来表示簇(cluster),随机初始化质心之后,不断迭代质心,当质心不在变化或者目标函数收敛时停止迭代。
- 算法原理
kmeans的计算方法如下:
-
初始化质心:随机选取k个点作为质心的初始值;
-
迭代质心
- 将每个数据划分到最近(距离最小)的质心中,并更新簇
- 计算每个新的簇的质心值,更新质心值
-
重复上一步,直到这k个质心不变或者目标函数 S S E = ∑ i = 1 i = k ∑ x ∈ C i d i s t ( x , c i ) SSE=\sum_{i=1}^{i=k}\sum_{x∈C_i}{dist(x,c_i)} SSE=∑i=1i=k∑x∈Cidist(x,ci)收敛时则停止迭代
k均值常见的距离度量、质心与目标函数组合
距离 | 质心 | 目标函数 |
---|---|---|
曼哈顿距离 L 1 L_1 L1 | 中位数 | 最小化对象到质心的 L 1 L_1 L1距离和 |
欧几里得距离的平方 L 2 2 L^2_2 L22 | 均值 | 最小化对象到质心的 L 2 L_2 L2距离和 |
余弦 | 均值 | 最大化对象到质心的余弦相似度和 |
Bregman散度 | 均值 | 最小化对象到质心的Bregman散度和 |
缺点:
- 选择适当的初始质心是基本K均值过程的关键步骤,虽然都是随机化的选取,但是簇的质量较差,仅可实现局部最优。
- 因为k均值的目标函数是最小化等尺寸和等密度的球形簇,或者明显分离的簇,对于不满足这些条件的聚类效果不好。而且对异常点、离群点也比较敏感。最后,k均值仅限于具有中心(质心)概念的数据。
改进
- 二分法,不断二分选取簇中心
簇的评估
用于评估簇的指标一般分成三类:
1). 非监督的
聚类结构的优良性度量,不考虑外部信息。簇的有效性度量常常可以进一步分成两类:簇的凝聚性(cluster cohesion),簇的分离性(cluster separation)。非监督度量通常称为内部指标,因为仅使用出现在数据集中的信息;
2). 监督的
度量聚类算法发现的聚类结构与某种外部结构的匹配程度。例如,熵,它度量簇标号与外部提供的标号的匹配程度。监督度量通常称为外部指标,因为使用了不在数据集中出现的信息;
3). 相对的
比较不同的聚类或簇。不限于一种度量类型及方法的使用;
非监督的评估-轮廓系数(silhouette coefficient)
基于划分的聚类模型,簇有效性评价都是基于凝聚度和分离度概念出发的,轮廓系数即是凝聚度和分离度的组合评价指标。
凝聚度与分离度有两种衡量方式,要么是根据类内以及类间各点距离的加权值;要么是类内各点到质心,以及类间各质心之间的距离值。
在某些情况下,凝聚度和分离度之间也存在很强的联系。即总平方和TSS—每个点到数据的总均值的距离平方和,等于SSE+SSB。这种前提下,最小化SSE(凝聚度)等价于最大化SSB(分离度)。
k均值的轮廓系数是以第一种方式定义凝聚度与分离度的
- 对于第i个对象的凝聚度:计算它到簇中所有其他对象的平均距离。该值记为 a i a_i ai;
- 对于第i个对象的分离度:计算它和不包含该对象的任意簇,计算该对象到给定簇中所有对象的平均距离。遍历计算其他的簇,找出最小值。该值记作 b i b_i bi;
- 对于第i个对象,轮廓系数 s i = ( b i − a i ) / m a x ( a i , b i ) s_i=(b_i - a_i)/max(a_i,b_i) si=(bi−ai)/max(ai,bi);
- 计算所有点轮廓系数的平均值,得到聚类优良性的总度量 s ‾ \overline s s.轮廓系数
- 通常我们取轮廓系数最大或较大的拐点处对应的分类个数k。
2,k-Medoids
- 模型思想
与kmeans不同,k中心点算法是用样本中实际的点来作为簇的中心点,用以表示簇(cluster)。随机初始化中心点之后,不断迭代用其他点替换中心点,当中心点不在变化或者目标函数收敛时停止迭代。
- 算法原理
k-medoids的计算方法如下:
-
初始化中心点:随机选取k个点作为初始值;
-
迭代中心点
- 将每个数据划分到最近(距离最小)的中心点,并更新簇,得到一组目标函数值
- 随机再选择一个点替换中心点,并重新计算上述值,如果满足目标函数则交换中心点
-
重复上一步,直到这k个中心点不变或者目标函数收敛时则停止迭代
3,k-medoids思想延伸出的三种算法
PAM算法(Partitioning Around Medoid)
- 算法原理
选择的中心点集合我们成为S集,未选择的中心点结合我们成为U集
-
在第一阶段,我们为初始化集合S,建立一组包含k个中心点对象的集合。
1.1 S中的第一个点:所有点到该点的距离和最小;
1.2 U中选取一点 i ∈ U i∈U i∈U,作为进入S集的候选对象;
1.3 U中再选取一点 j ∈ U − { i } j∈U-\{i\} j∈U−{i},并计算 D j D_j Dj,表示为 j j j点到S集合中各对象距离的最小值
1.4 如果 D j > d ( i , j ) D_j>d(i,j) Dj>d(i,j),则说明我们选择点 i i i是可行的(因为如果点 i i i是另一个簇的中心点,那么点 j j j的信息帮我们说明,点 i i i表示的簇与S集中最近的那个簇也是有区分度的)我们令 C j i = m a x { D j − d ( j , i ) , 0 } C_{ji} = max\{D_j-d(j,i),0\} Cji=max{Dj−d(j,i),0}
1.5 计算所有U集合中的点的累计值, 记为 g i = ∑ j ∈ U C j i g_i=\sum{_{j∈U}C_{ji}} gi=∑j∈UCji
1.6 选取最大化 g i g_i gi值的点 i i i,更新集合 S : = S ∪ { i } S:=S ∪ \{i\} S:=S∪{i}, U : = U − { i } U:=U - \{i\} U:=U−{i}
1.7 重复上述步骤,直到选取k个值 -
在第二个阶段,我们通过交换第一阶段中选中的对象与U集合中未选中的对象来提高簇聚合的质量。
对于 h ∈ U , j ∈ U − { h } h∈U, j∈U-\{h\} h∈U,j∈U−{h}, 我们需要对所有的配对 ( i , h ) ∈ S × U (i,h)∈ S × U (i,h)∈S×U,计算目标函数 T i h T_{ih} Tih. 如果满足目标函数的要求,则把点 h h h从U中移到S中,把点 i i i从S中移到U中。
我们记 K j i h K_{jih} Kjih,表示为点 j j j支持中心点 i i i与候选中心点 h h h互换的代价。
我们记 D j D_j Dj表示为点 j j j到S集合中最近点的距离,记 E j E_j Ej表示为点 j j j到S集合中第二近的点的距离。所以,我们有 d ( j , i ) > = D j d(j,i)>=D_j d(j,i)>=Dj)
2.1 计算 K j i h K_{jih} Kjih
(a). 如果 d ( j , i ) > D j d(j,i)>D_j d(j,i)>Dj
i. 如果 d ( j , h ) > = D j d(j,h)>=D_j d(j,h)>=Dj,则 K j i h K_{jih} Kjih=0
ii. 如果 d ( j , h ) < D j d(j,h)<D_j d(j,h)<Dj,则 K j i h K_{jih} Kjih= d ( j , h ) − D j d(j,h)-D_j d(j,h)−Dj
则, K j i h K_{jih} Kjih= min{ d ( j , h ) − D j , 0 d(j,h)-D_j, 0 d(j,h)−Dj,0}(b). 如果 d ( j , i ) = D j d(j,i)=D_j d(j,i)=Dj
i. 如果 d ( j , h ) > = E j d(j,h)>=E_j d(j,h)>=Ej,则 K j i h = E j − D j K_{jih} = E_j-D_j Kjih=Ej−Dj
ii. 如果 d ( j , h ) < E j d(j,h)<E_j d(j,h)<Ej,则 K j i h K_{jih} Kjih = d ( j , h ) − D j d(j,h)-D_j d(j,h)−Dj
则 K j i h K_{jih} Kjih = min{ d ( j , h ) , E j } − D j d(j,h),E_j\}-D_j d(j,h),Ej}−Dj
我们可以通过下图,了解各距离的关系:
2.2 计算所有点的累计
K
j
i
h
K_{jih}
Kjih,即点
{
i
,
h
}
\{i,h\}
{i,h}互换的目标函数
T
i
h
=
∑
{
K
j
i
h
∣
j
∈
U
}
T_{ih} = \sum\{ K_{jih} | j∈U\}
Tih=∑{Kjih∣j∈U}
2.3 目标函数最小化 T i h T_{ih} Tih得到的一对点 { i , h } \{i,h\} {i,h}
2.4 判断是否互换
如果
T
i
h
<
0
T_{ih} < 0
Tih<0,交换
{
i
,
h
}
\{i,h\}
{i,h};更新
D
j
,
E
j
D_j,E_j
Dj,Ej,返回步骤1
如果
T
i
h
>
0
T_{ih} > 0
Tih>0,停止
CLARA算法 (Clustering LARge Applications)
不考虑整个数据集, 而是选择数据的一小部分作为样本。它从数据集中抽取多个样本集, 对每个样本集使用PAM, 并以最好的聚类作为输出
CLARA 算法的步骤:
(1) for i = 1 to 5 (选样的次数) ,重复执行下列步骤 :
(2) 随机地从整个数据库中抽取一个N(例如:(40 + 2 k))个对象的样本,调用PAM方法从样本中找出样本的k个最优的中心点。
(3)将这k个中心点应用到整个数据库上, 对于每一个非代表对象Oj ,判断它与从样本中选出的哪个代表对象距离最近.
(4) 计算上一步中得到的聚类的总代价. 若该值小于当前的最小值,用该值替换当前的最小值,保留在这次选样中得到的k个代表对象作为到目前为止得到的最好的代表对象的集合.
(5) 返回到步骤(1) ,开始下一个循环.
算法结束后,输出最好的聚类结果。
CLARAS算法 (Clustering Large Applications based on RANdomized Search)
算法引入了图(graph)的概念,寻找k个中心点的过程,可以被抽象的看作是寻找一个特定的图。在这个图中,一个节点(node)代表了一组k个中心点的候选集。所以,PAM算法实际上也是为了找出一个目标代价最小一个图作为聚类的结果。
定义相邻(neighbor),在这个抽象的图中,如果两个节点所代表的k个中心点对象仅相差一个,就认为这两个节点代表的对象互为近邻neighbors。
因为每个节点代表了一组k个中心点,所以每个节点都可以对应的给出一个代价函数,两个近邻节点之间的代价函数差异,也代表了两个节点所相差的两个中心点候选对象相互交换后的代价差异。
(所以,由于近邻的思想,CLARAS算法对变量对象的输入顺序比较敏感.)
PAM相当于是要计算比较所有近邻点得到最优结果。
CLARA相当于是抽样一部分节点后,计算比较每个节点对于的近邻点(neighbors)的结果。
CLARAS是通过动态的抽样,不光抽样每个节点,每个节点下面的近邻点也是抽样选取的,然后再比较结果。
算法具体步骤:
- 第 1 步输入参数numlocal 和maxneighbor。
- 第 2 步从 n 个目标中随机地选取k 个目标构成质心集合,并令它们作为current集合。
- 第 3 步令 j 等于1。
- 第 4 步从第 2 步中剩下的n–k 个目标集中随机选取一个目标,并用之替换质心集合中随机的某一个质心可得到一个新的质心集合,计算两个质心集合的代价差(这一点和PAM相似,只是变成了随机选取替换对象和被替换对象)。这两个集合也就是抽象图中的近邻节点。
- 第 5 步如果新的质心集合代价较小则将其赋给current,重置j=1,否则j+=1
- 第 6 步直到j大于等于maxneighbor,则current为此时的最小代价质心集合
- 第 7 步重复以上步骤numlocal次,取其中代价最小的质心集合为最终质心集合
- 第 8 步按照最终质心集合进行划分并输出
4,K-Modes
kmodes思想与kmeans基本一致,只是针对的数据类型不同。kmeans只针对连续型数值数据,对于离散的属性的变量数据来说,差异性度量,即距离的度量方法需要变更,由此延伸出了kmodes模型。
而且,kmeans采用的是簇的质心作为聚类的划分中心,而kmodes采用的是簇的属性的众数作为聚类划分的中心。
kmodes的度量,采用的是Hamming距离,即两个等长字符串中对应位置的不同字符的个数。
算法步骤:
-
初始化k个类中心:随机确定k个聚类中心 C 1 , C 2 . . . C k C_1,C_2...C_k C1,C2...Ck, C i C_i Ci是长度为M的向量, C i = [ C 1 i , C 2 i , . . . , C M i ] C_i=[C_{1i},C_{2i},...,C_{Mi}] Ci=[C1i,C2i,...,CMi]
-
对于样本 x j ( j = 1 , 2 , . . . , N ) x_j (j=1,2,...,N) xj(j=1,2,...,N),分别比较其与k个中心之间的距离(这里的距离为不同属性值的个数
-
将 x j x_j xj划分到距离最小的簇,在全部的样本都被划分完毕之后,重新确定簇中心,向量 C i C_i Ci中的每一个分量都更新为簇i中的众数
-
重复步骤二和三,直到总距离(各个簇中样本与各自簇中心距离之和)不再降低,返回最后的聚类结果
5,K-Prototypes
结合了kmeans 与 kmodes的思想,用于处理混合了数值型与离散型的数据。如果数据中没有离散的情况,那么kprotoypes方法与kmeans等价。
所以,对于kprototypes方法,差异在于,相异度距离的衡量,与损失代价的目标函数的衡量。
损失函数可以统一的表述为下面形式:
其中,
y
i
l
y_{il}
yil是划分矩阵,表示变量
x
i
x_i
xi属于哪个分类
l
l
l.
y
i
l
∈
{
0
,
1
}
y_{il}∈\{0,1\}
yil∈{0,1},表示的是硬划分,1表示属于此分类,0表示不属于此分类.
如果
0
=
<
y
i
l
<
=
1
0=<y_{il}<=1
0=<yil<=1的实数,则表示
y
i
l
y_{il}
yil为模糊的划分矩阵
(模糊的划分,等到基于模糊的聚类方法时会讲到,本章的方法均运用的是硬划分).
根据数据类型,相异度距离的衡量变为:
其中,上角标带有‘r’的表示为数值型数据对应的数据与类中心,上角标带有‘c’的表示为离散数据对应的数据与类中心。
γ
l
γ_l
γl表示权重。
所以,代价损失函数也拆分成了两部分。
kprototype算法的步骤与kmeans基本一致,只是权重 γ l γ_l γl对结果的影响比较大。
综上,对于基于划分的聚类方法,为了解释簇中隐含的信息与规则,我们也可以基于聚类结果,再次引用决策树算法,来归纳并提供簇中的规则信息,以解释簇。
具体决策树的算法,参考,第十章
参考:
A Comprehensive Survey of Clustering Algorithms
https://www.cs.umb.edu/cs738/pam1.pdf
http://www.cs.ecu.edu/dingq/CSCI6905/readings/CLARANS.pdf
https://grid.cs.gsu.edu/~wkim/index_files/papers/kprototype.pdf
数据挖掘导论