聚类分析

来源:互联网 发布:techmark数据分析模型 编辑:程序博客网 时间:2024/04/28 09:26

 概要

  1. 聚类分析仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组。其目标是,组内的对象相互之间是相似的(相关的),而不同组中的对象是不同的(不相关的)。组内的相似性(同质性)越大,组间差别越大,聚类就越好。

 

 

应用场景:

   聚类。


聚类分析的3种大类和其代表技术:

  1. 划分聚类法。K均值。是基于原型的、划分的聚类技术。它试图发现用户指定个数K的簇(由质心代表)。
  2. 层次聚类。凝聚的层次聚类。开始,每个点作为一个单点簇;然后,重复地合并两个最靠近的簇,直到产生单个的、包含所有点的簇。
  3. 基于密度的聚类。DBSCAN。是一种产生划分聚类的基于密度的聚类算法,簇的个数由算法自动地确定。低密度区域中的点被视为噪声而忽略,因此DBSCAN不产生完全聚类。

 

 

层次聚类的优缺点

优点

  1. 距离和规则的相似度容易定义限制少
  2. 不需要预先指定聚类数;
  3. 可以发现类的层次关系;
  4. 可以聚类成其他形状。

 

缺点:

  1. 计算复杂度太高;
  2. 奇异值也能产生很大影响;
  3. 算法很可能聚类成链状。

 

 

DBSCAN的优缺点

优点:

  1. 不需要事先知道要形成的簇的数量。
  2. 可以发现任意形状的簇类。
  3. 对噪声点不敏感。
  4. 对样本点的顺序不敏感。

 

缺点:

  1. 簇的密度变化太大时,DBSCAN会有麻烦。
  2. 对于高维数据,密度定义困难,DBSCAN也有问题。

 

Note

  1. K均值对于圆形区域聚类的效果很好,DBSCAN基于密度,对于集中区域效果很好。
  2. 对于不规则形状,K均值完全无法使用。DBSCAN可以起到很好的效果。

 

K均值的优缺点

优点:

  1. 简单,易于理解和实现。
  2. 时间复杂度低。

 

缺点:

  1. 要手工输入K值,对初始值的设置很敏感。
  2. 对噪声和离群点很敏感。
  3. 只用于数值型数据,不适用于categorical类型的数据。
  4. 不能解决非凸数据。
  5. 主要发现圆形或者球形簇,不能识别非球形的簇。

 

K均值

K-Means算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心(这个点可以不是样本点),从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。

 

K-Means聚类算法主要分为4个步骤:

(1)选择K个初始质心,其中K是用户指定的参数,即所期望的簇的个数。

(2)每个点指派到最近的质心,而指派到一个质心的点集为一个簇。

(3)根据指派到簇的点,更新每个簇的质心。

(4)重复指派和更新步骤,直到簇不发生变化,或等价地,直到质心不发生变化。

 

下图展示了对n个样本点进行K-means聚类的效果,这里k取2:

(a)未聚类的初始点集

(b)随机选取两个点作为聚类中心

(c)计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去

(d)计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心

(e)重复(c),计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去

(f)重复(d),计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心

k均值常用的邻近度,质心和目标函数的选择:

邻近度函数:曼哈顿距离。质心:中位数。目标函数:最小化对象到其簇质心的距离和。

邻近度函数:平方欧几里德距离。质心:均值。目标函数:最小化对象到其簇质心的距离的平方和。

邻近度函数:余弦。质心:均值。最大化对象与其质心的余弦相似度和。

邻近度函数:Bregman散度。质心:均值。目标函数:最小化对象到其簇质心的Bregman散度和。

 

 

基本K均值算法:

  1. 选择K个点作为初始质心。
  2. repeat
  3.        将每个点指派到最近的质心,形成K个簇。
  4.        重新计算每个簇的质心。
  5. until    质心不发生变化。

 

由于基本K均值算法采取随机地选取初始质心的办法,导致最后形成的簇的质量常常很糟糕。在此基础上引出了基本K均值算法的扩充:二分K均值算法。二分K均值算法不太受初始化问题的影响。

 

 

