一 什么是聚类?

在无监督学习中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。

聚类试图将数据集中的样本划分为活干个通常是不想交(正交)的子集,每个子集称为一个簇。通过这样的划分每个簇可能对应于一些潜在的类别。这些类别对聚类算法而言事前是未知的。聚类的过程仅能自动形成簇机构,簇所对应的类别语义需由使用者来把握和命名。

聚类既能作为一个独立过程,用于找寻数据内在分布结构,也可作为分类等其他学习任务的前驱过程。例如在一些商业应用中需要对新用户的类型进行判别,但定义“用户类型”对商家来说却可能不太容易,此时往往可先对用户数据进行聚类,根据聚类结果将每个簇定义一个类,然后再基于这些类训练分类模型,用于判别新用户的类型。

二 聚类类型

基于不同的学习策略,人们设计出多种类型的聚类算法。

1 原型聚类

原型聚类亦称基于原型的聚类,此类算法假设聚类结构能通过一组原型刻画。通常情况下,算法先对原型进行初始化,人后对原型进行迭代更新求解,采用不同的原型表示、不同的求解方式,将产生不同的算法。

1.1 k均值算法

这是一个迭代算法,需要根据不同的质心执行多次,直至其收敛。它是一个基于距离的聚类算法。同一个簇中的对象彼此相似,不同簇中的对象彼此相异。

步骤:

(1)将N个对象划分到K个非空子集中。

(2)计算当前分区的簇质心。

(3)将各个对象分配到有最近质心的簇。为各个数据点找到最近的簇

(4)如果不再有新的分配,则停止计算。否则重复(2)(3)知道算法收敛。

这个算法会反复迭代,直到质心不再变化,此时就找到了我们想要的K个簇。由于K-均值算法是一个迭代的过程,每一步都会根据各个现有簇当前中心重新计算簇各个对象成员关系。这个过程会反复进行,直到达到算法收敛。

1.2学习向量量化

与k均值算法类似,“学习向量量化”(Learning Vector Quantization,简称LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。

步骤: 

(1)统计样本的类别,假设一共有q类,初始化为原型向量的标记为{t1,t2,……,tq}。从样本中随机选取q个样本点位原型向量{p1,

p2 ,……, pq}。初始化一个学习率a,a 取值范围(0,1)。 

(2) 从样本集中随机选取一个样本(x, y),计算该样本与q个原型向量的距离(欧几里得距离),找到最小的那个原型向量p,判

样本的标记y与原型向量的标记t是不是一致。若一致则更新为p’ = p + a*(x-p),否则更新为p’ = p - a*(x - p)。 

(3) 重复第2步直到满足停止条件。(如达到最大迭代次数) 

(4) 返回q个原型向量。

1.3 高斯混合聚类

高斯模型即正态分布,高斯混合模型就是几个正态分布的叠加,每一个正态分布代表一个类别,所以和K-means很像,高斯混合

模型也可以用来做无监督的聚类分析。混合高斯模型(Gaussian Mixture Model,简称GMM)是用高斯概率密度函数(正态分

布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。通俗点讲,无论观测

数据集如何分布以及呈现何种规律,都可以通过多个单一高斯模型的混合进行拟合。

高斯混合模型聚类算法EM步骤如下:

(1)猜测有几个类别,既有几个高斯分布。

(2)针对每一个高斯分布,随机给其均值和方差进行赋值。

(3)针对每一个样本,计算其在各个高斯分布下的概率。

机器学习实战--聚类

(4)针对每一个高斯分布,每一个样本对该高斯分布的贡献可以由其下的概率表示,如概率大则表示贡献大,反之亦然。这样把 

样本对该高斯分布的贡献作为权重来计算加权的均值和方差。之后替代其原本的均值和方差。

(5)重复3~4直到每一个高斯分布的均值和方差收敛。


2 密度聚类

密度聚类亦称“基于密度的聚类”,此类算法假设聚类结构能通过样本分布的紧密程度确定,通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连续性,并基于可连续样本不断扩展聚类簇以获得最终的聚类结果。这个算法是数据挖掘技术中被广泛应用的一类算法,其核心思想是用一个点的邻域内邻居点数衡量该点所在空间密度。

DBSCAN是一种著名的j密度聚类算法,它基于一组“邻域”参数来刻画样本分布的紧密程度,给定数量集D={x1,x2,……,xm},定义下面几个概念:

机器学习实战--聚类-邻域:对xj∈D,其机器学习实战--聚类-邻域包含样本集D中与xj的距离不大于机器学习实战--聚类的样本,即Neps(xj)= xi{xi∈D|dist(xi,xj)≤机器学习实战--聚类};通俗解释就是把集合D中的所有样本到xj的距离小于等于机器学习实战--聚类的样本放到集合Neps(xj)里面。

核心对象:若的机器学习实战--聚类-邻域至少包含MinPts个样本,即Neps(xj)≥MinPts,则xj是一个核心对象;通俗解释:如果在邻域内有足够多的样本(大于等于MinPts),xj是一个核心对象,否则就不是。

密度直达:若 xi位于xj机器学习实战--聚类-邻域中,且xj是核心对象,则称由密度直达。通俗解释: xi位于以xj是圆心,机器学习实战--聚类为半径的圆中。

密度可达:对于,如存在样本序列p1,p2,……,pn,其中p1=xi,pn=xj且pi+1由pi密度直达,则称xj由xi密度可达;通俗解释:存在一个密度直达的传递链。

密度相连:对xi与xj,若存在xk使得xi与xj均由xk密度可达,则称与密度相连。

给定圆的半径为机器学习实战--聚类,另MinPts = 3 。

机器学习实战--聚类

从图中可以看出m、p、o、u、v、w和r是核心点。因为他们的邻域内至少包含3个对象。对象q是从m密度直达的。m是从p密度直达的,p也是从m直达的。对象q是从p可达的,p不是从q密度可达的,因为q不是核心;r和s是从o密度可达的,而o是从r密度可达的,因此o、r和s都是密度相连的。

DBSCAN如何发现簇?初始给定数据集D中所有的对象都标记为“unvisited”。DBSCAN随机地选择一个未访问的对象p,标记p为“visited”,并检查p的邻域是否至少包含MinPts个对象。如果不是则p标记为噪音点。否则为p创建一个新的簇C,并且把p的邻域中的所有对象放在候选集合N中。DBSCAN迭代地把N中不属于其它簇的对象添加到C中,在此过程中,对于N中标记为unvisited的对象p′,DBSCAN把它标记为“visited”,并且检查他的邻域。如果 p′的邻域至少有MinPts个对象,则p′的邻域中的对象都被添加到N中。DBSCAN继续添加对象到C,直达C不能再扩展,即知道N为空。此时,簇C完全生成,于是被输出。为了找出下一个簇,DBSCAN从剩下的对象中随机地选择一个未访问的对象。聚类过程继续,知道所有对象都被访问。总之,N为p的邻域对象的集合,C为不属于任何其它簇的成员。

      一般来说,如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多。如果数据集不是稠密的,则不推荐用DBSCAN来聚类。

3 层次聚类

层次聚类试图在不同层次上对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用自底向上的聚合策略,也可采用自顶向下的分拆策略。AGNES是一种采用自底向上聚类策略的层析聚类算法。它先将数据集中的每个样本看做一个初始聚类簇,然后在算法运行的每一步中找出距离最近两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数这里的关键是如何计算聚类簇之间的距离。实际上,每个簇是一个样本集合, 因此,只需采用关于集合的某种距离即可。

      算法的原理很简单,最开始的时候将所有数据点本身作为簇,然后找出距离最近的两个簇将它们合为一个,不断重复以上步骤直到达到预设的簇的个数 。

AGNES算法先对仅含一个样本的初始聚类簇和形影的聚类矩阵进行初始化;然后不断合并距离最近的聚类簇,并合并得到聚类簇的聚类矩阵进行更新上述过程不多重复,知道达到预设的聚类簇数。

机器学习实战--聚类

总结:原型聚类都是给定初始值,然后不断优化;密度聚类再过程中形成簇;层次聚类类似不断合并同类项。

相关文章: