机器学习之K-MEANS
目录
无论才能知识多么卓著,如果缺乏热情,则无异纸上画饼充饥,无补于事。
什么是聚类?
- 聚类是无监督的算法
- 聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小;
- 聚类算法的重点是计算样本项之间的相似度,有时候也称为样本间的距离
- 和分类算法的区别:
- 分类算法是有监督学习,基于有标注的历史数据进行算法模型构建
- 聚类算法是无监督学习,数据集中的数据是没有标注的
- 之前knn中有计算相似度的公式
K-means是什么?
- k-means(k均值聚类) 算法是一个聚类的算法。是属于无监督学习算法,也是就样本没有label(标签)的算法,然后根据某种规则进行“分割”, 把相似的或者相近的objects 物体放在一起。
- 在这里K就是我们想要分割的的聚类的个数。
KMeans聚类的思想
- 基本K-Means算法的思想很简单,事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心点不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。
- 给定一个有M个对象的数据集,构建一个具有k个簇的模型,其中k<=M。满足以下条件:
- 每个簇至少包含一个对象
- 每个对象属于且仅属于一个簇
- 将满足上述条件的k个簇成为一个合理的聚类划分
- 基本思想:对于给定的类别数目k,首先给定初始划分,通过迭代改变样本和簇的隶属关系,使的每次处理后得到的划分方式比上一次的好(总的数据集之间的距离和变小了)
K-means算法
K-means算法,也称为K-平均或者K-均值,是一种使用广泛的最基础的聚类算法
- 假设输入样本为T=X1,X2,…,Xm;则算法步骤为(使用欧几里得距离公式):
- Step1:随机选择初始化的k个类别中心a1,a2,…ak;
- Step2:对于每个样本Xi,将其标记位距离类别中心aj最近的类别j
- 更新每个类别的中心点aj为隶属该类别的所有样本的均值
- 重复上面两步操作,直到达到某个中止条件
- 中止条件:
- 迭代次数、最小平方误差MSE(样本到中心的距离平方和)、簇中心点变化率(结果相同)
- 算法执行过程图:
- K-means算法过程:
- 记K个簇中心分别为 ;每个簇的样本数量为 ;
- 使用平方误差作为目标函数(使用欧几里得距离),公式为:
- 要获取最优解,也就是目标函数需要尽可能的小,对J函数求偏导数,可以得到簇中心点a更新的公式为:
K-means中的问题
- K-means算法在迭代的过程中使用所有点的均值作为新的质点(中心点),如果簇中存在异常点,将导致均值偏差比较严重
- 比如一个簇中有2、4、6、8、100五个数据,那么新的质点为24,显然这个质点离绝大多数点都比较远;在当前情况下,使用中位数6可能比使用均值的想法更好,使用中位数的聚类方式叫做K-Mediods聚类(K中值聚类)
- K-means算法是初值敏感(K值的给定和K个初始簇中心点的选择)的,选择不同的初始值可能导致不同的簇划分规则
- 为了避免这种敏感性导致的最终结果异常性,可以采用初始化多套初始节点构造不同的分类规则,然后选择最优的构造规则
K-means算法优缺点
缺点:
- K值是用户给定的,在进行数据处理前,K值是未知的,不同的K值得到的结果也不一样;
- 对初始簇中心点是敏感的
- 不适合发现非凸形状的簇或者大小差别较大的簇
- 特殊值(离群值)对模型的影响比较大
优点:
- 理解容易,聚类效果不错
- 处理大数据集的时候,该算法可以保证较好的伸缩性和高效率
- 当簇近似高斯分布的时候,效果非常不错
K-Means++算法
解决K-Means算法对初始簇心比较敏感的问题,K-Means++算法和K-Means算法的区别主要在于初始的K个中心点的选择方面,K-Means算法使用随机给定的方式,K-Means++算法采用下列步骤给定K个初始质点:
- STEP1:从数据集中任选一个节点作为第一个聚类中心
- STEP2:对数据集中的每个点x,计算x到所有已有聚类中心点的距离和D(X),D(x)比较大的点作为下一个簇的中心。
- STEP3:重复2和3直到k个聚类中心被选出来
- STEP4:利用这k个初始的聚类中心来运行标准的k-means算法
缺点:由于聚类中心点选择过程中的内在有序性,在扩展方面存在着性能方面的问题(第k个聚类中心点的选择依赖前k-1个聚类中心点的值)
K-Means||算法
解决K-Means++算法缺点而产生的一种算法;主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次,然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-Means算法的初始聚簇中心点。实践证明:一般5次重复采用就P:;;{可以保证一个比较好的聚簇中心点。
Canopy算法
Canopy算法属于一种“粗”聚类算法,执行速度较快,但精度较低,算法执行步骤如下:
- 给定样本列表 以及先验值 和
- 从列表L中获取一个节点P,计算P到所有聚簇中心点的距离(如果不存在聚簇中心,那么此时点P形成一个新的聚簇),并选择出最小距离
- 如果距离D小于 ,表示该节点属于该聚簇,添加到该聚簇列表中
- 如果距离D小于 ,表示该节点不仅仅属于该聚簇,还表示和当前聚簇中心点非常近,所以将该聚簇的中心点设置为该簇中所有样本的中心点,并将P从列表L中删除
- 如果距离D大于 ,那么节点P形成一个新的聚簇,并将P从列表L中删除
- 直到列表L中的元素数据不再有变化或者元素数量为0的时候,结束循环操作
Canopy算法得到的最终结果的值,聚簇之间是可能存在重叠的,但是不会存在某个对象不属于任何聚簇的情况
Canopy算法常用应用场景
- 由于K-Means算法存在初始聚簇中心点敏感的问题,常用使用Canopy+K-Means算法混合形式进行模型构建
- 先使用canopy算法进行“粗”聚类得到K个聚类中心点
- K-Means算法使用Canopy算法得到的K个聚类中心点作为初始中心点,进行“细”聚类
- 优点:
- 执行速度快(先进行了一次聚簇中心点选择的预处理)
- 不需要给定K值,应用场景多
- 能够缓解K-Means算法对于初始聚类中心点敏感的问题
Mini Batch K-Means算法
- Mini Batch K-Means算法是K-Means算法的一种优化变种,采用小规模的数据子集(每次训练使用的数据集是在训练算法的时候随机抽取的数据子集)减少计算时间,同时试图优化目标函数;Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果效果只是略差于标准K-Means算法
- 算法步骤如下:
- 首先抽取部分数据集,使用K-Means算法构建出K个聚簇点的模型
- 继续抽取训练数据集中的部分数据集样本数据,并将其添加到模型中,分配给距离最近的聚簇中心点
- 更新聚簇的中心点值(每次更新都只用抽取出来的部分数据集)
- 循环迭代第二步和第三步操作,直到中心点稳定或者达到迭代次数,停止计算操作
聚类算法的衡量指标-轮廓系数
- 簇内不相似度:计算样本i到同簇其它样本的平均距离为 ; 越小,表示样本i越应该被聚类到该簇,簇C中的所有样本的 的均值被称为簇C的簇不相似度。
- 簇间不相似度:计算样本i到其它簇 的所有样本的平均距离 ; 越大,表示样本i越不属于其它簇。
- 轮廓系数: 值越接近1表示样本i聚类越合理,越接近-1,表示样本i应该分类到另外的簇中,近似为0,表示样本i应该在边界上;所有样本的 的均值被称为聚类结果的轮廓系数
层次聚类方法
层次聚类方法对给定的数据集进行层次的分解或者合并,直到满足某种条件为止,传统的层次聚类算法主要分为两大类算法:
-
凝聚的层次聚类:AGNES算法(AGglomerative NESting)—>采用自底向上的策略。
- 最初将每个对象作为一个簇
- 然后这些簇根据某些准则被一步一步合并
- 两个簇间的距离可以由这两个不同簇中距离最近的数据点的相似度来确定
- 聚类的合并过程反复进行直到所有的对象满足簇数目。
-
AGNES算法中簇间距离
- 最小距离(SL聚类)
两个聚簇中最近的两个样本之间的距离(single/word-linkage聚类法)
最终得到模型容易形成链式结构 - 最大距离(CL聚类)
两个聚簇中最远的两个样本的距离(complete-linkage聚类法)
如果存在异常值,那么构建可能不太稳定 - 平均距离(AL聚类)
两个聚簇中样本间两两距离的平均值(average-linkage聚类法)
两个聚簇中样本间两两距离的中值(median-linkage聚类法)
- 最小距离(SL聚类)
-
分裂的层次聚类:DIANA算法(DIvisive ANALysis)—>采用自顶向下的策略。
- 首先将所有对象置于一个簇中
- 然后按照某种既定的规则逐渐细分为越来越小的簇(比如最大的欧式距离)
- 直到达到某个终结条件(簇数目或者簇距离达到阈值)。
-
AGNES和DIANA算法优缺点
- 简单,理解容易
- 合并点/分裂点选择不太容易
- 合并/分裂的操作不能进行撤销
- 大数据集不太适合(数据量大到内存中放不下)
- 执行效率较低O(t*n2),t为迭代次数,n为样本点数
密度聚类方法
- 密度聚类方法的指导思想: 只要样本点的密度大于某个阈值,则将该样本添加到最近的簇中
- 这类算法可以克服基于距离的算法只能发现凸聚类的缺点,可以发现任意形状的聚类,而且对噪声数据不敏感。
- 计算复杂度高,计算量大
- 常用算法:
- DBSCAN
- 密度最大值算法
DBSCAN算法
- DBSCAN(Density-Based Spatial Clustering of Applications with Noise) 一个比较有代表性的基于密度的聚类算法,相比于基于划分的聚类方法和层次聚类方法,DBSCAN算法将簇定义为密度相连的样本点的最大集合,能够将足够高密度的区域划分为簇,并且在具有噪声的空间数据上能够发现任意形状的簇。
- DBSCAN算法的核心思想是:用一个点的ε邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不规则的cluster,而且聚类的时候事先不需要给定cluster的数量
- 优缺点 :
优点:- 不需要事先给定cluster的数目
- 可以发现任意形状的cluster
- 能够找出数据中的噪音,且对噪音不敏感
- 算法只需要两个输入参数
- 聚类结果几乎不依赖节点的遍历顺序
缺点: - DBSCAN算法聚类效果依赖距离公式的选取,最常用的距离公式为欧几里得距离。但是对于高维数据,由于维数太多,距离的度量已变得不是那么重要
- DBSCAN算法不适合数据集中密度差异很小的情况
密度最大值聚类算法(MDCA)
- MDCA(Maximum Density Clustering Application)算法基于密度的思想引入划分聚类中,使用密度而不是初始点作为考察簇归属情况的依据,能够自动确定簇数量并发现任意形状的簇;另外MDCA一般不保留噪声,因此也避免了阈值选择不当情况下造成的对象丢弃情况。
- MDCA算法的基本思路是寻找最高密度的对象和它所在的稠密区域;MDCA算法在原理上来讲,和密度的定义没有关系,采用任意一种密度定义公式均可,一般情况下采用DBSCAN算法中的密度定义方式
谱聚类
- 谱聚类是基于谱图理论基础上的一种聚类方法,与传统的聚类方法相比:具有在任意形状的样本空间上聚类并且收敛于全局最优解的优点。
- 通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据进行聚类的目的;其本质是将聚类问题转换为图的最优划分问题,是一种点对聚类算法。
- 谱聚类算法将数据集中的每个对象看做图的顶点V,将顶点间的相似度量化为相应顶点连接边E的权值w,这样就构成了一个基于相似度的无向加权图G(V,E),于是聚类问题就转换为图的划分问题。基于图的最优划分规则就是子图内的相似度最大,子图间的相似度最小。