算法主要分为以下步骤,一开始是把所有数据初始化为一个cluster,第二步从所有cluster中选其中一个出来用基本k-means算法(k设为2)再划分成两个cluster(初始时只有一个cluster),然后是一直重复第二步的划分(选一个cluster划成两个)直到得到k个cluster算法停止。

 

每次划分都是用基本K均值算法,可问题是从已有的cluster种应该选哪个cluster出来进行划分呢? 选取cluster有两种策略:

  1. 每次选的时候,都对已有的cluster计算误差和SSE,然后选一个SSE最大的一个cluster来进行划分。
  2. 每次都挑数据最多的那个cluster来进行划分。

一般都采取第一种策略。

 

二分K均值算法:

  1. 把所有数据作为一个cluster加入cluster list
  1. repeat
  1.        cluster list中挑选出一个SSE最大的cluster来进行划分
  2.        for i=1 to预设的循环次数
  3.                        用基本K均值算法把挑选出来的cluster划分成两个子cluster
  4.                        计算两个子clusterSSE和。
  5.        end for
  6.       for循环中SSE和最小的那两个子cluster加入cluster list
  7. until  cluster list拥有Kcluster

 

 

除此以外,每次划分不止执行一次基本K均值算法,而是预先设置一个ITER值,然后对这个cluster进行ITER次执行基本K均值运算。因为基本K均值每次一开始都是随机选K个质心来执行,所以i一般来说ITER次执行基本K均值,每次都会得到不同的两个cluster。那么应该选哪对cluster来作为划分以后的cluster呢?答案就是在每次循环中,每次都计算当次基本K均值划分出来的两个clusterSSE和,最后就选SSE和最小的那对cluster作为划分以后的cluster



层次聚类:

有两种产生层次聚类的基本方法:

  1. 凝聚的。从点作为个体簇开始,每一步合并两个最接近的簇。这需要定义簇的临近性概念。凝聚层次聚类技术最常见。
  2. 分裂的。从包含所有点的某个簇开始,每一步分裂一个簇,直到仅剩下单点簇。在这种情况下,我们需要确定每一步分裂哪个簇,以及如何分裂。

基本凝聚层次聚类算法:

  1. 如果需要计算临近度矩阵
  2. repeat
  3.         合并最接近的两个簇
  4.         更新临近度矩阵,以反映新的簇与原来的簇之间的临近性。
  5. until 仅剩下一个簇

簇之间的临近性有3种定义方式:

  1. MIN(单链)。不同簇中的两个最近的点之间的距离作为临近度。
  2. MAX(全链)。不同簇中的两个最远的点之间的距离作为临近度。
  3. GROUP组平均)。取自不同簇的所有点对距离的平均值作为临近度。

 

Note

  1. 簇与簇合并的原则永远是dist最小。
  2. 但在计算dist值的时候,可以采用MIN, MAX, GROUP AVG 3中方式得出dist的值。

 

 

DBSCAN

基于密度的聚类寻找被低密度区域分离的高密度区域。DBSCAN是一种简单、有效的基于密度的聚类算法。

 

 

DBSCAN算法:

  1. 将所有点标记为核心点、边界点或噪声点。
  2. 删除噪声点。
  3. 为距离在Eps之内的所有核心点之间连线。
  4. 每组连通的核心点形成一个簇。
  5. 将每个边界点指派到一个与之关联的核心点的簇中。

 

DBSCAN算法阐释:

  1. 算法需要用户输入2个参数: 半径Eps; 最小(少)点值MinPts
  2. 确定EpsMinPts需要用到K-距离的概念。K-距离就是“到第K近的点的距离”,按经验一般取值为4。并且,一般取K的值为MinPts参数的值。
  3. 首先计算每个点到所有其余点的欧式距离,升序排序后,选出每个点的“K距离”。
  4. 所有点的K距离形成一个集合D。对D进行升序排序,依此可以形成一个样本数据的K距离图。
  5. 图中急剧变化处的值,即为Eps
  6. 根据Eps和MinPts,计算出所有的核心点。
  7. 给核心点到小于Eps的另一个核心点赋予一个连线,到核心点的距离等于Eps的点被识别为边界点。最后,核心点、边界点之外的点都是噪声点。
  8. 将能够连线的点和与之关联的边界点都放到一起,形成了一个簇。

 

0 0
原创粉丝点击