《大数据》第七章 聚类 K-means算法 BFR算法 CURE算法

1.欧氏空间与非欧空间

在了解聚类之前我认为需要先了解欧氏空间与非欧空间的概念,因为在聚类的算法中会根据欧或者非欧有不同的解决方案。
 

1.1欧氏空间

引用看过的一篇文章中的一句话总结:欧几里得空间就是在对现实空间的规则抽象和推广(从n<=3推广到有限n维空间)。
欧氏空间也称为欧几里得空间,是带有“内积”的实数域上的一类向量空间。引入内积的目的是能够计算两点间的距离和夹角。向量空间中的向量对应于欧几里得平面中的点,在向量空间中的加法运算对应于欧几里得空间中的平移。

欧氏空间的定义:
​设V是数域P上的线性空间,定义一个代数运算(V×V->P),记为 (ɑ,ß) 。如果(ɑ,ß)满足下列条件:

​1) 对称性:(ɑ,ß) = (ß,ɑ);
​2) 可加性:(ɑ+ß,γ) = (ɑ,γ) + (ß,γ);
3) 齐次性:(kɑ,ß) = k(ɑ,ß);
​4) 非负性:(ɑ,ɑ)≥0,当且仅当ɑ=0时(ɑ,ɑ)=0,

​其中k是数域P中的任意数,ɑ、ß、γ是V中的任意元素,则称(ɑ,ß)为ɑ与ß的内积,定义了内积的线性空间V称为内积空间,称实数域R上的内积空间V为Euclid空间(欧式空间)。
 

1.2非欧氏空间

因为本人还没有系统接触过关于相关知识的系统学习,仅仅是查阅了部分资料,因此在此简述以下李永乐老师讲的内容:罗巴切夫斯基几何+黎曼几何=非欧几何。
罗氏几何与欧式几何的区别在于:过一点可以有多条直线与已知直线平行。
黎曼几何与欧式几何的区别在于:过一点找不到一条直线与已知直线平行,比如在球面上研究几何问题时。
 
 

2.聚类:

2.1定义:

聚类是对点集进行考察并按照某种距离测度(对于欧式几何使用欧式距离)将它们聚成多个簇的过程。
 

2.2距离测度:

距离的测度就是量化距离的一种方法:
(1)欧式空间的距离测度:最常见的欧氏距离: d ( x , μ ) = ∑ i = 1 n ( x i − μ i ) 2 d(x,\mu)=\sqrt{\sum_{i=1}^{n}(x_{i}-\mu_{i})^2} d(x,μ)=i=1n(xiμi)2 ,还有曼哈顿距离(每个维度上差值之和), L ∞ L_{\infty } L距离(所有维度上差值的最大值)。
(2)非欧空间的距离测度:Jaccard距离,余弦距离,海明距离,编辑距离。
 

2.3聚类策略:

(1)层次聚类:
这类算法一开始将每个点都看成一个簇。簇与簇之间按照接近度来组合,这种接近度可以基于“接近"的不同含义采用不同的定义。当进一步的组合导致多个原因之一下的非期望结果时,上述组合过程结束。例如,当达到预先给定的簇数目时可以停止聚类,或者我们可以使用簇的紧密度测度方法,一旦两个小簇组合后得到的簇内的点分散的区域较大就停止簇的构建。
(2)点分配
即按照某个顺序依次考虑每个点,并将它分配到最适合的簇中。该过程通常都有一个短暂的初始簇估计阶段。一些变形算法允许临时的簇合并或分裂过程,或者当点为离群点(离当前任何簇的距离都很远的点)时允许不将该点分配到任何簇中。
 

2.4维数灾难:

所谓维数灾难,在高维空间下,几乎所有的点对之间的距离都差不多相等。另一个表现是,几乎任意的两个向量之间都是近似正交的。当然在非欧空间下也有很多类似的反常情况,这里先不做过多的讨论。
(1)高维空间下的距离分布:
考虑一个d维欧氏空间(假设d较大),同时假设在一个单位立方体内随机选择n个点,根据欧氏距离: d ( x , μ ) = ∑ i = 1 n ( x i − μ i ) 2 d(x,\mu)=\sqrt{\sum_{i=1}^{n}(x_{i}-\mu_{i})^2} d(x,μ)=i=1n(xiμi)2 ,当d较大的时候 a b s ( x i − μ i ) abs(x_{i}-\mu_{i}) abs(xiμi)将接近于1。这样,几乎任意两个随机点的距离的下界为1 。实际上,通过更细致的论证可以给出除了极少点对之外的绝大部分点对之间的距离的更强下界。然而,两个点之间的最大距离为 d \sqrt d d ,可以认为除了极少点对之外的绝大部分点对之间的距离都不会接近该上限。实际上,几乎所有点之间的距离都接近于平均距离。此时因为距离的平均分布,将很难对于每个点进行簇的分配。
(2)向量之间的夹角:
当d不断增长时,分母会随d线性增长,但是分子是随机值之和,有可能为正或负。因此,分子的期望值为0 。当d增长时,分子的标准差只会增长为 d \sqrt d d 。因此,对于很大的d来说 ,任意两个向量的夹角余弦值几乎肯定接近于0, 也即意味着夹角近似为90度。
 
 

3.层次聚类:

3.1欧氏空间下的层次聚类:

首先明确任意层次聚类算法的工作流程:将每个点自己单独看成一个簇,随着时间的推移,算法会通过合并两个小簇而形成一个大簇。
接着对于层次聚类算法,我们必须提前明确几个问题,解决了这几个问题也就基本完成了欧氏空间下的层次聚类:
(1) 簇如何表示?
假定算法运行在欧氏空间下。此时可以允许通过簇质心或者簇内平均点来表示一个簇。
(2) 如何选择哪两个簇进行合并?
簇之间距离定义为其质心之间的欧氏距离,此时可以选择具有最短距离的两个簇进行合并。
(3) 簇合并何时结束?
针对簇合并结束的时机,我们可以有多种方案:
 1.我们已经实现知道了簇的数目。
 2.在某次合并过后,如果会出现在现有簇的最佳合并之上会产生一个不恰当的簇的时候停止合并。例如,我们跟踪所有当前簇的平均直径。只要对簇中的点进行合并时,该平均直径就会不断增加。然而,如果我们合并两个确实不应该合并的簇时,平均的直径会突然大幅度增加。
 3.聚类到仅剩一个簇的时候停止。
 4.当最佳合并得到的簇的直径超过某个阙值时停止聚类。
 5.当最佳合并得到的簇的密度低于某个阈值时停止聚类。
 

3.2簇的概念的拓展:

前文提到的层次聚类中的簇合并,针对具有最小质心距离的簇进行合并,当然簇的距离不仅仅只有一种定义方法。
(1) 定义两个簇的距离为两个簇中所有点之间的最短距离,其中计算距离的两个点分别来自不同的簇。
(2) 定义两个簇的距离为两个簇中所有点对之间的距离的平均值,其中计算距离的两个点分别来自不同的簇。
(3) 簇的半径是指簇内所有点到质心的最大距离。我们可以将结果簇具有最小半径的两个簇进行合并。
(4) 簇的直径是指簇内任意两个点之间的最大距离。需要注意的是,和圆上面定义的半径、直径并不一样,这里定义的簇的半径和直径之间没有任何直接的关系。
(5)簇的密度可以有多种不同定义方式,一般而言,我们可以理解为簇的单位体积中的点的数目。
 

3.3非欧氏空间下的层次聚类:

当在非欧空间下必须对簇进行表示时会遇到问题,因为此时点集没有质心的概念,这是因为无法通过质心来代替点集。同时我们必须要使用一些基于点进行计算的距离测度,如Jaccard距离、余弦距离或编辑距离等。也就是说,我们无法基于点的位置进行距离计算。
在非欧空间下,当无法合并簇中的点时,我们仅有的选择是从簇中选择一个点来代表簇。选择簇中心点的方法有很多,但是每种方法的目的都设计为最小化中心点到簇内其他点之间的距离。有几种常用的选择中心点的方法,它们分别使得选出点的如下数值最小:
(1) 该点到簇中其他所有点的距离之和(求和)。
(2) 该点到簇中另外一点的最大距离(最大值)。
(3) 该点到簇中其他所有点的距离平方和(平方和)。
除此之外,从欧氏空间到非欧空间,簇合并的原则本质上没有改变,因此与欧氏空间同理即可。
 
 

4.点分配聚类:

4.1K-means算法:

K-means是假定在欧式空间下,一个迭代的,无监督的聚类算法,将类似的实例组合成簇。在《大数据》教材中,K-means被定义为点分配聚类算法与层次聚类算法相区别, 该算法通过猜测每个簇的初始聚类中心开始,然后重复将实例分配给最近的簇,并重新计算该簇的聚类中心。
定义K-means的算法步骤:
(1)选择初始化的 k 个样本作为初始聚类中心 。
(2)针对数据集中每个样本计算它到 k 个聚类中心的距离并将其分到距离最小的聚类中心所对应的类中。
(3)针对每个类别 ,重新计算它的聚类中心 (即属于该类的所有样本的质心)。
重复上面 (2)(3)两步操作,直到达到某个中止条件(迭代次数、最小误差变化等)。
 

4.2BFR算法:

BFR算法目的是解决高位欧氏空间下对数据进行聚类的问题,BFR算法簇必须满足以质心为期望的正态分布。一个簇的在不同维度的均值和标准差可能不同,但是维度之间必须相互独立。例如,在二维空间下簇可以是雪茄状分布,但是雪茄绝不能偏离坐标轴。
BFR 用 K-means 算法来初始化 k 个点,数据文件中的点以组块的方式读入。除了组块还包括其他三种对象
(1)废弃集:该集合由簇本身的简单概要信息组成。概要所代表的点被废弃,它们在内存中除了通过该概要之外已经没有其他表示信息。
(2)压缩集:压缩集中只存放那些相互接近的点集的概要,但是这些点没有质心,所以不算做是簇,因为不是簇,所以只是点集的概要而不是簇的概要。(也称为迷你簇)
(3)留存集:一些孤立的点,既不能被分配给某个簇,也不会和其他点足够接近而被放到压缩集中,这些点会显示的存在。
在这里插入图片描述
压缩集与废弃集的存放方式:假设维度为d,则存储需要2d+1个值
(1) 所表示的点数N。
(2) 所有点在每一维的分量之和。该数据是一个长度为d的向量SUM ,其第i维的分量为SUM(i)。
(3) 所有点在每一维的分量平方和。该数据是一个长度为d的向量SUMSQ, 其第i维的分量为SUMSQ(i) 。
这是一种非常巧妙的安排,基于上述2d+1个值可以存储表示一系列点的数目、质心和每一维的标准差。
点的数目:N
质心的第i维坐标:SUM(i)/N
第i维的方差:SUMSQ(i) /N - (SUM(i)/N)^2的算数平方根
这种表示法的优点在于:当N较大时,点集合的表示就与点的数量无关而是仅仅与维度有关,大大减少了在大量点的情况下表示点集困难的问题。且降低了点集在线添加新点的维护难度。

BFR的算法步骤:

(1)首先,充分接近某个簇质心的点会被加到该簇中;(更新废弃集)
(2)对于那些并不充分接近任意簇质心的点,将它们与留存集中的点一起聚类,通常采用基于内存的聚类算法,多于一个点的簇会被概括表示并加入到压缩集(迷你簇),剩余的单点簇则表示为点的留存集;
(3)压缩集迷你簇和新的迷你簇(迷你簇含有互相接近,但是不接近于任何簇的点)之间可以进行合并;
(4)不在留存集中的点,会和分配结果一起写到二级存储上;
(5)如果输入是数据的最后一个组块,完成后必须对压缩集和存留集进一步处理,可以将其看作离群点,可以将留存集每个点分配给质心离它最近的那个簇,也可以将每个迷你簇与那个质心离它最近的簇合并。
 

4.3CURE算法:

CURE算法同样要求在欧氏空间下,但是对于簇的形状无要求,也不用保证正态分布。CURE算法使用一些代表点的集合来表示簇而不再是质心。下图是CURE算法的图示:
在这里插入图片描述

CURE算法的过程:
(1)将簇之间的距离定义为两个簇中点之间的最短距离(计算两个点的距离时,每个点分别来自不同的簇),那么我们将正确地找到这两个簇(内环与外环)。
(2)选择每个簇中的代表点。如果构建簇的样本足够大,那么可以从簇中选择那些边界上的相互之间距离最大的点作为代表点。
(3)将代表点从真正的位置向质心方向移动这个距离的一个固定比例。
(4)此时,圆上的代表点按计划移到圆内,而外环中的外边界上的点会移到环内,而其内边界上的点会移出环外。
在这里插入图片描述

(5)最后一步是,当两个簇的某对代表点(每个点分别来自不同的簇)之间足够接近,那么就将这两个簇进行合并。用户可以就定义”接近"的距离进行选择。该合并过程可以重复,直到没有更足够接近的簇为止。
所以CURE算法的核心就是通过前面对每个簇生成代表点后,整个点集可以从磁盘读出并分配给一个簇。我们将给定点分配给与它最近的代表点所在的簇。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值