k-means 和层次聚类都属于划分聚类,实际中最常用的是k-means,k-means效果不好的情况下才会采用其他聚类
K-means算法,也称为K-平均或者K-均值,是一种使用广泛的最基础的聚类算法
假设输入样本为T=X1,X2,…,Xm;则算法步骤为(使用欧几里得距离公式):
中止条件:
迭代次数、最小平方误差MSE(样本到中心的距离平方和)、簇中心点变化率(结果相同)
记K个簇中心分别为 ;每个簇的样本数量为;
使用平方误差作为目标函数(使用欧几里得距离),公式为:
要获取最优解,也就是目标函数需要尽可能的小,对J函数求偏导数,可以得到簇中心点a更新的公式为:
1、K-means算法在迭代的过程中使用所有点的均值作为新的质点(中心点),如果簇中存在异常点,将导致均值偏差比较严重
比如一个簇中有2、4、6、8、100五个数据,那么新的质点为24,显然这个质点离绝大多数点都比较远;在当前情况下,使用中位数6可能比使用均值的想法更好,使用中位数的聚类方式叫做K-Mediods聚类(K中值聚类)
2、K-means算法是初值敏感(K值的给定和K个初始簇中心点的选择)的,选择不同的初始值可能导致不同的簇划分规则
为了避免这种敏感性导致的最终结果异常性,可以采用初始化多套初始节点构造不同的分类规则,然后选择最优的构造规则
缺点:
优点:
基于scikit包中的创建模拟数据的API创建聚类数据,使用K-means算法对数据进行分类操作,并获得聚类中心点以及总的样本簇中心点距离和值
解决K-Means算法对初始簇心比较敏感的问题,二分K-Means算法是一种弱化初始质心的一种算法,具体思路步骤如下:
从队列中选择划分聚簇的规则一般有两种方式;分别如下:
解决K-Means算法对初始簇心比较敏感的问题,K-Means++算法和K-Means算法的区别主要在于初始的K个中心点的选择方面,K-Means算法使用随机给定的方式,K-Means++算法采用下列步骤给定K个初始质点:
缺点:由于聚类中心点选择过程中的内在有序性,在扩展方面存在着性能方面的问题(第k个聚类中心点的选择依赖前k-1个聚类中心点的值)
解决K-Means++算法缺点而产生的一种算法;主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次,然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-Means算法的初始聚簇中心点。实践证明:一般5次重复采用就可以保证一个比较好的聚簇中心点。
Canopy算法属于一种“粗”聚类算法,执行速度较快,但精度较低,算法执行步骤如下:
Canopy算法得到的最终结果的值,聚簇之间是可能存在重叠的,但是不会存在某个对象不属于任何聚簇的情况
由于K-Means算法存在初始聚簇中心点敏感的问题,常用使用Canopy+K-Means算法混合形式进行模型构建
先使用canopy算法进行“粗”聚类得到K个聚类中心点
K-Means算法使用Canopy算法得到的K个聚类中心点作为初始中心点,进行“细”聚类
优点:
Mini Batch K-Means算法是K-Means算法的一种优化变种,采用小规模的数据子集(每次训练使用的数据集是在训练算法的时候随机抽取的数据子集)减少计算时间,同时试图优化目标函数;Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果效果只是略差于标准K-Means算法
算法步骤如下:
基于scikit包中的创建模拟数据的API创建聚类数据,使用K-means算法和MiniBatch K-Means算法对数据进行分类操作,比较这两种算法的聚类效果以及聚类的消耗时间长度
一个簇中只包含一个类别的样本,则满足均一性;其实也可以认为就是正确率(每个聚簇中正确分类的样本数占该聚簇总样本数的比例和)
同类别样本被归类到相同簇中,则满足完整性;每个聚簇中正确分类的样本数占该类型的总样本数比例的和。
Rand index(兰德指数)(RI),RI取值范围为[0,1],值越大意味着聚类结果与真实情况越吻合。
其中C表示实际类别信息,K表示聚类结果,a表示在C与K中都是同类别的元素对数(也就是行),b表示在C与K中都是不同类别的元素对数(也就是列),表示数据集中可以组成的对数,即从样本中取两个.
调整兰德系数(ARI,Adjusted Rnd Index),ARI取值范围[-1,1],值越大,表示聚类结果和真实情况越吻合。从广义的角度来将,ARI是衡量两个数据分布的吻合程度的。
调整互信息(AMI,Adjusted Mutual Information),类似ARI,内部使用信息熵
S 表示整个数据集,U 表示整个预测的数据集,V 实际数据集(y值),C 表示原始的,R 表示预测的。一个样本只属于一个簇,所以 ;一个样本只能预测出一种结果,所以 ,,表示实际和预测是相同的个数.
簇内不相似度:计算样本i到同簇其它样本的平均距离为 ; 越小,表示样本i越应该被聚类到该簇,簇C中的所有样本的 的均值被称为簇C的簇不相似度。
簇间不相似度:计算样本i到其它簇 的所有样本的平均距离 越大,表示样本i越不属于其它簇。
轮廓系数: 值越接近1表示样本i聚类越合理,越接近-1,表示样本i应该分类到另外的簇中,近似为0,表示样本i应该在边界上;所有样本的 的均值被称为聚类结果的轮廓系数
层次聚类方法对给定的数据集进行层次的分解或者合并,直到满足某种条件为止,传统的层次聚类算法主要分为两大类算法:
凝聚的层次聚类:AGNES算法(AGglomerative NESting)—>采用自底向上的策略。最初将每个对象作为一个簇,然后这些簇根据某些准则被一步一步合并,两个簇间的距离可以由这两个不同簇中距离最近的数据点的相似度来确定,聚类的合并过程反复进行直到所有的对象满足簇数目。
分裂的层次聚类:DIANA算法(DIvisive ANALysis)—>采用自顶向下的策略。首先将所有对象置于一个簇中,然后按照某种既定的规则逐渐细分为越来越小的簇(比如最大的欧式距离),直到达到某个终结条件(簇数目或者簇距离达到阈值)。
最小距离(SL聚类)
两个聚簇中最近的两个样本之间的距离(single/word-linkage聚类法)
最终得到模型容易形成链式结构
最大距离(CL聚类)
两个聚簇中最远的两个样本的距离(complete-linkage聚类法)
如果存在异常值,那么构建可能不太稳定
平均距离(AL聚类)
两个聚簇中样本间两两距离的平均值(average-linkage聚类法)
两个聚簇中样本间两两距离的中值(median-linkage聚类法)
BIRCH算法(平衡迭代削减聚类法)(重要):聚类特征使用3元组进行一个簇的相关信息,通过构建满足分枝因子和簇直径限制的聚类特征树来求聚类,聚类特征树其实是一个具有两个参数分枝因子和类直径的高度平衡树;分枝因子规定了树的每个节点的子女的最多个数,而类直径体现了对这一类点的距离范围;非叶子节点为它子女的最大特征值;聚类特征树的构建可以是动态过程的,可以随时根据数据对模型进行更新操作。
优缺点:
CURE算法(使用代表点的聚类法):该算法先把每个数据点看成一类,然后合并距离最近的类直至类个数为所要求的个数为止。但是和AGNES算法的区别是:取消了使用所有点或用中心点+距离来表示一个类,而是从每个类中抽取固定数量、分布较好的点作为此类的代表点,并将这些代表点乘以一个适当的收缩因子,使它们更加靠近类中心点。代表点的收缩特性可以调整模型可以匹配那些非球形的场景,而且收缩因子的使用可以减少噪音对聚类的影响。
优缺点:
BRICH算法案例
密度聚类方法的指导思想: 只要样本点的密度大于某个阈值,则将该样本添加到最近的簇中。
这类算法可以克服基于距离的算法只能发现凸聚类的缺点,可以发现任意形状的聚类,而且对噪声数据不敏感。
计算复杂度高,计算量大。
常用算法:DBSCAN、密度最大值算法
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
一个比较有代表性的基于密度的聚类算法,相比于基于划分的聚类方法和层次聚类方法,DBSCAN算法将簇定义为密度相连的点的最大集合,能够将足够高密度的区域划分为簇,并且在具有噪声的空间数据商能够发现任意形状的簇。
DBSCAN算法的核心思想是:用一个点的ε邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不规则的cluster,而且聚类的时候事先不需要给定cluster的数量。
ε邻域(ε neighborhood,也称为Eps):给定对象在半径ε内的区域。
密度(density):ε邻域中x的密度,是一个整数值,依赖于半径ε。
MinPts定义核心点时的阈值,也简记为M。
核心点(core point):如果 p(x)>=M ,那么称 x 为 X 的核心点;记由X中所有核心点构成的集合为Xc,并记Xnc=X\Xc表示由X中所有非核心点构成的集合。直白来讲,核心点对应于稠密区域内部的点。
边界点(border point): 如果非核心点x的ε邻域中存在核心点,那么认为x为X的边界点。由X中所有的边界点构成的集合为Xbd。边界点对应稠密区域边缘的点。
噪音点(noise point):集合中除了边界点和核心点之外的点都是噪音点,所有噪音点组成的集合叫做Xnoi;,噪音点对应稀疏区域的点。
直接密度可达(directly density-reachable):给定一个对象集合X,如果y是在x的ε邻域内,而且x是一个核心对象,可以说对象y从对象x出发是直接密度可达的。
密度可达(density-reachable):如果存在一个对象链p1,p2…pm,如果满足pi+1是从pi直接密度可达的,那么称p1是从p1密度可达的。
密度相连(density-connected):在集合X中,如果存在一个对象o,使得对象x和y是从o关于ε和m密度可达的,那么对象x和y是关于ε和m密度相连的。
簇(cluster):一个基于密度的簇是最大的密度相连对象的集合C;满足以下两个条件:
优点:
缺点:
MDCA(Maximum Density Clustering Application)算法基于密度的思想引入划分聚类中,使用密度而不是初始点作为考察簇归属情况的依据,能够自动确定簇数量并发现任意形状的簇;另外MDCA一般不保留噪声,因此也避免了阈值选择不当情况下造成的对象丢弃情况。
MDCA算法的基本思路是寻找最高密度的对象和它所在的稠密区域;MDCA算法在原理上来讲,和密度的定义没有关系,采用任意一种密度定义公式均可,一般情况下采用DBSCAN算法中的密度定义方式。
有序序列: 根据所有对象与pmax的距离对数据重新排序:
密度阈值density0;当节点的密度值大于密度阈值的时候,认为该节点属于一个比较固定的簇,在第一次构建基本簇的时候,就将这些节点添加到对应簇中,如果小于这个值的时候,暂时认为该节点为噪声节点。
簇间距离:对于两个簇C1和C2之间的距离,采用两个簇中最近两个节点之间的距离作为簇间距离。
聚簇距离阈值dist0:当两个簇的簇间距离小于给定阈值的时候,这两个簇的结果数据会进行合并操作。
M值:初始簇中最多数据样本个数。
MDCA算法聚类过程步骤如下:
将数据集划分为基本簇;
使用凝聚层次聚类的思想,合并较近的基本簇,得到最终的簇划分;
处理剩余节点,归入最近的簇。
谱聚类是基于谱图理论基础上的一种聚类方法,与传统的聚类方法相比:具有在任意形状的样本空间上聚类并且收敛于全局最优解的优点。
通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据进行聚类的目的;其本质是将聚类问题转换为图的最优划分问题,是一种点对聚类算法。
谱聚类算法将数据集中的每个对象看做图的顶点V,将顶点间的相似度量化为相应顶点连接边E的权值w,这样就构成了一个基于相似度的无向加权图G(V,E),于是聚类问题就转换为图的划分问题。基于图的最优划分规则就是子图内的相似度最大,子图间的相似度最小。
谱聚类的构建过程主要包含以下几个步骤:
应用场景:图形聚类、计算机视觉、非凸球形数据聚类等。
存在的问题: