数据挖掘十大算法--K-均值聚类算法

一、相异度计算 

在正式讨论聚类前,我们要先弄清楚一个问题:怎样定量计算两个可比較元素间的相异度。用通俗的话说。相异度就是两个东西区别有多大。比如人类与章鱼的相异度明显大于人类与黑猩猩的相异度,这是能我们直观感受到的。

可是,计算机没有这样的直观感受能力,我们必须对相异度在数学上进行定量定义。
      设 ,当中X。Y是两个元素项,各自具有n个可度量特征属性,那么X和Y的相异度定义为:

 ,当中R为实数域。

也就是说相异度是两个元素对实数域的一个映射。所映射的实数定量表示两个元素的相异度。
      以下介绍不同类型变量相异度计算方法。


1、标量

(1)标量也就是无方向意义的数字,也叫标度变量。如今先考虑元素的全部特征属性都是标量的情况。比如,计算X={2,1,102}Y={1,3,2}的相异度。

一种非常自然的想法是用两者的欧几里得距离来作为相异度,欧几里得距离的定义例如以下:

扫描二维码关注公众号,回复: 5451688 查看本文章

其意义就是两个元素在欧氏空间中的集合距离,由于其直观易懂且可解释性强。被广泛用于标识两个标量元素的相异度。将上面两个演示样例数据代入公式。可得两者的欧氏距离为:


(2)除欧氏距离外。经常使用作度量标量相异度的还有曼哈顿距离和闵可夫斯基距离。两者定义例如以下:

      曼哈顿距离


(3) 闵可夫斯基距离


(4)皮尔逊系数(Pearson Correlation Coefficient)

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商.


(当中,E为数学期望或均值,D为方差,D开根号为标准差,E{ [X-ux] [Y-uy]}称为随机变量X与Y的协方差。记为Cov(X,Y)。即Cov(X,Y) = E{ [X-ux] [Y-ux},而两个变量之间的协方差和标准差的商则称为随机变量X与Y的相关系数。记为)


欧氏距离和曼哈顿距离能够看做是闵可夫斯基距离在p=2p=1下的特例。另外这三种距离都能够加权,这个非常easy理解。

     以下要说一下标量的规格化问题。上面这样计算相异度的方式有一点问题,就是取值范围大的属性对距离的影响高于取值范围小的属性

比如上述样例中第三个属性的取值跨度远大于前两个,这样不利于真实反映真实的相异度。为了解决问题,一般要对属性值进行规格化。

所谓规格化就是将各个属性值按比例映射到同样的取值区间。这样是为了平衡各个属性对距离的影响。通常将各个属性均映射到[0,1]区间,映射公式为:


当中max(ai)min(ai)表示全部元素项中第i个属性的最大值和最小值。比如。将演示样例中的元素规格化到[0,1]区间后,就变成了X’={1,0,1}Y’={0,1,0},又一次计算欧氏距离约为1.732


2、二元变量

所谓二元变量是仅仅能取01两种值变量,有点类似布尔值,通经常使用来标识是或不是这样的二值属性。

对于二元变量。上一节提到的距离不能非常好标识其相异度。我们须要一种更适合的标识。

一种经常使用的方法是用元素同样序位同值属性的比例来标识其相异度。

     设有X={1,0,0,0,1,0,1,1}Y={0,0,0,1,1,1,1,1},能够看到,两个元素第23578个属性取值同样,而第146个取值不同,那么相异度能够标识为3/8=0.375。一般的,对于二元变量。相异度可用取值不同的同位属性数/单个元素的属性位数标识。

     上面所说的相异度应该叫做对称二元相异度。

现实中另一种情况,就是我们仅仅关心两者都取1的情况。而觉得两者都取0的属性并不意味着两者更类似。比如在依据病情对病人聚类时,假设两个人都患有肺癌,我们觉得两个人增强了类似度,但假设两个人都没患肺癌,并不觉得这加强了两人的类似性,在这样的情况下,改用取值不同的同位属性数/(单个元素的属性位数-同取0的位数)来标识相异度。这叫做非对称二元相异度。

假设用1减去非对称二元相异度。则得到非对称二元类似度,也叫Jaccard系数,是一个非常重要的概念。

3、分类变量

分类变量是二元变量的推广。类似于程序中的枚举变量。但各个值没有数字或序数意义。如颜色、民族等等,对于分类变量。用取值不同的同位属性数/单个元素的全部属性数来标识其相异度。


4、序数变量

序数变量是具有序数意义的分类变量,通常能够依照一定顺序意义排列,如冠军、亚军和季军。对于序数变量,一般为每一个值分配一个数。叫做这个值的秩,然后以秩取代原值当做标量属性计算相异度。

5、向量

对于向量。由于它不仅有大小并且有方向。所以闵可夫斯基距离不是度量其相异度的好办法。一种流行的做法是用两个向量的余弦度量。其度量公式为:

     

     当中||X||表示X的欧几里得范数。要注意,余弦度量度量的不是两者的相异度。而是类似度!


二、聚类问题

 所谓聚类问题。就是给定一个元素集合D,当中每一个元素具有n个可观察属性。使用某种算法将D划分成k个子集,要求每一个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高。当中每一个子集叫做一个簇。
      与分类不同。分类是演示样例式学习,要求分类前明白各个类别,并断言每一个元素映射到一个类别,而聚类是观察式学习,在聚类前能够不知道类别甚至不给定类别数量。是无监督学习的一种。

眼下聚类广泛应用于统计学、生物学、数据库技术和市场营销等领域,对应的算法也非常的多。本文仅介绍一种最简单的聚类算法——k均值(k-means)算法。


1、算法简单介绍

k-means算法,也被称为k-平均或k-均值,是一种得到最广泛使用的聚类算法。 它是将各个聚类子集内的全部数据样本的均值作为该聚类的代表点,

算法的主要思想是通过迭代过程把数据集划分为不同的类别。使得评价聚类性能的准则函数达到最优,从而使生成的每一个聚类内紧凑,类间独立。这一算法不适合处理离散型属性,可是对于连续型具有较好的聚类效果。

2、算法描写叙述
1、为中心向量c1, c2, …, ck初始化k个种子
2、分组:
(1)将样本分配给距离其近期的中心向量
(2)由这些样本构造不相交( non-overlapping )的聚类
3、确定中心:
用各个聚类的中心向量作为新的中心
4、反复分组和确定中心的步骤,直至算法收敛。

3、法  k-means算法
输入:簇的数目k和包括n个对象的数据库。
输出:k个簇。使平方误差准则最小。
算法步骤: 
1.为每一个聚类确定一个初始聚类中心,这样就有K 个初始聚类中心。 
 2.将样本集中的样本依照最小距离原则分配到最邻近聚类  
 3.使用每一个聚类中的样本均值作为新的聚类中心。


 4.反复步骤2.3直到聚类中心不再变化。


 5.结束,得到K个聚类

PS

1、将样本分配给距离它们近期的中心向量,并使目标函数值减小


2、更新簇平均值


3、计算准则函数E

计算准则函数

E

4、划分聚类方法对数据集进行聚类时包括例如以下
  三个要点:
  (1)选定某种距离作为数据样本间的类似性度量              
     上面讲到,k-means聚类算法不适合处理离散型属性。对连续型属性比較适合。

因此在计算数据样本之间的距离时。能够依据实际须要选择欧式距离、曼哈顿距离或者明考斯距离中的一种来作为算法的类似性度量,当中最经常使用的是欧式距离。以下我再给大家详细介绍一下欧式距离。平均值

假设给定的数据集X中的样本用d个描写叙述属性A1,A2…Ad来表示,并且d个描写叙述属性都是连续型属性。数据样本xi=(xi1,xi2,…xid),xj=(xj1,xj2,…xjd)当中。xi1,xi2,…xidxj1,xj2,…xjd各自是样本xixj对应d个描写叙述属性A1,A2,…Ad的详细取值。样本xixj之间的类似度通经常使用它们之间的距离d(xi,xj)来表示,距离越小,样本xixj越类似,差异度越小;距离越大,样本xixj越不类似,差异度越大。

      欧式距离公式例如以下:


(2)选择评价聚类性能的准则函数
      k-means聚类算法使用误差平方和准则函数来 评价聚类性能。给定数据集X,当中仅仅包括描写叙述属性。不包括类别属性。假设X包括k个聚类子集X1,X2,…XK;各个聚类子集中的样本数量分别为n1,n2,…,nk;各个聚类子集的均值代表点(也称聚类中心)分别为m1。m2,…,mk。则误差平方和准则函数公式为:


(3)类似度的计算依据一个簇中对象的平均值来进行。
1)将全部对象随机分配到k个非空的簇中。


