聚类
聚类的基本思想
聚类是一种无监督学习,是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。
给定一个有N个对象的数据集,划分聚类技术将构造数据的 k 个划分,每一个划分代表一个簇,k≤n。也就是说,聚类将数据划分为k个簇,而且这k个划分满足下列条件:
每一个簇至少包含一个对象
每一个对象属于且仅属于一个簇
基本思想:对于给定的k,算法首先给出一个初始的划分方法,以后通过反复迭代的方法改变划分,使得每一次改进之后的划分方案都较前一次更好。
相似度/距离计算方法总结
K-Means算法
K-Means算法
K-means算法,也被称为K均值算法,是一种得到最广泛使用的聚类算法,或者成为其他聚类算法的基础。
算法首先随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心。对剩余的每个对象根据其与各个簇中心的距离,将它赋给最近的簇。然后重新计算每个簇的平均值。这个过程不断重复,直到准则函数收敛(准则函数常常使用最小平方误差MSE,Minimum Squared- Error)。
优点
是解决聚类问题的一种经典算法,简单、快速,对处理大数据集,该算法保持可伸缩性和高效率。当结果簇是密集的,它的效果较好。
缺点
在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用,因为必须事先给出k(要生成的簇的数目),而且对初值敏感,对于不同的初始值,可能会导致不同结果。不适合于发现非凸形状的簇或者大小差别很大的簇,对躁声和孤立点数据敏感。可作为其他聚类方法的基础算法,如谱聚类。
二分K-Means算法
二分K均值算法的基本思想是: 首先将所有数据当作一个簇, 然后将该簇分为两个簇, 之后再选择其中一个继续划分成两个簇, 选择的原则是选择那个能够最大程度降低聚类误差平方和(Error Sum of Squares, SSE)的簇, 使得SSE值尽量最小。 依此类推, 直到簇的数目为给定的K值为止。
二分K均值算法的具体步骤如下:
(1) 将所有数据点当作一个簇;
(2) 当簇的数目小于K时, 计算每个簇的总误差;
(3) 在给定簇上进行K均值聚类, 计算该簇一分为二之后的总误差, 选择使得总误差值最小的那个簇再进行划分;
(4)重复(2)、(3)步骤, 直到满足迭代条件为止。
层次聚类方法
层次聚类方法对给定的数据集进行层次的分解,直到某种条件满足为止。
层次聚类方法具体可分为:
凝聚的层次聚类: AGNES算法。一种自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到某个终结条件被满足。
分裂的层次聚类: DIANA算法。采用自顶向下的策略,它首先将所有对象置于一个簇中,然后逐渐细分为越来越小的簇,直到达到了某个终结条件。
AGNES (AGglomerative NESting)算法最初将每个对象作为一个簇,然后这些簇根据某些准则被一步步地合并。两个簇间的距离由这两个不同簇中距离最近的数据点对的相似度来确定;聚类的合并过程反复进行直到所有的对象最终满足簇数目。
DIANA (DIvisive ANAlysis)算法是上述过程的反过程,属于分裂的层次聚类,首先将所有的对象初始化到一个簇中,然后根据一些原则(比如最大的欧式距离) ,将该簇分类。直到到达用户指定的簇数目或者两个簇之间的距离超过了某个阈值。
密度聚类方法
密度聚类方法的指导思想是,只要一个区域中的点的密度大于某个阈值,就把它加到与之相近的聚类中去。这类算法能克服基于距离的算法只能发现“类圆形"(凸)的聚类的缺点,可发现任意形状的聚类,且对噪声数据不敏感。但计算密度单元的计算复杂度大,需要建立空间索引来降低计算量。
DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)一个比较有代表性的基于密度的聚类算法与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在有“噪声”的数据中发现任意形状的聚类。
考虑在某空间里将被聚类的点集合,为了进行 DBSCAN 聚类,所有的点被分为核心点,(密度)可达点及局外点,详请如下:
- 如果一个点 p 在距离 ε 范围内有至少 minPts 个点(包括自己),则这个点被称为核心点,那些 ε 范围内的则被称为*由 p 直接可达的。*同时定义,没有任何点是由非核心点直接可达的。
- 如果存在一条道路 p1, …, pn ,有 p1 = p和pn = q, 且每个 p**i+1 都是由 pi 直接可达的(道路上除了 q 以外所有点都一定是核心点),则称 q 是由 p 可达的。
- 所有不由任何点可达的点都被称为局外点。
如果 p 是核心点,则它与所有由它可达的点(包括核心点和非核心点)形成一个聚类,每个聚类拥有最少一个核心点,非核心点也可以是聚类的一部分,但它是在聚类的“边缘”位置,因为它不能达至更多的点。
DBSCAN通过检查数据集中每个对象的ε-邻域来寻找聚类。如果一个点p的ε -邻域包含多于m个对象,则创建一个p作为核心对象的新簇。然后DBSCAN反复地寻找从这些核心对象直接密度可达的对象,这个过程可能涉及密度可达
簇的合并。当没有新的点可以被添加到任何簇时,该过程结束。
密度最大值算法
密度最大值聚类可以识别各种形状的类簇,并且参数很容易确定。
定义:局部密度ρi
dc是一个截断距离, ρi即到对象i的距离小于dc的对象的个数。由于该算法只对ρi的相对值敏感,所以对dc的选择是
稳健的,一种推荐做法是选择dc,使得平均每个点的邻居数为所有点的1%-2%。
高局部密度点距离
在密度高于对象i的所有对象中,到对象i最近的距离,即高局部密度点距离。对于密度最大的对象,设置δi=max(dij) (即:该问题中的无穷大)。只有那些密度是局部或者全局最大的点才会有远大于正常值的高局部密度点距离。
谱和谱聚类
谱:方阵作为线性算子,它的所有特征值的全体统称方阵的谱。
方阵的谱半径为最大的特征值;
矩阵A的谱半径: ( ATA)的最大特征值。
谱聚类:一般的说,是一种基于图论的聚类方法,通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据聚类的目的。
谱分析的整体过程
给定一组数据x1,x2,…,xn,记任意两个点之间的相似度(“距离”的减函数)为s; =<xi,xj> ,形成相似度图(similarity graph): G=(V,E) 。如果xi和xj之间的相似度sij大于一定的阈值,那么,两个点是连接的,权值记做sij。接下来,可以用相似度图来解决样本数据的聚类问题:找到图的一个划分,形成若干个组(Group),使得不同组之间有较低的权值,组内有较高的权值。
k近邻图(k-nearest neighbor graph)
若vi的k最近邻包含vj,vj的k最近邻不一定包含vi:有向图。忽略方向的图,往往简称“k近邻图”。两者都满足才连接的图,称作“互k近邻图(mutual)”。