机器学习 Kmeans聚类算法

功能及可应用领域#

聚类分析将大量数据划分为性质相同的子类,便于了解数据的分布情况。因此,它广泛
应用于模式识别、图像处理、数据压缩等许多领域,例如:

  • 在市场分析中,通过聚类分析能帮助决策者识别不同特征的客户群,以及各客户群的
    行为特征;
  • 在生物工程研究中,聚类分析能够用于推导动植物的分类,按照功能对基因进行划分
    并获取种群中的固有结构特征;
  • 在非关系数据库领域(如空间数据库领域),聚类分析能够识别具有相同地理特征的区
    域以及该区域的环境和人的特征;
  • w e b web web信息检索领域,聚类分析能够对web文档进行分类,提高检索效率。

等等,这里就不一一列举了。

#输入数据及要求#
在进行 K m e a n s Kmeans Kmeans聚类时,必须对数据进行预处理。

  • 注意数据属性在向量空间的规范化。
  • 缺失属性值的处理:直接删除。
  • 对噪声的处理:在训练的过程中对噪声的元组直接删除掉。
  • 聚类变量值不应有数量级上的差异。
  • 对分类型变量的处理。由于 K m e a n s Kmeans Kmeans聚类算法的距离计算是基于数值的,为符合计
    算要求需要对分类型聚类变量进行预处理。(下文我们有专门的章节来介绍分类型变量的处
    理)

#算法原理#
K m e a n s Kmeans Kmeans聚类也称快速聚类,属于覆盖型数值划分聚类算法。它得到的聚类结果,每
个样本点都唯一属于一个类,而且聚类变量为数值型,并采用划分原理进行聚类。

K m e a n s Kmeans Kmeans 聚类涉及两个主要方面的问题:

  • 如何测度样本的“亲疏程度”;
  • 如何进行聚类。

下面将重点讨论这些问题。

K m e a n s Kmeans Kmeans对“亲疏程度”的测度##

通常,“亲疏程度”的测度一般都有两个角度:第一,数据间的相似程度;第二,数据
间的差异程度。衡量相似程度一般可采用简单相关系数或等级相关系数等,差异程度则一般
通过某种距离来测度。 K m e a n s Kmeans Kmeans聚类方法采用的是第二个测度角度。

为有效测度数据之间的差异程度, K m e a n s Kmeans Kmeans聚类算法将所收集到具有 p p p个变量的样本
数据,看成 p p p维空间上的点,并以此定义某种距离。通常,点与点之间的距离越小,意味
着它们越“亲密”,差异程度越小,越有可能聚成一类;相反,点与点之间的距离越大,意
味着它们越“疏远”,差异程度越大,越有可能分属不同的类。

由于$Kmeans $聚类方法所处理的聚类变量均为数值型,因此,它将点与点之间的距离
定义为欧氏距离( E u c l i d e a n d i s t a n c e Euclidean distance Euclideandistance),即数据点$x 与 与 y 间 的 欧 氏 距 离 是 两 个 点 的 间的欧氏距离是两个点的 p$个变量
之差的平方和的算术平方根,数学定义为
E u c l i d ( x , y ) = ∑ i = 1 p ( x i − y i ) p . Euclid(x,y)=\sqrt{\sum_{i=1}^{p}(x_{i}-y_{i})^p}. Euclid(x,y)=i=1p(xiyi)p .
除此之外,常用的距离还包括平方欧氏距离( S q u a r e d E u c l i d e a n d i s t a n c e Squared Euclidean distance SquaredEuclideandistance)、切比雪
夫( C h e b y c h e v Chebychev Chebychev)距离、 B l o c k Block Block距离、明考斯基( M i n k o w s k i Minkowski Minkowski)距离等。这里我们就不做
介绍了。

##改进后的“亲疏程度”的测度##

由于 K m e a n s Kmeans Kmeans聚类算法采用欧氏距离来表示样本间的“亲疏程度”,而欧式距离在计算
距离时采用的是循环的思想对样本的各个分量计算距离,因此在解决大数据集的聚类问题方
面存在效率低,占用内存大的缺陷。由于计算机的内存有限,无法存储超过内存容量的大数
据集。因此,尽管 K m e a n s Kmeans Kmeans聚类算法在理论上无懈可击,但却无法通过计算机实现。为此,
我们提出了一种巧妙的数据存储方案,即 C F CF CF树( C l u s t e r i n g F e a t u r e T r e e Clustering Feature Tree ClusteringFeatureTree)。

C F CF CF树是一种数据的压缩存储方式。树中每个节点只存储聚类过程计算距离所必须的汇
总统计量。

K m e a n s Kmeans Kmeans聚类算法中,关于树节点 i i i,即第 i i i类的汇总统计量包括 C F i = { N i , L S i → , S S i 2 } CF_{i}=\left \{N_{i},\overrightarrow{LS_{i}},SS_{i}^2 \right\} CFi={Ni,LSi ,SSi2},依次为节点所包含的样本量,数值型变量值的向量和,数值型变量值的平方和。可见,节点并没有存储原始数据本身,因而大大减少了存储的数据量,使得大数据集聚类具有实现的可能。

下面我们来推导用 C F CF CF树来存储的数据集的欧氏距离( E u c l i d e a n d i s t a n c e Euclidean distance Euclideandistance)。

对于任意两个 C F CF CF树,树一: { X i → ∣ X 1 → , X 2 → , . . . , X N 1 → } \left \{\overrightarrow{X_{i}} | \overrightarrow{X_{1}} , \overrightarrow{X_{2}} , ..., \overrightarrow{X_{N_{1}} } \right \} {Xi X1 ,X2 ,...,XN1 };树二: { Y i → ∣ Y 1 → , Y 2 → , . . . , Y N 1 → } \left \{\overrightarrow{Y_{i}} | \overrightarrow{Y_{1}} , \overrightarrow{Y_{2}} , ..., \overrightarrow{Y_{N_{1}} } \right \} {Yi Y1 ,Y2 ,...,YN1 },则两个树之间的距离:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ D &= \sqrt{\df…

下面我们定义 C F CF CF树的存储结构:
C F = { N , ∑ i = 1 N X i → , ∑ i = 1 N X i → 2 } = { N , L S → , S S } , CF=\left\{N, \sum_{i=1}^{N}\overrightarrow{X_{i}}, \sum_{i=1}^{N}\overrightarrow{X_{i}}^2 \right\}=\left\{N, \overrightarrow{LS}, SS \right\}, CF={N,i=1NXi ,i=1NXi 2}={N,LS ,SS},
其中 N N N代表存储的样本个数, L S → \overrightarrow{LS} LS 代表数值型变量值的向量和, S S SS SS代表数值型变量值的平
方和。

假设现在有两个 C F CF CF树:
C F 1 = { N 1 , X 1 → + X 2 → + . . . + X N 1 → , X 1 → 2 + X 2 → 2 + . . . + X N 1 → 2 } = { N 1 , L S 1 → , S S 1 } CF_{1}=\left\{N_{1}, \overrightarrow{X_{1}}+\overrightarrow{X_{2}}+...+\overrightarrow{X_{N_{1}}}, \overrightarrow{X_{1}}^2+\overrightarrow{X_{2}}^2+...+\overrightarrow{X_{N_{1}}}^2 \right\}=\left\{N_{1}, \overrightarrow{LS_{1}}, SS_{1} \right\} CF1={N1,X1 +X2 +...+XN1 ,X1 2+X2 2+...+XN1 2}={N1,LS1 ,SS1}

C F 2 = { N 2 , Y 1 → + Y 2 → + . . . + Y N 2 → , Y 1 → 2 + Y 2 → 2 + . . . + Y N 2 → 2 } = { N 2 , L S 2 → , S S 2 } CF_{2}=\left\{N_{2}, \overrightarrow{Y_{1}}+\overrightarrow{Y_{2}}+...+\overrightarrow{Y_{N_{2}}}, \overrightarrow{Y_{1}}^2+\overrightarrow{Y_{2}}^2+...+\overrightarrow{Y_{N_{2}}}^2 \right\}=\left\{N_{2}, \overrightarrow{LS_{2}}, SS_{2} \right\} CF2={N2,Y1 +Y2 +...+YN2 ,Y1 2+Y2 2+...+YN2 2}={N2,LS2 ,SS2}
根据上面的推导,我们可以得到两个树间的距离:
D = S S 1 N 1 + S S 2 N 2 − 2 L S 1 → ⋅ L S 2 → N 1 ⋅ N 2 D = \sqrt {\frac{{S{S_1}}}{{{N_1}}} + \frac{{S{S_2}}}{{{N_2}}} - \frac{{2\overrightarrow {L{S_1}} \cdot \overrightarrow {L{S_2}} }}{{{N_1} \cdot {N_2}}}} D=N1SS1+N2SS2N1N22LS1 LS2

每个树的中心为:
X 0 → = ∑ i = 1 N X i → N = L S → N \overrightarrow {{X_0}} = \frac{{\sum\limits_{i = 1}^N {\overrightarrow {{X_i}} } }}{N} = \frac{{\overrightarrow {LS} }}{N} X0 =Ni=1NXi =NLS
如果求两个点的欧氏距离,我们可以这样构造 C F CF CF树,$C{F_1} = { 1,\overrightarrow {{X_1}} ,{\overrightarrow {{X_1}} ^2}} = { 1,\overrightarrow {L{S_1}} ,S{S_1}} , , C{F_2} = { 1,\overrightarrow {{X_2}} ,{\overrightarrow {{X_2}} ^2}} = { 1,\overrightarrow {L{S_2}} ,S{S_2}} $,则
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲Euclid(x,y) &= …
这样,我们就可以只通过 C F CF CF树中的三个特征来求解两点之间的欧氏距离,这大大的减少了存储的数据量。

## K M e a n s KMeans KMeans聚类过程##
在上述距离的定义下, K M e a n s KMeans KMeans聚类算法采用“划分”方式实现聚类。

所谓划分是指,首先将样本空间随意划分为若干个区域(类),然后依据上述定义的距离,将所有样本点分配到与之“亲近”的区域(类)中,形成初始的聚类结果。良好的聚类应使类内部的样本结构相似,类间的样本结构差异显著,而由于初始聚类结果是在空间随意划分的基础上产生的,因而无法确保所给出的聚类满足上述要求,所以多次反复是必须的。
在这样的设计思路下, K M e a n s KMeans KMeans聚类算法的具体过程如下。

  • 第一步,指定聚类数目 K K K
    K M e a n s KMeans KMeans聚类算法中,应首先给出需聚成多少类。聚类数目的确定本身并不简单,既要考虑最终的聚类效果,也要根据研究问题的实际需要。聚类数目太大或太小都将失去聚类的意义。
  • 第二步,确定 K K K个初始类中心。
    类中心是各类特征的典型代表。指定聚类数目 K K K后,还应指定 K K K个类的初始类中心点。初始类中心点指定的合理性,将直接影响聚类收敛的速度。常用的初始类中心点的指定方法有:
    经验选择法:即根据以往经验大致了解样本应聚成几类以及如何聚类,只需要选择每个类中具有代表性的点作为初始类中心即可。
    随机选择法:即随机指定若干样本点作为初始类中心;
    最小最大法:即先选择所有样本点中相距最远的两个点作为初始类中心,然后选择第三个样本点,它与已确定的类中心的距离是其余点中最大的。然后按照同样的原则选择其他的类中心点。
  • 第三步,根据最近原则进行聚类。
    依次计算每个数据点到 K K K个类中心点的欧氏距离,并按照距 K K K个类中心点距离最近的原则,将所有样本分派到最近的类中,形成 K K K个类。
  • 第四步,重新确定 K K K个类中心。
    重新计算 K K K个类的中心点。中心点的确定原则是:依次计算各类中所有数据点变量的均值,并以均值点作为 K K K个类的中心点。
  • 第五步,判断是否已经满足终止聚类的条件,如果没有满足则返回到第三步,不断反复上述过程,直到满足迭代终止条件。

聚类终止的条件通常有两个。第一,迭代次数。当前的迭代次数等于指定的迭代次数时终止聚类;第二,类中心点偏移程度。新确定的类中心点距上次类中心点的最大偏移量小于指定值时终止聚类。通过适当增加迭代次数或合理调整中心点偏移量的判定标准,能够有效克服初始类中心点指定时可能存在的偏差。上述两个条件中任意一个满足,则结束聚类。

可见, K M e a n s KMeans KMeans聚类是一个反复迭代过程。在聚类过程中,样本所属的类会不断调整,直到最终达到稳定为止。

下图直观反映了 K M e a n s KMeans KMeans 聚类的过程。
机器学习 Kmeans聚类算法_第1张图片

首先指定聚类中心,图中空心圆为类中心。可以看到,迭代过程中图中最下面的一个点的所属类发生了变化,其原因是类中心进行了调整。

由于距离是 K M e a n s KMeans KMeans 聚类的基础,它将直接影响最终的聚类结果。因此,通常在分析之前应剔除影响距离正确计算的因素。

第一、聚类变量值不应有数量级上的差异。聚类分析是以距离度量“亲疏”程度的,数量级将对距离计算产生较大影响。例如,下表是某银行三个贷款客户的数据。

客户代码 年收入(百元) 贷款(元) 还款月份
1 410 4380000 19
2 336 1730000 21
3 490 220000 8

直接计算两两样本点之间的欧氏距离和将贷款金额的计量单位转换成十万元后的欧氏距离,结果如下表所示。

组合 十万元
(1, 2) 265000 47.07
(1, 3) 416000 80.86
(2, 3) 151000 154.56

由上表可知:当贷款以元为计量单位时,样本2和样本3的距离最小,其次是样本1和2,样本1和3的距离最远;当以十万元为计量单位时,样本1和2的距离最近,其次是样本1和3,样本2和样本3的距离最远。可见,数量级对距离产生了巨大影响,也直接影响了距离结果。

为解决该问题,聚类分析之前通常应首先消除变量的数量级差异,一般可通过标准化处理实现。

第二,对分类型变量的处理。由于 K M e a n s KMeans KMeans算法的距离计算是基于数值的,为符合计算要求需要对分类型聚类变量进行预处理。

对于具有 k k k个类别的多分类型变量,采用 k k k个取值为0或1的数值型变量(哑变量)共同来表示。例如,变量 x x x A , B , C A,B,C A,B,C 三个类别,则采用 x 1 , x 2 , x 3 x_{1}, x_{2}, x_{3} x1,x2,x3 三个变量共同表示。如果 x x x A A A,则 x 1 , x 2 , x 3 x_{1}, x_{2}, x_{3} x1,x2,x3分别为 1 , 0 , 1 1, 0, 1 1,0,1;如果 x x x B B B ,则 x 1 , x 2 , x 3 x_{1}, x_{2}, x_{3} x1,x2,x3分别为 0 , 1 , 0 0, 1, 0 0,1,0;如果 x x x C C C,则 x 1 , x 2 , x 3 x_{1}, x_{2}, x_{3} x1,x2,x3分别为 0 , 0 , 1 0, 0, 1 0,0,1。于是,原来具有 k k k个类别的一个聚类变量派生出取0或1的 k k k个变量。

由此引发的另外一个问题是,分类型变量在欧氏距离计算中的“贡献”将大于其他数值型变量。

例如,计算样本点 x x x与样本点 y y y的欧氏距离时,如果样本点 x x x在一个 3 3 3分类型变量上取 A A A,样本点 y y y B B B,则该分类型变量在欧氏距离中的“贡献”为: ( 1 − 0 ) 2 + ( 0 − 1 ) 2 + ( 0 − 0 ) 2 = 2 {(1 - 0)^2} + {(0 - 1)^2} + {(0 - 0)^2} = 2 (10)2+(01)2+(00)2=2,大于1 。而数值型变量由于取值在0至1之间,贡献不可能大于1。这就意味着分类型变量的权重要高于数值型变量,显然是有问题的。

为此,解决的策略是:将1调整为 0.5 \sqrt{0.5} 0.5 ,即 ( 0.5 − 0 ) 2 + ( 0 − 0.5 ) 2 + ( 0 − 0 ) 2 = 1 {(\sqrt{0.5} - 0)^2} + {(0 - \sqrt{0.5})^2} + {(0 - 0)^2} = 1 (0.5 0)2+(00.5 )2+(00)2=1,以保证分类型变量在欧氏距离中的“贡献”不大于1。

对于二分类型变量,用取值为0或1的一个数值型变量替代。

#算法流程#

Created with Raphaël 2.2.0 准备数据 检查数据 确定聚类数目K 确定初始聚类中心 根据最近原则进行聚类 重新确定K个类中心 类中心是否收敛? 作为最终的聚类中心 聚类 结束 迭代次数达到上限? yes no yes no yes no

你可能感兴趣的:(机器学习)