维数灾难的表现
- 在高维空间下,几乎所有的点对之间的距离都差不多相等
考虑一个d维欧式空间,假设在一个单位立方体内随机选择n个点。首先,如果d为1,那么久相当于在一个长度为1的线段上随机放置点,那么将会有两类点连续点(距离很近)和线段两端的点(距离很远),这些点的平均距离是1/3。
证明可以做如下变换,取数轴上的区间[0,h],两点的随机左边为a,b.
则a,b相互独立,都服从[0,h]上的均匀分布,
分布函数为F(x)=0,x<0时,F(x)=x/h,0≤x≤h时,F(x)=1,x>h时.
两点距离X=|a-b|=max(a,b)-min(a,b)
EX=Emax(a,b)-Emin(a,b).
max(a,b)的分布函数G(x)=[F(x)]^2,由此可求出Emax(a,b)=2h/3.
min(a,b)的分布函数H(x)=1-[1-F(x)]^2,由此可求出Emin(a,b)=h/3.
EX=h/3.
如果d非常大,那么根据欧式距离的公式,每个xi和xj都是0到1之间均匀选出的随机变量,所以两个向量之间的最大距离为sqrt(d),而且,几乎所有的距离都接近平均距离。
- 几乎任意两个向量之间都是近似正交的
正交是根据向量之间的夹角来衡量的。假设在一个维数非常大的d维空间有三个点A,B,C,如果B处于原点,那么我们可以根据欧式空间的余弦公式计算。当d不断增长时,分母会随d线性增长,但是分子是随机值之和,有正有负,所有,分子的期望为0 。
BFR算法
它是k-均值算法的一个变形,其设计目的是为了在高维欧式空间中对数据聚类。它首先随机选择初始k个点,然后,数据文件中的点按组块方式读入。
假设约束:簇的形状必须以满足以质心为期望的正态分布。 簇的坐标必须和空间的坐标一致。
组块中点的处理方法
首先,将所有充分接近某个簇质心的点加入该簇。那么高维空间的簇质心如何表示呢?该算法采用一种叫做N-SUM-SUMSQ的表示方法,该算法使得可以很简单的将新点的信息加入。
N-SUM-SUMSQ
其中,内存中存放的是每个组块足够少的点和表示K个簇的概要和其他信息,具体如下图:
那么内存中存的就是留存集中的点和废弃集和压缩集的概要信息,那么概要信息就是用N-SUM-SUMSQ来表示,具体如下:
- N:所表示的点的个数
- SUM:所有点在每一维的分量之和
- SUMSQ:所有点在每一维的分量平方和
并做如下定义:
- 质心的第i维坐标:SUMi/N
- 第i维上的方差: SUMSQi/N - (SUMi/N)^2
这种表示法会使得加入点,合并簇十分简单
- 对于那些并不充分接近任意簇质心的点,我们将它们同留存集中的带你一起进行聚类,这时可以使用任意基于内存的聚类算法。
- 对尝试对新的点聚类得到的小簇和留存集进行合并。
- 如果是输入的最后一个组块,对压缩集和留存集进行操作,可以合并也可以分配给最近的簇。
重要决策
如何确定某个新点p离k个簇中的一个足够近,这样将p加入才有意义
- 方法一:将p加入某个簇,该簇不仅离p最近,而且不会在之后进行变化,也就是说一个点p加入一个簇,p始终离该簇的质心是最近的。
- 方法二 如果p属于某个簇,那么我们可以计算它到该簇质心的概率。
依据的事实:
1. 每个簇都由正态分布的点构成
2. 点的坐标是与空间的坐标一致的
这样一来,就允许我们通过马氏距离来计算。马氏距离本质上是点到质心的距离,并在每一维通过簇的标准差进行归一化。
参考书籍:《Mining of Massive Datasets》