其他分享
首页 > 其他分享> > 机器学习:聚类分析

机器学习:聚类分析

作者:互联网

1,聚类简介

1.1,无监督学习

监督学习使用标记数据对 (x,y) 学习函数:X\rightarrow Y 。但是,如果我们没有标签呢?这类没有标签的学习方式被称为无监督学习。

无监督学习:如果训练样本全部无标签,则是无监督学习。例如聚类算法,就是根据样本间的相似性对样本集进行聚类试图使类内差距最小化,类间差距最大化。

主要用途:

  • 自动组织数据。
  • 理解某些数据中的隐藏结构。
  • 在低维空间中表示高维数据。

1.2,数据聚类 

将物理或抽象对象的集合分成由类似的对象组成的多个类或簇的过程被称为聚类。数据聚类是一个无监督的学习问题。

  • 前提:n 个未标记的样本 \left \{ x_1,x_2,...,x_n \right \},样本种类数量 K
  • 目标:将 n 个样例分成 K 类。

聚类使用的唯一信息是示例之间的相似性,并且一个好的聚类应该达到:高的簇内相似性低的簇间相似性。

1.3,相似概念

相似性度量的选择对于聚类非常重要,通常情况下用样本之间的距离表示相似度,且相似性与距离成反比。常用的距离有:

  • 欧式距离:d(x,z)=\sqrt{\sum_{d=1}^{D}(x_d-z_d)^2}
  • 曼哈顿距离:d(x,z)=\sum_{d=1}^{D}|x_d-z_d|
  • 核化(非线性)距离:d(x,z)=||\Phi(x)-\Phi(z)||,其中 \Phi(x) 表示 x 的核函数。

 对于左图,欧式距离可能是合理的;对于右边的图,核化距离似乎更合理。

2,层次聚类

2.1,概述

层次聚类的合并算法通过计算两类数据点间的相似性,对所有数据点中最为相似的两个数据点进行组合,并反复迭代这一过程。简单的说层次聚类的合并算法是通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之间的相似性,距离越小,相似度越高。并将距离最近的两个数据点或类别进行组合,生成聚类树。

层次聚类算法是通过将数据组织为若干组并形成一个相应的树来进行聚类的。在实际应用中一般有两种层次聚类方法:凝聚层次聚类方法&分裂层次聚类方法。

缺点:分层聚类虽然比较简单,但经常会遇到选择合并点或者分裂点的问题。这种选择非常关键,因为一旦一组对象被合并或者分裂,下一步的工作就是在新形成的类上进行,已做的处理不能撤销,类之间也不能交换对象。如果合并或者分裂的决定不合适,就可能得出低质量的聚类结果。而且,分层聚类算法没有很好的可伸缩性,在决定合并或者分裂之前需要检查和估算大量的对象和类。

2.2,凝聚聚类

凝聚(自底向上)聚类:

  • 将样本集中所有的样本点当做一个独立的类簇。
  • 计算两两类簇之间的距离,找到最小距离的两个类簇 c1=1,c2=3
  • 合并类簇 c1,c2 为一个类簇 \left \{ 1,3 \right \},重复2~3直到全部分类或者达到指定的 k 

可以使用不同的 K 值查看不同粒度级别的分区(即,可以细化/粗化集群)。例如下面的凝聚层次聚类方法。

  • k=0.05,层次聚类结果:\left \{ 1,3 \right \},\left \{2 \right \},\left \{5 \right \},\left \{4\right \},\left \{6\right \}
  • k=0.15,层次聚类结果:\left \{ 1,3 \right \},\left \{2,5 \right \},\left \{4\right \},\left \{6\right \}

2.3,分裂聚类

分裂(自上而下)聚类:

  • 将样本集中的所有样本归为一个类簇。
  • 在同一个类簇 c 中计算两两样本之间的距离,找到距离最远的样本 a=1,b=6
  • 将样本 a,b 分配到不同的类簇 c_1=\left \{ 1 \right \},c_2=\left \{ 6 \right \}
  • 计算原类簇 c 中剩余的其他样本点和 a,b 的距离,比较距离大小,确定将样本点分配到那个类簇。第一轮结果:c_1=\left \{ 1,3,2,5,4 \right \},c_2=\left \{ 6 \right \}。重复2~4直到全部分类或者达到指定的 k

2.4,计算相似性(距离)

凝聚的层次聚类要找到距离最近的子类(样本点对),分裂的层次聚类要找到距离最远的子类(样本点对),其中距离的计算可以采用不同的方法,主要有如下几种:

  • Min-link 方法:d(R,S)=min_{x_{R}\in R,x_{S}\in S}\, d(x_R,x_S)
  • Max-link 方法:d(R,S)=max_{x_{R}\in R,x_{S}\in S}\, d(x_R,x_S)
  • Average-link方法:d(R,S)=\frac{1}{|R|\ast |S|}\sum_{x_{R}\in R,x_{S}\in S}\, d(x_R,x_S)

2.5,算法优化

以自底向上为例,每次聚类划分都需要重新计算各个样本之间的距离,但是实际上每次合并都会有 n-2 个样本不会之间的相似度不会发生改变,因此可以减轻计算负担。

如上图所示,通过对比发现 x_1,x_2 的距离最小,相似度最高,因此将 x_1,x_2 进行合并,只需要重新x_3,x_4与新簇之间的距离,而 x_3,x_4 之间的相似度并未受到影响,因此可以减少很大的计算量。

3,K-means聚类

3.1,算法流程

首先随机从数据集中选取 K 个点,每个点初始地代表每个簇的聚类中心,然后计算剩余各个样本到聚类中心的距离,将它赋给最近的簇,接着重新计算每一簇的平均值,整个过程不断重复,如果相邻两次调整没有明显变化,说明数据聚类形成的簇已经收敛。

Input:\left \{ x_1,...,x_n \right \}(x_i\in R^D) ,分类数 K

Initialize:K 个簇中心 \mu_1,\mu_2,...,\mu_K

Iterate:

  • 将每个实例 x_i 赋值到其最接近的聚类中心:k=arg\, min_{k\in \left \{ 1,...,K \right \}}||x_i-\mu_k||
  • 重新计算每个类簇中心 \mu_k\mu_k=\frac{1}{|C_k|}\sum_{j\in C_k}x_j集合 C_k 的均值/质心)。分子表示属于 C_k 簇的样本求和,分母表示簇的样本个数。
  • 不收敛时重复。一个可能的收敛标准是:集群中心不再改变。

3.2,目标函数

K-means目标函数:

  • \mu_1,\mu_2,...,\mu_K 为 K 个簇的中心。
  • r_{ik}=\left \{ 0,1 \right \} 表示样本点 x_i 是否属于簇 k 。
  • K-means目标最小化点到其聚类中心的距离之和:

J(\mu,r)=\sum_{i=1}^{n}\sum_{k=1}^{K}r_{ik}||x_i-\mu_k||^2

  • K-means目标的精确优化是NP困难的。K-均值算法是一种收敛于局部最优解的启发式算法。

3.3,优化问题

为了保证 x_i 一定属于某个 k ,因此可以推出:\sum_{k=1}^{K}r_{ik}=1,r_{ik}\in \left \{ 0,1 \right \}

因此需要判定K-means目标函数在约束条件下的优化,即求最大相似度,距离最小值:

min\sum_{i=1}^{n}\sum_{k=1}^{K}r_{ik}||x_i-\mu_k||^2

s.t.\, \,\sum_{k=1}^{K}r_{ik}=1,r_{ik}\in \left \{ 0,1 \right \}

由于这是NP问题,无法同时优化 \mu,r ,因此采用分步优化的方法。用坐标表示为:

(1)给定 \mu 优化 r 

对上图来说,簇中心点确定,为了保证目标函数最小,可以通过设定目标点 x_i 所属的簇来减少距离。

例如:对 x_1 来说,给定 k_1,k_2,k_3,可以算出距离最小值的簇中心为 k_1。而 r_{ik} 的这有:

r_{11}=1,r_{12}=0,r_{13}=0

r_{11}=0,r_{12}=1,r_{13}=0

r_{11}=0,r_{12}=0,r_{13}=1

此时,r_{11}=1,r_{12}=0,r_{13}=0 为能使目标函数最小点的值。扩展到全部的样例点,利用所有的 r_{ik} 不同组合序列都可求得 \sum_{i=1}^{n}\sum_{k=1}^{K}r_{ik}||x_i-\mu_k||^2,取最小值对应的 r_{ik} 序列即为 r 的优化。 此为排序问题,对于给定的 \mu,总能找到  r_{ik} 序列使得 \sum_{i=1}^{n}\sum_{k=1}^{K}r_{ik}||x_i-\mu_k||^2取最小值。 

(2)给定 r 优化  \mu

\sum_{i=1}^{n}\sum_{k=1}^{K}r_{ik}||x_i-\mu_k||^2 ,化简:

=\sum_{i=1}^{n}\sum_{k=1}^{K}r_{ik}\sum_{j=1}^{n}(x_{ij}-\mu_{kj})^2

=\sum_{i=1}^{n}\sum_{k=1}^{K}r_{ik}\sum_{j=1}^{n}(x_{ik}^2-2x_{ik}\mu_{kj}+\mu_{kj}^2),在 k 处求导:

=\sum_{i=1}^{n}r_{ik}\sum_{j=1}^{n}(2\mu_{kj}-2x_{ik})

=2\sum_{i=1}^{n}r_{ik}(\mu_{k}-x_{i})=0

\sum_{i=1}^{n}r_{ik}(\mu_{k})=\sum_{i=1}^{n}r_{ik}(x_{i}),即:

\mu_{k}=\frac{\sum_{i=1}^{n}r_{ik}(x_{i})}{\sum_{i=1}^{n}r_{ik}}

其中,\sum_{i=1}^{n}r_{ik}(x_{i}) 表示属于 k 簇的样本求和;\sum_{i=1}^{n}r_{ik} 表示样本的个数;相除即为中心点。

3.4,收敛问题

第 T 次更新:J(\mu^{T},r^{T})\geqslant J(\mu^{T},r^{T+1})

第 T+1 次更新:J(\mu^{T},r^{T+1})\geqslant J(\mu^{T+1},r^{T+1})

即:J(\mu^{T},r^{T})\geqslant J(\mu^{T+1},r^{T+1})

单调下降,此时还需要证明有下界。

\sum_{i=1}^{n}\sum_{k=1}^{K}r_{ik}||x_i-\mu_k||^2\geqslant 0

因此,一定存在下界,K 一定大时,下界为0。

3.5,初始化问题

K-means对群集中心初始化极为敏感,错误的初始化可能导致:

  • 收敛速度差。
  • 整体聚类不好。

选择措施:

  • 选择第一个中心作为示例之一,第二个中心离第一个中心最远,第三个中心离两个中心都最远,依此类推。

假设第一个中心点为 \mu_1

\mu_2=max||\mu_1-x_i||^2\, \, \, s.t.\, \, \, 1\leqslant i\leqslant n,x_i\neq \mu_1

\mu_2=max||\mu_1-x_i||^2+||\mu_2-x_i||^2\, \, \, s.t.\, \, \, 1\leqslant i\leqslant n,x_i\neq \mu_1,\mu_2

......

  • 尝试多次初始化并选择最佳结果。
  • 其他更智能的初始化方案。

3.6,算法局限性

(1)将点硬指定给簇:

  • 点要么完全属于簇,要么根本不属于簇。
  • 没有软分配的概念(即分配给每个集群的概率:假设K=3,对于某个点 x_n,p1=0.7,p2=0.2,p3=0.1)。
  • 高斯混合模型和模糊K-均值允许软分配。

(2)对异常值示例敏感(此类示例会对平均值产生很大影响):

  • K-medians算法是一种更为稳健的异常数据替代方法。
  • 原因:在存在异常值的情况下,中值比均值更稳健。