2)计算每一个簇的平均值,并用该平均值代表对应的簇。


3)依据每一个对象与各个簇中心的距离,分配给近期的簇。


4)然后转2),又一次计算每一个簇的平均值。这个过程不断反复直到满足某个准则函数才停止


三、聚类样例


数据对象集合S见上表,作为一个聚类分析的二维样本,要求的簇的数量k=2。


(1)选择 ,为初始的簇中心,即 

   ,                  。
(2)对剩余的每一个对象。依据其与各个簇中心的距离,将它赋给近期的簇

对O3 :

     

     

显然 O3,故将C2分配给

对于O4:



由于:所以将O4分配给C2

对于O5:



由于:所以讲O5分配给C1

更新,得到新簇 

计算平方误差准则,单个方差为



整体平均方差是:


(3)计算新的簇的中心。 


反复(2)和(3)。得到O1分配给C1;O2分配给C2,O3分配给C2 ,O4分配给C2,O5分配给C1。更新,得到新簇
 。 中心为  , 。

单个方差分别为

整体平均误差是: 


由上能够看出,第一次迭代后,整体平均误差值52.25~25.65。显著减小。由于在两次迭代中,簇中心不变。所以停止迭代过程,算法停止。

PS 

1、k-means算法的性能分析

主要长处:
是解决聚类问题的一种经典算法,简单、高速。
对处理大数据集,该算法是相对可伸缩和高效率的。由于它的复杂度是0 (n k t ) , 当中, n 是全部对象的数目, k 是簇的数目, t 是迭代的次数。

通常k < <n 且t < <n 。
当结果簇是密集的,而簇与簇之间区别明显时, 它的效果较好。

主要缺点
在簇的平均值被定义的情况下才干使用。这对于处理符号属性的数据不适用。
必须事先给出k(要生成的簇的数目)。并且对初值敏感。对于不同的初始值,可能会导致不同结果。

    它对于“躁声”和孤立点数据是敏感的,少量的该类数据能够对平均值产生极大的影响。

K-Means算法对于不同的初始值,可能会导致不同结果。解决方法:
1.多设置一些不同的初值,对照最后的运算结果)一直到结果趋于稳定结束,比較耗时和浪费资源
2.非常多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。这也是 K-means 算法的一个不足。有的算法是通过类的自己主动合并和分裂。得到较为合理的类型数目 K.

2、k-means算法的改进方法——k-prototype算法
k-Prototype算法:能够对离散与数值属性两种混合的数据进行聚类,在k-prototype中定义了一个对数值与离散属性都计算的相异性度量标准。

K-Prototype算法是结合K-Means与K-modes算法,针对混合属性的。解决2个核心问题例如以下:
1.度量具有混合属性的方法是,数值属性採用K-means方法得到P1。分类属性採用K-modes方法P2,那么D=P1+a*P2。a是权重,假设觉得分类属性重要,则添加a。否则降低a,a=0时即仅仅有数值属性
2.更新一个簇的中心的方法,方法是结合K-Means与K-modes的更新方法。

3、k-means算法的改进方法——k-中心点算法
k-中心点算法:k -means算法对于孤立点是敏感的。为了解决问题,不採用簇中的平均值作为參照点,能够选用簇中位置最中心的对象,即中心点作为參照点。这样划分方法仍然是基于最小化全部对象与其參照点之间的相异度之和的原则来运行的。

 




猜你喜欢

转载自www.cnblogs.com/mqxnongmin/p/10489049.html
今日推荐