机器学习算法系列(5):聚类的概念与模型
一.聚类的简介
(一)引言
聚类属于无监督学习,对大量未标注的数据集,按照数据内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。
给定一个有N个对象的数据集,构造数据的K个簇,K≤N,同时满足,每个簇至少包含一个对象,每一个对象属于且仅属于一个簇,将满足上述条件的K个簇称作一个合理划分。它的主要思想是对于给定的类别数目K,首先给出初始划分,通过迭代改变样本和簇的隶属关系,使得每一次改进之后的划分方案都较前一次好。
(二)分类
-
基于分层的聚类
对给定的数据集进行逐层聚类,直到满足某种条件为止。自下而上聚类时,初始将每个数据记录都组成一个单独的组,接下来的迭代中将相邻近的组合并成一个组,直到所有的记录组成一个分组或者某个条件满足为止。自上而下的聚类则是将数据集逐渐分解成不同的簇类。 -
基于划分的聚类
将数据集构造成K个分组,每个分组就代表一个聚类,K<N,而且这K个分组满足下列条件:①每一个分组至少包含一个数据记录;②每一个数据记录属于且仅属于一个分组(在模糊聚类算法中该点可以放宽条件)
-
基于密度的聚类
在基于密度的聚类中不需要用到各式各样的距离度量,使用密度的概念进行聚类,可以避免基于距离的聚类算法只能发现“类圆形”的聚类的缺点。只要一个区域的点的密度大于某一个阈值,就要把它加到与之相邻近的聚类中去。
-
基于网格的聚类
将数据空间划分成有限个单位的网格结构,所有处理都是以单个的单元为对象的。处理速度会很快。 -
基于模型的聚类
给每一个聚类假定一个模型,去寻找能够很好地满足这个模型的数据集。一个模型可能是数据点在空间中的密度分布函数。
(三)相似度、距离计算方法
-
闵可夫斯基距离系列
该部分在KNN处已经讲述过
https://blog.****.net/kodoshinichi/article/details/106819524
-
杰卡德相似系数(Jaccard)
-
余弦相似度(cosine similarity)
给定两个同维度的相量x,y -
皮尔森相似系数(pearson)
对两个随机变量X和Y(皮尔森相似系数和概率论中的相关系数的定义是一致的)
- 余弦相似度与皮尔森系数之间的关系:相关系数是将两个向量平移到原点后得到的夹角余弦值。
- 余弦相似度与皮尔森系数之间的关系:相关系数是将两个向量平移到原点后得到的夹角余弦值。
二.基于划分的聚类模型——KMeans算法
(一)原理思想
对N维欧式空间中的点进行聚类,通过迭代,每次确定K个类别中心,将各个节点归属到与之距离最近的中心点所在的cluster,然后将类别中心更新为属于各个cluster得到所有样本的均值,进行反复迭代,直至类别中心不再发生变化或变化小于某个阈值。
(二)基本假设
KMeans模型基于这样一个假设:对于每一个cluster,我们可以选出一个中心点,使得该cluster中的所有点到该中心点的距离小于其他cluster的中心的距离。
并不能保证所有数据点都能满足这样的约束,但是这已经是最好的结果了,有些误差是因为问题本身的不可分性造成的。
(三)算法步骤
假定输入的样本为S=x1,x2,…xn
-
选择初始的K个类别中心,(会根据问题有针对性地采用启发式算法)大多数情况下采用随机选取的方法,较多时候我们通过多次选出初始值跑K-Means来解决其达不到最优解的结果。
-
对于每一个样本xi,将其标记为距离类别中心最近的类别,即
-
将每个类别中心更新为隶属于该类别的所有样本的均值
-
重复前两步骤,直到类别中心的变化小于某个阈值或者达到最大迭代次数
(四)理论依据
上述分析中固定μj的值,进行的分析与操作就相当于算法中对所有数据向量的划分,划分到距离自己最近的簇类中心所对应的簇类中。
固定rij的值,通过求导获得uj的优化解,就相当于对簇类中心向量的更新,将划分在该簇类中的所有向量的均值作为新的簇类中心
因为每一次迭代的取值更新都有梯度求导得到数学论证,所以可以说每一次迭代都是取到损失函数J的最小值,因此J只会不断地减小,最终达到局部最优解或全局最优解。(很大程度上依赖于k值和初始中心向量)
(五)评价
- 优点:
- 聚类问题的经典算法,简单快速
- 处理大数据集也具有一定的伸缩性和高效率
- 簇近似为高斯分布的时候效果较好
- 缺点:
- 簇的均值有定义才能使用
- 需要事先确定k值,且算法对k敏感
- 不能发现非凸形状的簇或者大小差别较大的簇
- 对噪声和孤立点敏感(均值的特性)
在实践中常常把均值换成中位数指标,对应的算法就称作K-mediods聚类
三.基于密度的聚类模型——DBSCAN
(一)DBSCAN算法之前需要了解的概念
-
对象的ε邻域:给定对象在半径ε内的区域
-
核心对象:对于给定的数目m,如果一个对象的ε-邻域内至少包含了m个对象,则称这个对象为核心对象
-
直接密度可达:对于一个对象集合D中的两个数据对象p和q,如果p在q的ε-邻域内,而且q是一个核心对象,就说对象p从对象q出发时直接密度可达。
如下图,设邻域半径为1,m为5,则q是一个核心对象(因为q的1邻域半径内含有大于或等于m个数据对象点)且p在q的邻域半径内,所以可以说p从q出发时直接密度可达(注意是有方向性的)
-
密度可达:存在一个数据对象链p1,p2,…pn,p1=q,pn=p,对于pi∈D(1≤i≤n),pi+1是从pi出发关于ε和m直接密度可达的,则对象p是从对象q和m密度可达的。
-
密度相连:对象集合D中存在一个对象O,使得对p和q是从O关于ε和m密度可达的,那么对象p和q就是关于ε和m密度相连的
理解:p和q关于O密度相连,即从o到p关于ε密度可达,从o到q关于ε密度可达。
-
(基于密度的)簇:最大的密度相连对象的集合
-
噪声:不包含在任何簇中的对象称为噪声
(二)DBSCAN的原理思想
只要样本点的密度大于某一阈值,就可以将这个样本添加到最近的簇中。这类算法可以在含有噪声点的数据集中找到任何形状的聚类。
(三)DBSCAN的算法步骤
- 首先随机选择数据集中的某个数据对象点A作为算法实施的切入点,设定合适的ε和m值;若A点是核心点,则创建A作为核心对象的新簇,簇内的其他点暂时标记为边缘点;如果A不是核心点,则暂且将A标记为边缘点。
- 在标记了的边缘点中选取一个重复上述步骤,寻找并合并和新对象且与核心对象直接密度可达的对象。反复递归这一步,直到没有新的点可以更新簇,则算法结束。
- 如果还有数据对象点未处理,则再次产生一个新的类别来重新启动这个算法过程,直到遍历完所有的数据点。最终数据对象点被划分成三类——边缘点、核心点和噪声点。
(四)评价
- 优点
- 无需确定聚类的个数
- 可以发现任意形状的簇类
- 对噪声具有鲁棒性
- 只有两个参数,且对数据输入的顺序不敏感
- 缺点
- 边界点的划分具有一定的模糊性
- 若密度差异过大,数据集无法使用DBSCAN算法
- 数据集与数据规模不确定的情况下很难确定参数的值
四.参考文档
wiki百科
不知名pdf文档
该文档为算法面试整理所用