2.常用聚类算法
聚类算法可大致分为四类:划分方法、层次方法、图聚类方法、基于密度的方法。
划分方法
对于划分方法这里详细介绍划分方法的代表——K-means算法,K-means算法是最经典的聚类算法之一,该算法处理效率高,且能处理大规模数据。算法流程如下:
1.根据事先取好的簇数k,随机选取k个点,作为聚类中心;
2.计算每个点分别到k个聚类中心的聚类,然后将该点分到最近的聚类中心,这样就形成了k个簇;
3.再重新计算每个簇的中心(均值);
4.重复以上2~4步,直到质心的位置的变化小于某个阈值或者达到设定的迭代次数。
迭代次数的阈值究竟是多少难以获知,而迭代次数又严重影响着聚类结果的质量,如图1是采用MATLAB自带的K-means函数将数据集X仅迭代100次产生的一个基聚类,通过观察,可以发现图1的质量图并不好,我们预想的聚类结果应该是如图2黑色笔迹所示,这就是聚类算法的一个缺点,参数的初始化设置影响着聚类结果。
图2 预想中的聚类结果
K-means还有其他的缺点如当有一个数据点距离过于远时,会影响聚类的结果;数据集过大时只能做到局部最优。
以下内容借鉴CSDN博客
层次方法
层次聚类主要有两种类型:合并的层次聚类和分裂的层次聚类。前者是一种自底向上的层次聚类算法,从最底层开始,每一次通过合并最相似的聚类来形成上一层次中的聚类,整个当全部数据点都合并到一个聚类的时候停止或者达到某个终止条件而结束,大部分层次聚类都是采用这种方法处理。后者是采用自顶向下的方法,从一个包含全部数据点的聚类开始,然后把根节点分裂为一些子聚类,每个子聚类再递归地继续往下分裂,直到出现只包含一个数据点的单节点聚类出现,即每个聚类中仅包含一个数据点。
算法流程:
以下流程以自下向上为例。
1. 将每个对象看作一类,计算两两之间的最小距离;
2. 将距离最小的两个类合并成一个新类;
3. 重新计算新类与所有类之间的距离;
4. 重复2、3,直到所有类最后合并成一类
算法优缺点
优点:可解释性好(如当需要创建一种分类法时);还有些研究表明这些算法能产生高质量的聚类,也会应用在上面说的先取K比较大的K-means后的合并阶段;还有对于K-means不能解决的非球形簇就可以解决了。
缺点:时间复杂度高,O(m^3),
改进后的算法也有O(m^2lgm),m为点的个数;贪心算法的缺点,一步错步步错;同K-means,无法处理结构复杂的数据集。
基于密度的方法
k-means解决不了不规则形状的聚类。于是就有了基于密度的方法来系统解决这个问题。该方法同时也对噪声数据的处理比较好。其原理简单说就是画圈儿,其中要定义两个参数,一个是圈儿的最大半径,一个是一个圈儿里最少应容纳几个点。只要邻近区域的密度(对象或数据点的数目)超过某个阈值,就继续聚类,最后在一个圈里的,就是一个类。DBSCAN(Density-Based Spatial Clustering of Applications with Noise)就是其中的典型。
DBSCAN流程:
1. 从任一对象点p开始;
2. 寻找并合并核心p对象直接密度可达(eps)的对象;
3. 如果p是一个核心点,则找到了一个聚类,如果p是一个边界点(即从p没有密度可达的点)则寻找下一个对象点;
4. 重复2、3,直到所有点都被处理
DBSCAN聚类算法原理的基本要点:确定半径eps的值。
①DBSCAN算法需要选择一种距离度量,对于待聚类的数据集中,任意两个点之间的距离,反映了点之间的密度,说明了点与点是否能够聚到同一类中。由于DBSCAN算法对高维数据定义密度很困难,所以对于二维空间中的点,可以使用欧几里德距离来进行度量。
②DBSCAN算法需要用户输入2个参数:一个是半径(Eps),表示以给定点P为中心的圆形邻域的范围;另一个是以点P为中心的邻域内最少点的数量(MinPts)。如果满足:以点P为中心、半径为Eps的邻域内的点的个数不少于MinPts,则称点P为核心点。
③DBSCAN聚类使用到一个k-距离的概念,k-距离是指:给定数据集P={p(i);i=0,1,…n},对于任意点P(i),计算点P(i)到集合D的子集S={p(1), p(2), …, p(i-1), p(i+1), …, p(n)}中所有点之间的距离,距离按照从小到大的顺序排序,假设排序后的距离集合为D={d(1), d(2), …, d(k-1), d(k), d(k+1),…,d(n)},则d(k)就被称为k-距离。也就是说,k-距离是点p(i)到所有点(除了p(i)点)之间距离第k近的距离。对待聚类集合中每个点p(i)都计算k-距离,最后得到所有点的k-距离集合E={e(1), e(2), …, e(n)}。
④根据经验计算半径Eps:根据得到的所有点的k-距离集合E,对集合E进行升序排序后得到k-距离集合E’,需要拟合一条排序后的E’集合中k-距离的变化曲线图,然后绘出曲线,通过观察,将急剧发生变化的位置所对应的k-距离的值,确定为半径Eps的值。
⑤根据经验计算最少点的数量MinPts:确定MinPts的大小,实际上也是确定k-距离中k的值,DBSCAN算法取k=4,则MinPts=4。
⑥如果对经验值聚类的结果不满意,可以适当调整Eps和MinPts的值,经过多次迭代计算对比,选择最合适的参数值。可以看出,如果MinPts不变,Eps取得值过大,会导致大多数点都聚到同一个簇中,Eps过小,会导致一个簇的分裂;如果Eps不变,MinPts的值取得过大,会导致同一个簇中点被标记为噪声点,MinPts过小,会导致发现大量的核心点。
我们需要知道的是,DBSCAN算法,需要输入2个参数,这两个参数的计算都来自经验知识。半径Eps的计算依赖于计算k-距离,DBSCAN取k=4,也就是设置MinPts=4,然后需要根据k-距离曲线,根据经验观察找到合适的半径Eps的值。
算法优缺点
优点:对噪声不敏感;能发现任意形状的聚类。
缺点:聚类的结果与参数有很大的关系;DBSCAN用固定参数识别聚类,但当聚类的稀疏程度不同时,相同的判定标准可能会破坏聚类的自然结构,即较稀的聚类会被划分为多个类或密度较大且离得较近的类会被合并成一个聚类。
基于网络的方法
这类方法的原理就是将数据空间划分为网格单元,将数据对象集映射到网格单元中,并计算每个单元的密度。根据预设的阈值判断每个网格单元是否为高密度单元,由邻近的稠密单元组形成”类“。
算法流程
这些算法用不同的网格划分方法,将数据空间划分成为有限个单元(cell)的网格结构,并对网格数据结构进行了不同的处理,但核心步骤是相同的:
1、 划分网格
2、 使用网格单元内数据的统计信息对数据进行压缩表达
3、 基于这些统计信息判断高密度网格单元
4、 最后将相连的高密度网格单元识别为簇
算法优缺点
优点:速度很快,因为其速度与数据对象的个数无关,而只依赖于数据空间中每个维上单元的个数。
缺点:参数敏感、无法处理不规则分布的数据、维数灾难等;这种算法效率的提高是以聚类结果的精确性为代价的。经常与基于密度的算法结合使用。