(3)仅适用于圆形和大小/密度大致相等的簇。

(4)如果簇具有非凸形状,则效果会很差:

  • 谱聚类或核化K-均值可以作为替代方法。

4,谱聚类

4.1,概述

数据结构:图(图的抽象数据类型、图的表现和实现)_燕双嘤-CSDN博客1,图及其抽象数据类型图(Graph)是一种较线性表和树更为复杂的数据结构:在线性表中,数据元素之间仅有线性关系,即每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素 之间有着明显的层次关系,虽然每一层上的数据元素可能和下一层中多个元素(孩子) 相关,但只能和上一层中一个元素(双亲)相关。而在图形结构中,结点之间 的关系可以是任意的,任意两个数据元素之间都可能相关。1.1,图的基本概念图G(Graph)是由顶点(Vertex)集合V和顶点间的关系集合E(边Edghttps://shao12138.blog.csdn.net/article/details/115002316数据结构:图(图的遍历、最小生成树、最短路径)_燕双嘤-CSDN博客1,图的遍历和树的遍历类似,图的遍历也是从某个顶点出发,沿着某条搜索路径对图中所有顶点各作一次访问。若给定的图是连通图,则从图中任一顶点出发顺着边可以访问到该图中所有的顶点,但是,在图中有回路,从图中某一顶点出发访问图中其它顶点时,可能又会回到出发点,而图中可能还剩余有顶点没有访问到,因此,图的遍历较树的遍历更复杂。我们可以设置一个全局型标志数组visited来标志某个顶点是否被访问过,未访问的值为0,访问过的值为1。根据搜索路径的方向不同,图的遍历有两种方法:深度优先搜索遍历(DFS)和广度优先搜索https://shao12138.blog.csdn.net/article/details/84860742谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用。它的主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。

目标:给定数据点 X_1,X_2,...,X_n 和相似性 w(X_i,X_j),将数据分成若干组,以便一组中的点相似,而不同组中的点不同。对图形进行分区,使组内的边具有较大的权重,而组间的边具有较小的权重。

对每一行每一列来说簇内结点的权重永远大于与其他簇结点的权重。

4.2,相似图构造

相似图:数据点之间的局部邻域关系模型。

例如,高斯核相似函数:

W_{ij}=e^{\frac{||x_i-x_j||^2}{2\sigma^2}}

其中超参数 \sigma 用来控制邻域的大小。

4.3,最小分割

Min-cut:将图分成两个集合A和B,使得连接A中顶点和B中顶点的边的权重最小。

cut(A,B)=\sum_{i\in A,j\in B}w_{ij}

也就是求解最小生成树,所用方法:Prim算法或Krushal算法(具体参考上面博客),以Prim算法为例。

将最后的最小生成树中最小权重的边 AD=10 作为切割线,可得到两个簇:\left \{ A \right \},\left \{ B,C,D,E,F \right \}

从结果看,这种做法似乎有些问题,通常情况下我们希望簇之间的结点的数目尽可能一致,否则会出现不令人满意的分区-通常会隔离顶点。

4.4,标准分割

Normalized cut:将图分成两个集合A和B,使得连接A中顶点和B中顶点的边的权重最小&A和B的大小非常相似。由于子图样本的个数多并不一定权重就大,切图时基于权重也更合我们的目标,因此一般来说Ncut切图优于RatioCut切图。

Ncut(A,B)=cut(A,B)(\frac{1}{vol(A)}+\frac{1}{vol(B)})

其中 vol(A)=\sum_{i\in A}d_i 表示图A中权重的和,也可以用数量来代替。

但是对我们来说,NP很难解决!!光谱聚类是这个方法的一种松弛。

令 W\in R^{n\times n} 表示图的邻接矩阵。

令 D=diag(d_1,d_2,...,d_n),其中 d_i=\sum_{j=0}^{n}w_{ij},行和。

令 L=D-W ,

令 f=[f_1,f_2,...,f_n]^T,f_i=\left\{\begin{matrix} \frac{1}{vol(A)} & i\ni A\\ -\frac{1}{vol(B)} & i\ni A \end{matrix}\right.

f^TLf=f^T(D-W)f

=f^TDf-f^TWf

=\sum_{i=1}^{n}d_if_i^2-\sum_{i=1}^{n}\sum_{j=1}^{n}f_if_jw_{ij}

=\frac{1}{2}\sum_{i=1}^{n}d_if_i^2+\frac{1}{2}\sum_{j=1}^{n}d_jf_j^2-\sum_{i=1}^{n}\sum_{j=1}^{n}f_if_jw_{ij},带入 d_i=\sum_{j=1}^{n}w_{ij}

=\frac{1}{2}\sum_{i=1}^{n}\sum_{i=1}^{n}w_{ij}f_i^2+\frac{1}{2}\sum_{j=1}^{n}\sum_{i=1}^{n}w_{ji}f_j^2-\sum_{i=1}^{n}\sum_{j=1}^{n}f_if_jw_{ij}

=\frac{1}{2}\sum_{i=1}^{n}\sum_{i=1}^{n}w_{ij}(f_i^2+f_j^2-2f_if_j)

=\frac{1}{2}\sum_{i=1}^{n}\sum_{i=1}^{n}w_{ij}(f_i-f_j)^2

=\frac{1}{2}\sum_{i\in A,j\in B}w_{ij}(\frac{1}{vol(A)}+\frac{1}{vol(B)})^2

f^TDf=\sum_{i}d_if_i^2=\sum_{i\in A}\frac{d_i}{vol(A)^2}+\sum_{j\in A}\frac{d_j}{vol(B)^2}

带入,vol(A)=\sum_{i\in A}d_i

f^TDf=\frac{1}{vol(A)}+\frac{1}{vol(B)}

又有  f^TLf=\frac{1}{2}\sum_{i\in A,j\in B}w_{ij}(\frac{1}{vol(A)}+\frac{1}{vol(B)})^2

Ncut(A,B)=cut(A,B)(\frac{1}{vol(A)}+\frac{1}{vol(B)})

所以,Ncut(A,B)=2\frac{f^TLf}{f^TDf}

因此,我们的目标转变为:

min\, \, \frac{f^TLf}{f^TDf}\, \, \, \, s.t.\, \, \, f^TD=0

f^TD=0 从原始无松弛下而来:

f^TD=\sum_{i\in A\cup B}f_id_i=\sum_{i\in A}f_id_i+\sum_{i\in B}f_id_i

=\sum_{i\in A}\frac{1}{vol(A)}d_i+\sum_{i\in B}\frac{-1}{vol(B)}d_i

=\frac{vol(A)}{vol(A)}-\frac{vol(B)}{vol(B)}=1-1=0

我们再看原始问题,求解 min\, \, \frac{f^TLf}{f^TDf}\, \, \, \, s.t.\, \, \, f^TD=0

\frac{f^TLf}{f^TDf} 利用矩阵对矩阵求导可得:

\frac{(L^T+L)f*f^TDf-f^TLf*(D^T+D)f}{(f^TDf)^2}又因为 L,D 为对称矩阵:

\frac{2Lf*f^TDf-2f^TLf*Df}{(f^TDf)^2},令导数=0:

\2Lf*f^TDf-2f^TLf*Df=0

\ Lf*f^TDf=f^TLf*Df

\ Lf=\frac{f^TLf}{f^TDf}Df,等价于向量 L (特殊矩阵)的广义特征多项式。

Lf = \lambda Df

需要求 min\, \, \frac{f^TLf}{f^TDf} ,即求特征值 \lambda 的最小值。

4.5,归一化

设 f 是对应于广义矩阵求解问题的第二小的特征向量,等价于对应于归一化拉普拉斯函数L'=D-1,L=I-D-1W的第二个最小值的特征向量。

标签:机器,样本,距离,学习,算法,聚类,顶点,数据,聚类分析
来源: https://blog.csdn.net/qq_42192693/article/details/121580610